ROS1 程序打包
1. 修改 CMakeLists.txt
在需要打包的功能包的CMakeLists.txt 添加,
# Mark executables and/or libraries for installation
install(TARGETS xxxx
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
2. 安装打包工具
依赖于 bloom 和 fakeroot 两个包
sudo apt-get install python-bloom fakeroot
3. 打包
在需要打包的功能包目录下运行
bloom-generate rosdebian --os-name ubuntu --ros-distro melodic
最后的参数是你的ros版本,运行成功后将在当前目录下生成一个DEBIAN目录。如果运行出错,则看步骤4。
运行成功基础上运行
fakeroot debian/rules binary
运行成功后,则会在上一层目录下生成 .deb文件 ,安装该文件只需要
sudo dpkg -i xxxxx.deb
4. 功能包相互依赖关系解决
对于多个自定义ros功能包,其中存在相互依赖的关系,必须要安装依赖的功能包例如,功能包a调用了功能包b的功能,那么必须安装功能包b,才能够正确打包功能包a。
4.1 安装功能包b
sudo dpkg -i ros-xxx-b-xxxx.deb
4.2 安装功能包b
创建 ~/.ros/rosdep.yaml 文件,假设功能包名称为 std_msgs
std_msgs:
ubuntu: [ros-melodic-std-msgs]
4.2 修改 rosdep update 命令路径
尝试执行 rosdep update 命令,如果失败则需要按照rosdep update read operation time out 解决方法 所描述的进行修改,直到该命令正常工作。
4.3 添加自定义ros包目录
在 /etc/ros/rosdep/sources.list.d/ 下新建 50-my-default.list文件,添加内容如下
yaml file:///home/xxxx/.ros/rosdep.yaml
这个路径是上面创建的文件的路径,需要修改为自己的。
然后执行
rosdep update
这一步是在系统中新添加默认ros功能包,在打包时就会找到。
4.4 正常打包其他功能包
这时候再打包功能包a,那么系统将会找到功能包b,并且正常打包。
ROS2 程序打包
ros2 程序打包的方法和ros1 基本一致,但是会出现几个功能包找不到的问题。因此采用和上文类似的方法,让系统找到对应的功能包。修改文件~/.ros/rosdep.yaml,添加如下内容,其中std_msgs为自己定义的部分,下面三个是缺失的部分。
std_msgs:
ubuntu: [ros-melodic-std-msgs]
ament_cmake:
ubuntu: [ros-dashing-ament-cmake]
ament_lint_auto:
ubuntu: [ros-dashing-ament-lint-auto]
ament_lint_common:
ubuntu: [ros-dashing-ament-lint-common]
重新执行
rosdep update
然后按照ros1部分对功能包进行打包即可。