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
完成后,再打目标的安装包即可。
作者:水水滴答
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。