ubuntu20.04安装PX4固件错误总结
笔者小白一枚,意欲实现PX4“Hello Sky”仿真开发,在进行仿真模拟之前,需要在主机操作系统上安装开发人员工具链(Developer Toolchain)。本文记录了在ubuntu20.04环境下安装PX4固件的过程中出现的问题以及解决方法。本文所采用的解决方法都是来自网上大神们的智慧,笔者在实践中觉得有效就收集了下来,希望对读者有用。
关于常见的配置问题,PX4官网给出了常见疑难解答,如果不能解决,可以参考下面的方法。
- 安装环境:ubuntu20.04+ROS Noetic+gazebo11.x,笔者在安装PX4固件之前安装了ROS Noetic,其中自带了gazebo11.x。
笔者安装时间为2020年9月15日,根据官网中工具链安装的最新教程,仅仅安装PX4固件,步骤如下:
- 下载PX4源代码
git clone https://github.com/PX4/Firmware.git --recursive
- 省略nuttx和模拟工具运行ubuntu.sh,仅仅安装PX4固件(如果想安装所有内容,不加
--no-nuttx
和--no-sim-tools
)
bash ./Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools
- 检验PX4配置是否成功,在gazebo中编译PX4,若能看到一个无人机的模型,则配置成功。这一步也可以打开QGroundcontrol地面站,看是否和PX4有连接,也是检验配置成功与否的一个标志
make px4_sitl_default gazebo
问题一:git clone https://github.com/PX4/Firmware.git --recursive
这一步特别慢
- 问题原因:GitHub是国外网站,git clone实际运行速度很慢,即使翻墙,也可能因为网速过慢而导致下载失败。
- 解决方法:
- 方法1: 将GitHub的网站换为gitee(码云)网站,网上有相关教程gitee解决github下载资源慢的问题,已经有人为该网站建立了仓库,为
https://gitee.com/designer/PX4Firmware.git
。然后git clone该网站会飞快。 - 方法2: 在https://github.com的后面加上后缀
.cnpmjs.org
,即https://github.com.cnpmjs.org
,然后git clone该网站会飞快,参考文章彻底解决git clone以及 recursive慢的问题 - 方法3:在终端科学上网,在终端输入以下两条命令后,访问GitHub的速度会快一点
export http_proxy=http://proxyAddress:port
export https_proxy=http://proxyAddress:port
参考文章让终端走代理的几种方法 - 如果下载源码或更新子模块出问题,也可以下载我配置好的源码,在ubuntu系统下主目录解压即可。注:这个文件里用的是我的用户名,catkin_make编译时可能会出错,把出错的文件改为自己的用户名就好,执行catkin clean后再catkin_make。
问题二:上一条指令运行速度很快了,但子模块更新速度又很慢
- 问题原因:子模块的下载路径存放在Firmware/.gitmodules这个文件中,子模块又包含了GitHub这个下载网站,导致更新子模块的速度很慢。
- 解决方法:下载完源代码后,按Ctrl+c停止运行,打开文件夹./Firmware/,Ctrl+h显示隐藏文件。先修改子模块下载路径,再运行以下命令更新子模块。
git submodule update --init --recursive
- 修改方法1:用码云网站换掉GitHub的网站
- 修改方法2:在https://github.com的后面加上后缀
.cnpmjs.org
,参考文章彻底解决git clone以及 recursive慢的问题
问题三:已经装好PX4固件了,为什么make px4_sitl_default gazebo
报错
- 报错信息:找不到了,粘贴了别人的报错
- 终端报错类似于以下信息
-- Configuring incomplete, errors occurred!
……
ninja: build stopped: subcommand failed.
Makefile:200: recipe for target 'px4_sitl' failed
make: *** [px4_sitl] Error 1
- CMakeError.log报错类似于以下信息
……
FAILED: : && /usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create CMakeFiles/cmTC_316db.dir/CheckFunctionExists.c.o -o cmTC_316db -lpthreads && :
/usr/bin/ld: cannot find -lpthreads
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
- 错误原因:因人而异,比较玄学,欢迎读者们交流指教,下面的方法对我有效可参考
- 解决方法:
- 首先确认gazebo版本是否对应正确,比如ROS Noetic对应的gazebo版本号为11.x;检查ROS和gazebo是否安装完全,重新运行一下相关安装命令。
- 如果不行,尝试GitHub的一个讨论区中的一个方法,安装一些gazebo插件,方法如下:
sudo apt-get install libprotobuf-dev libprotoc-dev protobuf-compiler libeigen3-dev libxml2-utils python-rospkg python-jinja2
sudo apt-get install libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly -y
然后再运行
make px4_sitl_default gazebo
运行成功,可以看到gazebo中的无人机画面。打开QGroundcontrol,发现连接上PX4,控制无人机运动,gazebo中的无人机也会运动。