目录
写在前面
1.作者的Ubuntu版本为20.04,ROS版本为noetic。虽然官方给的文档里建议使用18.04与melodic ,但是考虑到已经安装了20.04以及对应版本的ROS,再加上队友安装18.04之后网络连接有问题,所以选择使用20.04版本。(事实证明,20.04版本也是可以的,但是22.04版本应该会有很有很多问题,具体原因不作解释)
2.官方文档有至少三处地方是有错误的,会对初学者造成一定困扰。并且一些简单错误,比如对gazebo插件作修改时,ROS版本要对应,文档给的是melodic,如果是20.04,要改为对应的noetic。
3.文档默认一部分操作我们是会的,比如修改~/.bashrc文档,指令为vim ~/.bashrc,如果要插入内容输入i(insert)即可,删除一行为dd,保存并退出为ESC+:(英文)+wq。
4.本文按照文档的顺序,主要介绍作者及同学遇到的error的解决办法以及文档里的错误。
5.如果要进行用键盘控制无人机飞行一步,则必须按照最新的文档进行。
为什么一定要用PX4 1.13呢?
我们来对比两个PX4版本的launch文件即可发现端倪
这是PX4 1.11版本的
这是PX4 1.13版本的
很明显,我们可以发现用键盘控制无人机飞行所需的indoor1.launch文件在PX4 1.11里不存在,而直接复制粘贴launch文件会出问题(下文有提到),因此最优解就是下载PX4 1.13版本的。
依赖安装
在进行如下代码时,作者出现了以下错误:
sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev
genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python-pip python3-pip gawk
报错提示python-pip没有可安装候选,是因为20.04默认是使用python3的,而python-pip对应python2,因此会出现错误。只需将python-pip安装包删去即可。
ROS安装
我的ROS是在之前安装的,几乎没有出现错误,以上是安装好之后的页面。
Gazebo安装
1.漏掉指令
在rosrun gazebo_ros gazebo时,发现不能正常打开,而直接输入gazebo可以打开,报以下错误:
出现该错误是因为我漏了一条以下图片里的安装命令
2.gitclone出错
由于github是外国网站,能git成功纯靠网络与运气。有条件的可以翻墙,也可以更换国内的镜像源。PS:本人一般习惯多试几次,一般多试几次就好啦
MAVROS安装
这一步几乎不会报错,按照提示将安装包换为对应的ROS版本号即可。
PX4配置
这一步对应的文档有错误,首先来看一下进行make px4_sitl_default gazebo报错页面
1.第一个报错:没有规则来制作目标
这是由于我们下载好压缩包然后解压之后,放到主目录下,按照文档cd进入PX4_Firmware后,里面还有一个PX4_Firmware_13文件夹,没有make所需的规则。所以我尝试将PX4_Firmware_13移到主目录里,并将其重命名为PX4_Firmware,然后重新make,结果是没有以上制作目标的错误了,然而出现了以下错误(第二个错误)
2.第二个错误:
提示说现在的cmake文件和cmake创建时的文件不同,通过检查cmake创建时的源代码(如图)可知
cmake最初位于主目录下的PX4_Firmware_13下,而按照文档的要求它位于PX4_Firmware里,
我的解决办法是先将PX4_Firmware文件夹下的PX4_Firmware_13放到主目录下,并把原来的PX4_Firmware文件夹删除,然后进入PX4_Firmware_13文件夹下的build文件夹里,将build.ninja和CMakeCache.text删除,然后重新make即可。
3.launch既不是…也不是…
这是由于没有添加路径或者没有正确添加路径以及没有source之后的结果,只需添加好路径然后source就好了。
温馨提示:由于文件夹改为了PX4_Firmware_13,因此对应的路径也要修改,修改为:
source ~/catkin_ws/devel/setup.bash
source ~/PX4_Firmware_13/Tools/setup_gazebo.bash ~/PX4_Firmware_13/ ~/PX4_Firmware_13/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware_13
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4_Firmware-13/Tools/sitl_gazebo
4.roslaunch px4 mavros_posix_sitl.launch及建立通信时错误
(1)有可能是路径的问题(但是按照上面的代码添加之后应该不会有问题),可以重新添加然后source一下
(2)也有可能是版本不适配的问题,PX4 1.11版本对应旧版本的XTDrone,而PX4 1.13对应新版本的XTDrone,所以请务必按照一个文档来,不要混着用
(3)以上两种情况都没有,可能是launch文件里的参数(fcu_url)设置有偏差。解决办法:在PX4_Firmware_13下launch文件里找可以正常建立通信的fcu_url参数,然后在mavros_posix_sitl.launch里进行更改。
参考这篇文章 :px4仿真时,/mavros/state现实连接不上_老李雅普诺夫的博客-CSDN博客
XTDrone源码下载
这一步同样注意将PX4_Firmware改为PX4_Firmware_13,修改后的代码为
git clone https://gitee.com/robin_shaun/XTDrone.git
cd XTDrone
git checkout 1_13_2
git submodule update --init --recursive
# 修改启动脚本文件
cp sitl_config/init.d-posix/* ~/PX4_Firmware_13/ROMFS/px4fmu_common/init.d-posix/
# 添加launch文件
cp -r sitl_config/launch/* ~/PX4_Firmware_13/launch/
# 添加世界文件
cp sitl_config/worlds/* ~/PX4_Firmware_13/Tools/sitl_gazebo/worlds/
# 修改部分模型文件
cp -r sitl_config/models/* ~/PX4_Firmware_13/Tools/sitl_gazebo/models/
# 替换同名文件
cd ~/.gazebo/models/
rm -r stereo_camera/ 3d_lidar/ 3d_gpu_lidar/ hokuyo_lidar/
这一步也不会出现太多大问题,按照步骤来即可。
用键盘控制无人机飞行
这一步有两处地方需要修改,因此我直接将代码修改好:
在一个终端运行
cd ~/PX4_Firmware_13
roslaunch px4 indoor1.launch
Gazebo启动后,在另一个终端运行(注意要等Gazebo完全启动完成,或者可能脚本会报错)
cd ~/XTDrone/communication/
python3 multirotor_communication.py iris 0
与0号iris建立通信后,在另一个终端运行
cd ~/XTDrone/control/keyboard
python3 multirotor_keyboard_control.py iris 1 vel
这一步会出现的错误
这是由于我的PX4版本为1.11,但是indoor1.launch是从PX4 1.13里复制粘贴来的,出现了没有返回值等等问题。
然后最初我没有意识到这个问题的本质在哪,然后在老师的提示下,检查了前面建立通信那一步是否能正常运行,结果出现了以下报错
提示在建立symlink时出现问题,但是最初时是没问题的,我百思不得其解,百度搜索也没搜索到,与老师调试两个小时之后也是无果,兜兜转转几乎回到了原点。百度给的答案不是说虚拟机内存不够就是说更改了主目录,总之,都不是我想要的解决办法。
进行了思路的整理与分析后,找到了问题所在,在建立通信时,全是PX4 1.11的文件,但是在进行到用键盘控制飞行时,我将PX4_Firmware_13下的launch文件夹里的全部内容移到了PX4_Firmware下,很显然PX4_Firmware_13对应的是PX4 1.13的文件,两者肯定是有兼容性等问题的。因此,当我把1.11的所有东西都删去之后,全部安装1.13的东西,就没有出现这个问题了。飞机也可以正常起飞了。