在进行完简单的two wheel robot在gazebo中进行模拟后,这周准备进行UAV的gazebo模拟,由于UAV的模型设计过于复杂,因此我选择从git上clone一个simulation帮助自己快速理解,结果在编译过程中出现了许多问题,在此进行记录。

(1)有许多关联的包

典型的就是octomap一系列的包,用法详情见octomap roswiki,未安装时典型报错如下图所示。一开始傻傻的把git上的源码clone到同级目录中,结果发现虽然这个报错虽然不出现了,但是使用catkin_make已经无法编译src中的文件了,就是因为octomap这一系列的包并非catkin_make可以编译的包,只能用make进行编译。因此系统推荐我使用catkin_make_isolated命令进行编译,然后天坑就开始了,这是一个独立编译的命令,就是为了应对src下的包中存在非catkin_make编译的包的情况,但是catkin_make_isolated这个命令会出现各种奇奇怪怪的错误,比如变量无法识别、命令cmake找不到、网络上获取关联文件超时等等。

其实这个包如果是初学ros的人一般是没有装过的,如果用的不多我们可以只编译不安装,只要在编译后在CMakeLists.txt中解决一下依赖就好。但考虑到以后可能要经常使用这个包,因此我需要将这个包git clone下来然后编译安装,其他的包也是这个步骤。具体步骤见下:

cd octomap

mkdir build

cmake ..

make

sudo make install

如果已经安装了这个包仍然会出现上述错误,问题就是catkin_make的依赖处理错误,那就要在CMakeLists.txt中加入一行set(octomap_ros_DIR "/usr/local/share/octomap_ros/cmake/"),其中""中的路径是你在执行make install后显示的*.cmake文件存放的路径,如果忘记了可以自己去找找,一般是在/usr/local/share下。解决原贴:https://blog.csdn.net/mainking2003/article/details/107101773/

(2)make: *** No rule to make target

报错如题,错误原因很容易理解,不知道通过什么规则来make这个文件,换言之就是makefile里面的文件依赖关系有问题,导致头文件找不到。

最简单的解决方法:进入工作空间,执行

rm -rf build

rm -rf devel

catkin_make

上述问题的产生的根本原因是工程更改路径或者更改了其中的文件夹名称之后,之前生成的.o.d文件在再次编译时并不会重新编译,所以只要将catkin_make生成的文件全删掉让它自己在重新编译就好了。解决原贴:https://blog.csdn.net/roserose0002/article/details/38397537

(3)缺少*_msgs

顾名思义,没有这种msgs文件,安装就好了:

sudo apt-get install ros-melodic-mav-msgs

其中mav替换你们缺少的消息类型,melodic替换你们的ros版本号。解决原地址:https://www.guyuehome.com/7598

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐