笔者最近需要跑无人机巡检大坝的仿真,于是在自己的Ubuntu2018.04中开始安装PX4,问过不少之前已经装过PX4的师兄和同学,都曾在PX4安装过程中踩过许多坑,耗费了不少时间,但是似乎都没有对自己安装过程中遇到的每一个问题进行系统的整理。那么,笔者今天刚刚安装好PX4,趁着还记忆深刻把这两天边操作边记录的问题及解决方案放在这里供后来的朋友们参考~
由于本人也是第一次接触PX4,也生怕走太多弯路,于是找博士师兄要来了他整理的PX4安装方法,师兄写的这个文章还是能非常的清楚地教一个新手每一步怎么做的(强烈推荐小白先按照这个文章先自己尝试着安装),但是美中不足的是,我在按照其中每一步做的时候,时常遇到一些问题,因此又得自己去各种途径寻找解决方法,在本文中记录了自己遇到的问题和解决方案,大家可以搭配着我师兄的文章配合食用哦(文章链接如下)~~~
最详细的Ubuntu18配置px4_ros_gazebo仿真:https://blog.csdn.net/weixin_43568893/article/details/104533500?spm=1001.2014.3001.5502
问题:安装PX4_toolchain步骤中的step3是直接执行整个ubuntu_sim_common_deps.sh脚本,但是由于笔者在执行的时候报错了,于是将shell脚本中的每一条指令逐条执行,一个个来解决问题。首先遇到的是sudo -H pip install pyulog报错,提示pyulog源码中的versioneer.py文件1739行报错:
解决:此处我们选择离线安装pyulog,从https://github.com/PX4/pyulog下载pyulog源码,使用编辑器打开versioneer.py,发现两处报错
错误在两句print()函数,将其注释掉并保存文件然后关闭。解决源码错误后,再执行sudo python setup.py build install进行安装,即可成功安装。
问题:还是在安装PX4_toolchain步骤中的shell脚本里,指令tar -xzf eprosima_fastrtps-1-7-1-linux.tar.gz eProsima_FastRTPS-1.7.1-Linux/报错,提示gzip: stdin: not in gzip format。仔细查看前一步wget指令下载下来的文件,该压缩包无法手动解压且文件大小小得不正常,因此问题根源应该在于wget下载的eprosima_fastrtps安装文件下载不成功。
解决:进入wget指令中的网址可以看到该网页并非安装包的下载地址。参照文章https://blog.csdn.net/Lo_Bamboo/article/details/105265087, 进入eProsima_FastRTPS的github主页https://github.com/eProsima/Fast-DDS,由于从源码开始安装比较复杂,因此参照Installation from binaries部分的内容进行安装。进入eprosima_fastrtps安装包下载页面https://www.eprosima.com/index.php/component/ars/repository/eprosima-fast-dds,因找到1.7.1版本进行下载。接着cd到存放安装包的目录下开始执行tar开始的指令(注意根据安装包的实际名称修改指令中的名称)。
问题:shell脚本里,指令cpucores=$(( $(lscpu | grep Core.*per.*socket | awk -F: '{print $2}') * $(lscpu | grep Socket\(s\) | awk -F: '{print $2}') )) 报错:bash: * : 语法错误: 需要操作数 (错误符号是 "* ")。
解决:暂时没解决该问题,lscpu是查看cpu信息的指令,此处不执行应该也没有太大的问题,暂且跳过该条指令执行接下来的命令。(非常诚恳地希望大神能指出这条指令的具体含义和未执行成功的后果~~~)后续:经室友大佬的指导获悉,该条指令的目的是用于计算cpu核数并将其作为参数传递给后续的指令,因此该条指令执行失败是对后续有影响的,可以用nproc --all指令直接查看cpu核数并在后续指令中手动输入,我的cpu核数为4。(但是在我室友的debian系统中执行本问题的中的指令并未报错,尚不清楚是什么问题...)
问题:shell脚本里,指令(cd eProsima_FastRTPS-1.7.1-Linux && ./configure --libdir=/usr/lib && make -j$cpucores && sudo make install)遇到了电脑卡死的问题。
解决:尚未解决,只能暂时搁置安装eProsima FastRTPS,接着执行下面的步骤。(这里出现的问题可能与电脑自身配置不够高有关系,当然会不会也和问题三有关系呢?)后续:该问题的出现确实与问题三有关,根据问题三所述,将该指令中的$cpucores替换为我的cpu核数4,然后执行该指令即不会让电脑卡死,make -j4指令能充分调用4个cpu核进行编译加快编译速度,从而使电脑不会卡死,该问题得以解决。
问题:总算执行完了shell脚本里的所有指令,来到编译px4_Firmware这一步,在安装1.9.2版本的PX4固件时,克隆固件的git仓库是可能出现问题的。执行git clone https://github.com/PX4/Firmware.git指令时,由于网络原因导致clone失败或clone速度很慢。我在尝试的过程中曾经报错,但是多尝试几次之后还是成功了,在这里提及以下这个问题。
解决:可以直接访问PX4的Firmware的网页下载PX4 Auto-Pilot源码包(在操作的时候也有遇到过github页面无法访问,但命令行clone可以进行的情况,视情况选择下载方式)。当然,如果有科学上网手段的话,你懂的。网页直接下载下来的源码包可能不如clone下来的完整,且不是一个git仓库,因此可能在后续操作中继续报错,此处不深究该条技术路线。
问题:接下来来到mavros and mavlink安装的步骤,指令wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install geographiclib datasets.sh遇到可能因为网络原因而长时间无法下载的问题。
解决:可以将链接复制到浏览器直接访问其shell脚本内容,下载或将其代码复制进新建的.sh文件中并保存。
问题:还是在mavros and mavlink安装的步骤的步骤中,执行./install_geographiclib_datasets.sh提示This script require root privileges!,即需要root权限。
解决:在本条指令之前加上sudo。
问题:终于来到最后一阶段使用ros装饰器启动gazebo的步骤啦,执行指令roslaunch px4 mavros_posix_sitl.launch时又报错,报错内容为/PX4/Firmware/Tools/sitl_gazebo/models/iris/iris.sdf does not exist,即iris的模型文件不存在。(笔者也不是很清楚是什么原因造成它丢失的,难道是clone的几个步骤有没做好的地方?)
解决:进入到报错的文件目录下发现,iris无人机的.sdf模型文件和meshes文件都消失不见了...于是到PX4-SITL-gazebo的github主页https://github.com/PX4/PX4-SITL_gazebo/tree/b6be00542be4d77f436c66ee48c22ca911601a2a,找到iris模型文件并复制其内容,粘贴到我们自己本地的文件目录中。
笔者在遇到并解决了以上绝大部分问题之后,再进行尝试,就能够成功在Gazebo中看到iris无人机啦(本人操作的时候Gazebo启动很慢,可能因为电脑配置不太够场景渲染所用吧...)。