引言
这个报错是初学ROS时经常会遇见的一个报错,造成这报错的原因主要有三个,今天在此进行一个原因的分析以及给出相对应的解决方法。
一、对ROS工作空间结构理解有误
初学者在刚开始上手使用ROS时往往会忘记了在看视频时学习的理论知识,对工作空间的结构不清楚、不了解,从而导致了这个错误。
我们在一个文件夹下创建一个名为src的文件夹(一定要为src)并打开终端输入catkin_make编译工作空间,ROS会递归检查 src 目录中的每个功能包并一一编译它们,同时生成devel和build文件夹用于存放编译好的二进制文件以及可执行文件。因此我们需要把我们想要运行的功能包放到工作空间的src文件夹下,而不是与src平行的一个位置。
可能又有同学会说我看见一些功能包下面也有叫src的文件夹,为什么不放到功能包下面的src下。我们需要了解清楚,功能包下的src是用于存放实现功能包功能的源文件的,即那些.cpp、.py文件;而工作空间下的src是存放功能包的,这一点我们要弄清楚
解决方法:
了解清楚工作空间的架构,把功能包放到工作空间下的src后重新编译执行
二、没有刷新环境变量
我们在学习ROS的过程中应该有了解环境变量这个概念。像一些我们通过apt-get命令安装的一些软件通常在安装过程中就配置了相关的环境变量,使得我们无论在哪个位置打开终端,都能直接运行它相关的launch文件。但是我们在github上或者其它位置上下载的功能包是没有在系统中配置相关的环境变量的,因此成功编译后,系统并没有检测到有这个launch文件存在,所以需要我们手动刷新一下环境变量。
解决方法一:
在运行相关launch文件之前输入“source devel/setup.bash”刷新环境变量
解决方法二:
1- 在home目录下打开终端
2- gedit ~/.bashrc
3- 在文件的最末尾输入你的工作空间setup.bash文件的绝对地址
4- source /home/username/xxx/devel/setup.bash //username为你电脑的名称、xxx为你工作空间的名字,这个只是个例子,实际的路径要根据实际的绝对路径填写
5- source ~/.bashrc //保存文件后使其生效
三、CMakeList.txt文件填写有误
这种情况比较少见,因为代码上传者都是根据自己测试运行过的代码来填写的readme文件,因此一般来说不会有错,但也不排除有写错的可能,即给出了错误的运行命令或者launch文件填写错误,但实际的运行命令不是他给出的。
解决方法:
通过查看功能包的中的CMakeList.txt以及对应的launch文件来确定启动代码的正确命令