如何在不共享源的情况下分发ROS包

Ber*_*rdo 4 share software-distribution package ros

有没有办法在不共享源的情况下分发ROS包?

我只是希望用户能够在没有依赖性问题的情况下运行ROS节点.

我知道ROS是一个开源项目,但我不允许共享代码.

Vti*_*tik 10

解决方案1:

在包CMakelists.txt中,添加install指令.它是这样的:

install( TARGETS
    #list of nodes
    DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

install(TARGETS
    #list of shared libraries
    ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
    LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
)

install(FILES 
  #list of necessary files (xml...)
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)

install(DIRECTORY 
  include/${PROJECT_NAME}/
  DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
  PATTERN ".svn" EXCLUDE
  PATTERN ".git" EXCLUDE
)
Run Code Online (Sandbox Code Playgroud)

运用

 $ catkin_make 
 $ catkin_make install
Run Code Online (Sandbox Code Playgroud)

您可以创建执行所需的二进制文件而无需共享代码.这将创建/install除常规/devel/buildcatkin工作区之外的另一个文件夹.

注意:您可以使用以下命令指定安装文件夹:

 $ catkin_make -DCMAKE_INSTALL_PREFIX=path/to/folder install
Run Code Online (Sandbox Code Playgroud)

只需确保the binaries need to be compiled for the correct architecture that the other computer has在调用catkin_make时,您在工作区中没有的依赖关系也需要在使用之前由其他部分安装.

现在您已拥有该/install文件夹,只需压缩并发送即可.

现在,关键部分是将install/setup.bash添加到您的其他计算机.bashrc,否则ROS将找不到分布式pacakges.

$ echo "source ~/catkin_ws/install/setup.bash" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见此处

解决方案2:

你可以生成一个deb-src,然后你可以编译它并分发.deb文件,离开另一台机器,你可以安装它dpkg -i.这可以通过遵循预发布教程的这一部分来完成.

  • 这个答案正是我想要的!谢谢.看起来没什么CMake不能做的:) (4认同)