• ROS bloom deb打包


    ROS bloom deb打包

    1、创建简单的功能包

    catkin_create_pkg deb_demo roscpp rospy
    

    创建一个.cpp文件,写上测试程序,并编译运行通过。

    
    #include "ros/ros.h"
    #include <signal.h>
    
    void MySigintHandler(int sig)
    {
    
        ROS_INFO("shutting down!");
        ros::shutdown();
    }
    
    int main(int argc, char** argv){
    
        ros::init(argc, argv, "deb_demo_node");
    
        ros::NodeHandle h_node;
    
        ros::Rate loop_rate(1);
    
        signal(SIGINT, MySigintHandler);
    
        int sec = 0;
        while(ros::ok() && sec++ < 5){
            loop_rate.sleep();
            ROS_INFO("ROS is ok!");
            ros::spinOnce();
        }
        //ros::ok()返回false,代表可能发生了以下事件
        //1.SIGINT被触发(Ctrl-C)调用了ros::shutdown()
        //2.被另一同名节点踢出 ROS 网络
        //3.ros::shutdown()被程序的另一部分调用
        //4.节点中的所有ros::NodeHandles 都已经被销毁
        //ros::isShuttingDown():一旦ros::shutdown()被调用(注意是刚开始调用,而不是调用完毕),就返回true
        //一般建议用ros::ok(),特殊情况可以用ros::isShuttingDown()
    
        ROS_INFO("Node exit");
        printf("Process exit");
        return 0;
    }
    

    2、CMakelists文件中的install命令

    在CMakelists文件后面添加如下语句:

    install(TARGETS ${PROJECT_NAME}_node  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
    

    这里的${PROJECT_NAME}_node 是可执行文件的名称

    3、apt安装bloom

    sudo apt-get install python3-bloom fakeroot
    

    4、bloom命令生成deb文件

    终端进入到deb_demo包的目录下,并依次执行以下命令,--ros-distro后面加的是ROS的版本noetic,依据当前的系统来

    bloom-generate rosdebian --os-name ubuntu --ros-distro noetic
    fakeroot debian/rules binary
    

    注意:此步我在树莓派上执行的时候报错
    ValidationFailed: rosdep database does not have any sources.
    这个是因为当时安装树莓派时,rosdep update的坑没有填导致的。先填坑。参考博客

    执行命令后如下:

    生成的deb文件在上一层

    安装过程

    启动节点

    5、开放include、launch、config或python脚本文件时

    修改CMakelists

    install(DIRECTORY include/xxx/
      DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
      FILES_MATCHING
      PATTERN "*.h"
      PATTERN "*.hpp")
      
     
    install(DIRECTORY launch
      DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
    )
    
    install(DIRECTORY config
      DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
    )
    
    install(DIRECTORY cfg
      DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
    )
    
    catkin_install_python(PROGRAMS
       xxx.py
       DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
    )
    

    6、依赖自定义消息类型时

    先打包自定义的消息类型包,打包过程如上,打包完成后,安装到机器上。这里要注意的是生成ROS依赖参考博客,生成的方式和rosdep update的过程差不多。

    这里整理一下,链接自定义消息到ROS依赖,在~/.ros/目录下创建rosdep.yaml,该文件内容如下:

    control-msgs:
        ubuntu: [ros-noetic-control-msgs]
    

    编写完成后,将该文件连接到rosdep索引中,即在/etc/ros/rosdep/sources.list.d/目录下添加一个名为50-my-default.list文件,文件内容如下:

    yaml file:///home/pacecat/.ros/rosdep.yaml
    

    其中,file指向的是以上编写的rosdep.yaml路径

    完成后,更新索引,将自定义消息加载到ros软件列表:

    rosdep update
    

    完成后,再打目标的安装包即可。

  • 相关阅读:
    多线程编程之线程死锁问题 转载
    线程的挂起和恢复 转载
    redis 内存库设置 教你怎么解决64位Windows版Redis狂占C盘的问题.
    MSSQL数据库分区表
    如何将桌面的路径定义到其它盘符,如d:users桌面
    sqlserver数据库脱机时发生异常:由于无法在数据库 'SMS' 上放置锁,ALTER DATABASE 失败。请稍后再试。 ALTER DATABASE 语句失败。 (.Net SqlClient Data Provider)
    JAVA代码反编译笔记
    SQLServer—系统中的内存配置
    .net remoting 客户端与服务端绑定事件,一部电脑当服务器,另一部当客户端,发布后没法接收远程错误信息。
    Java Socket 模拟HTTP请求
  • 原文地址:https://www.cnblogs.com/havain/p/16362519.html
Copyright © 2020-2023  润新知