需求:本地构建ROS包,生成.deb文件
1、安装 bloom
$ sudo apt-get install python-bloom
2、生成.deb文件
$ cd path/to/your/catkin/package
$ bloom-generate rosdebian --os-name ubuntu --os-version xenial --ros-distro kinetic
$ fakeroot debian/rules binary
3、可能的错误
3.1 对于只依赖于ROS的package,bloom-generate 命令一般不会出现问题。但是如果我们包 my_package
依赖于自己的另外一个包,如 my_private_package1,此时bloom-generate构建my_package时,一般会
出现 rosdep 错误,解决方法:
新建文件 private.yaml (位置随意),内容如下:
my_private_package1:
ubuntu: ros-kinetic-my-private-package1
然后将private.yaml文件路径追加到 /etc/ros/rosdep/sources.list.d/20-default.list
# os-specific listings first
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosep/osx-homebrew.yaml osx
yaml file:///home/user/rosdep/private.yaml
执行 rosdep update 后再运行 bloom-generate 命令,可解决rosdep问题。
3.2 对于WSL系统,fakeroot 命令可能会出现 SYSV IPC 错误,解决方法:
update-alternatives --set fakeroot /usr/bin/fakeroot-tcp
4、其他注意事项
package本地生成的.deb文件,安装后即可使用,但要注意package下CMakeList.txt 的 Install 部分,一般有如下部分:
# Specifying Installable Targets
install(TARGETS package_node
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# Installing header files
install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
PATTERN ".svn" EXCLUDE
)
install(DIRECTORY include/
DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
PATTERN ".svn" EXCLUDE
)
# Check launch file
if(CATKIN_ENABLED_TESTING)
find_package(roslaunch REQUIRED)
roslaunch_add_file_check(launch)
endif()
# Installing roslaunch files or other resources
install(DIRECTORY launch images
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
PATTERN ".svn" EXCLUDE
)