我是ROS的新手,现在我接管了一个非常混乱的旧ROS工作区,我几乎不可能在短时间内修复所有的编译错误,所以我创建了一个新的ROS工作区,然后将一些相关的包(文件夹)从旧ROS工作区复制到我的新工作区作为基准。然后我执行了以下步骤: 1、source /opt/ros/$version/setup.bash2,然后回显$ROS_PACKAGE_PATH。--太好了,只有/opt/ros/$version一些内置的包包含在ROS_PACKAGE_PATH中
3.在我的新工作区/devel中,运行源setup.bash。--现在发生了一些我不确定/不理解的事情
在第3步之后,ROS_PACKAGE_PATH包含了ROS内置包、旧工作空间和我的新工作空间,当我在新工作空间中输入'catkin build $nodename‘时,涉及到旧工作空间的一些依赖关系,并且仍然会导致问题。我复制ROS节点的方式行不行?创建我的子集工作区的正确方法是什么?真的很感谢
发布于 2019-11-21 01:36:40
它与workspace overlaying相关。这里有一个官方参考:(http://wiki.ros.org/catkin/Tutorials/workspace_overlaying)
为什么会发生这种情况?
事情是这样的,正如@JWCS提到的,当你已经对 new_workspace进行了编译之后,你的~/.bashrc文件中可能已经有了旧的工作区。(检查参考的项目3:链接catkin工作区)
如何摆脱它?
即使你将它从~/.bashrc中删除,它仍然会出现在$ROS_PACKAGE_PATH上,因为你已经用old_workspace在$ROS_PACKAGE_PATH上编译了你的new_workspace。
compilation流程将当前的$ROS_PACKAEGE_PATH考虑在内,并将其“附加”到您正在编译的工作区。
解决方案
转到你的文件夹:cd ~/new_workspace
rm -rf build devel
new_workspace build:rm -rf build devel
catkin_make
$ROS_PACKAGE_PATH,它将只包含ROS发行版安装path
catkin_make
source ~/new_workspace/devel/setup.bash
$ROS_PACKAGE_PATH,它将包含/opt/ros/<distro> +关于~/.bashrc的
您可以保留old_workspace源代码,因为在那之后您就有了new_workspace源代码。它将不再考虑old。但为了简单和条理清楚起见,我建议您在.bashrc文件中只保留您正在处理的工作区。
希望能对你有所帮助!
问候
发布于 2019-09-23 09:43:59
有两件事需要检查。首先,确保您没有在~/.bashrc中获取旧的代码库。在bashrc中使用source /opt/ros/VERSION/setup.bash是一种常见的做法,当您只有一个工作区时,也可以使用source ~/MY_WS/devel/setup.bash。其次,如果你已经采购了旧的工作空间,那么在采购新的工作空间之前,你应该关闭终端,否则旧的就会出现。
至于你清理工作空间的方法,这是一个很好的方法。我会开始一次将一个包从旧的工作区移动到新的工作区,然后每次构建所有的东西。如果查看CMakeLists.txt/package.xml包,应该会列出所有依赖项。如果它们来自旧的工作区,请确保将它们复制过来。这应该会减少你的问题。如果有一个包是真正损坏的,您将能够快速找到并隔离它。
发布于 2019-11-09 12:19:45
正如JWCS所建议的,您可以做的最好的事情是一次将一个包从旧的工作区移动到新的工作区,并每次重新编译它,并验证您的CMakelist是否与旧的相同。至于第三步,我将使用catkin_make来编译这些包。
https://stackoverflow.com/questions/58054672
复制相似问题