ROS多个工作空间存在同名包的BUG

0. 写在最前面

为了测试方便,我有多个工作空间。不同工作空间会存在一些同名的包。按照官网教程的说法,只要source了setup就可以将当前工作空间设置为ROS顶层。一天在测试的时候发现,并不能通过修改.bashrc来修改当前活跃的工作空间。之前source的工作空间仍然存在,一直调用的是之前的工作空间的包。
在这里插入图片描述

1. 问题描述

查看你当前的ROS包路径:

echo $ROS_PACKAGE_PATH

输出:
/home/night_fury/robot_ws/src:/home/night_fury/catkin_ws/src:/home/night_fury/JDD_ws/src/cartographer_ros/cartographer_rviz:/home/night_fury/JDD_ws/src/cartographer_ros/cartographer_ros:/home/night_fury/JDD_ws/src/cartographer_ros/cartographer_ros_msgs:/opt/ros/indigo/share:/opt/ros/indigo/stacks

会输出你所有的ROS工作空间路径,如果有同名的包,则调用顺序为echo $ROS_PACKAGE_PATH显示的顺序。
像我这里,一直调用的是robot_ws空间的包,无法调用catkin_ws的包,哪怕我已经按照前面那样子吧robot_ws注释掉了。

甚至我删掉ROS_PACKAGE_PATH变量再重新source仍然无效,ROS_PACKAGE_PATH仍然会重新变为所有的工作空间。应该是catkin_ws中的setup.bash文件被污染了,导致了明明只source catkin_ws工作空间,但实际source所有的工作空间。这应该是一个bug。

2. 解决办法

  1. 删掉builddevel文件夹
  2. 删掉ROS_PACKAGE_PATH环境变量:unset ROS_PACKAGE_PATH
  3. 重新编译你的包
  4. 注释掉~/.bashrc中无关的包的bash,只保留想要的工作空间,如图一。
  5. source ~/.bashrc

完成以上五步就可以实现多个工作空间的分离,调用同名的包了。

参考

http://wiki.ros.org/cn/ROS/Tutorials/InstallingandConfiguringROSEnvironment
https://blog.csdn.net/moondog123/article/details/88432341


喜欢我的文章的话Star一下呗Star

版权声明:本文为白夜行的狼原创文章,未经允许不得以任何形式转载

原文地址:https://www.cnblogs.com/HaoQChen/p/11048579.html