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

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

posted @ 2022-06-10 11:07  水水滴答  阅读(842)  评论(0编辑  收藏  举报