ROS 工作空间 创建package source之后找不到路径以及 查找不到相关包 等若干问题

目前还是处在最初级的水平,看过一些关于创建工作空间和package的网上的教程和文章,今天总结和分享一下

首先关于如何创将工作空间,翻看网上的教程可以发现有很多不同的文章所用的构建工作空间的方法不同,有使用rosbuild,rosmake的,或者catkin_make 或者catkin build 的。关于创建方式,根据看的文章可以总结一下:rosbuild这种方式属于比较早期的工作空间的构建方式,而catkin_make是主流的构建方式 。

  • 关于rosbuild和catkin_make可以看官方的wiki或者这里有一个中文翻译版本https://blog.csdn.net/chishuideyu/article/details/53581013
  • 关于catkin_make 和catkin build 的区别可以看官方文档 https://catkin-tools.readthedocs.io/en/latest/migration.html ,另外还有一个问答可以简要参考一下

从目前网上的教程来看,基本上对简单工作空间的创建都是使用的是catkin_make命令,我使用的是IDE: roboware studio,作为一个面向ROS的集成开发工具对新手比较友好,在大部分情况下可以帮你自动补全camakelists.txt和package.xml文件,所以我现在比较喜欢用它来创建工作空间。


关于 source之后找不到路径以及 查找不到相关包的问题

通常的解决方法是 source ~/<工作空间>/devel/setup.bash 或者直接把 这句话写到 ~/.bashrc文件中去,但有些时候会出现找不到包,或者明明已经把工作空间注释掉了,却还能查到包的路径等一系列问题.

2019年12月1日

随着对ROS以及其编译工具cmake的进一步理解,对原来的解决方案做一下更改

首先说明一下问题产生的主要原因,当你逐渐熟悉了ros和cmake之后,有些问题的原因就变的很清楚了,这篇文章的问题和之前提到的opencv的问题都有一个共同的原因:cmake的缓存机制,主要还是之前自己对cmake不了解造成的

所以要想解决这个问题,单靠下面提到的注释是不行的,你需要在注释之后,将原工作空间编译产生的build,devel,以及install文件夹删除之后重新编译才可以。因为编译的时候的一些设置跟当前cmake状态有关。

所以对于这样的问题可以采用统一的方法:

如果你只想单独编译一个包,不想让它和你的其他工作空间的包产生任何关系,你可以在编译之前 在~/.bashrc文件中注释掉其他工作空间的source,然后编译你的这个工作空间中的包,编译完之后在source 这个空间,在把注释去掉,这样你的这个空间就和其他空间没有关系,当你之后再注释的时后,就不会出现明明注释掉了,却还是在ROS_PACKAGE_PATH变量中看到注释掉工作空间目录的问题


2019年12月1日前

解决方案一般有两种:

1.在~/.bashrc文件中将所有的除了ROS自带路径之外的你自己的其他工作空间注释掉,然后保存退出,之后打开新的终端后再次进入修改,将注释去掉,后在source ~/.bashrc

2.或者把上面的语句全部去掉,直接在文件中写入如下格式的语句作为替代:

路径之间用冒号隔开,最右边是ros自带路径,后面添加你自己的路径,注意 ROS中有overlaying机制,如果定义了两个相同的包,包括包名和节点名,那么,后面路径中的包会覆盖前面路径中的包,比如ROS 自带了一个乌龟的包turtlesim,如果你用源码也编译了一个乌龟的包,也起名叫turtlesim,将你自己的工作空间名字加到后面,那么,你的turtlesim就覆盖了原来自带的,执行的时候就会执行你自己写的包.

如果上述两种方法都没用,那么很有可能你的工作空间的setup.bash文件处于某种原因被污染,可以删除build和devel文件夹后重新生成包,在进行source

 

你可能感兴趣的:(ROS)