[ROS] ROS 开发常见问题整理
在 ROS 开发过程中经常遇到一些很简单的问题,由于 ROS 文档比较少,所以也是一遍搜索一边整理。现将部分遇到过的问题整理在这里,也可能解决方法并非正确,仅供参考。如有问题欢迎留言补充。
1、Build 相关:
1)如何只编译单个 package?
使用 --pkg 参数即可,比如单个:
1 | catkin_make --pkg <package A> |
比如多个:
1 | catkin_make --pkg <package A> <package B> |
2、Package 相关:
1)依赖其他 package 怎么做?
有时候我们写得 packageA 依赖 packageB 的 message,如果我们不设置依赖的话,则会造成因为 packageB 没有在 packageA 之前编译完成而没有生成相应的 message。
有一个办法是在 packageA 的 package.xml 文件里面增加 packageB 的依赖定义如下:
1 2 | <build_depend>packageB</build_depend> <run_depend>packageB</run_depend> |
再 build 一下,应该 packageB 会在 packageA 之前编译出来了。
3、Message 相关:
1)依赖其他 package 的 Message 怎么做?
有时候我们的 packageA 需要调用 packageB 的 message,但是如果这两个 package 是独立的话,我们是没有办法保证在 build 的时候 packageB 的 Message 一定能够在 packageA 编译之前生成。也就很有可能出现类似 cannot find header 的错误。
解决方法是:
步骤:1:编辑 packageA 的 CMakeList.txt 文件,在 find_package 部分增加类似如下内容:
1 2 3 4 5 6 | find_package(packageB REQUIRED COMPONENTS message_generation roscpp rospy std_msgs ) |
步骤2:
在 packageA 的 package.xml 文件里面增加 packageB 的依赖定义如下:
1 2 | <build_depend>packageB</build_depend> <run_depend>packageB</run_depend> |
再 Build 一下应该就可以了。
PS:在设计 package 之间依赖关系的时候,注意一定要避免循环依赖,比如 packageA 依赖 packageB,packageB 又依赖 packageA 这种,这样会因为两个 package 都在等待对方编译完成而整个工程无法编译。
参考文献:
[1] http://answers.ros.org/question/188982/message-headers-wont-build-first/