Ubuntu 20.04下PX4 v1.14.0编译实战:从环境配置到疑难解析
当你在Ubuntu 20.04上尝试编译PX4 v1.14.0时,可能会遇到一系列令人头疼的问题。这不是一个理想化的教程,而是一个真实的排错记录,记录了从环境准备到最终编译成功的完整过程。无论你是无人机开发者还是嵌入式系统爱好者,这些经验都能帮你节省大量时间。
1. 环境准备与基础配置
在开始PX4编译之前,确保你的Ubuntu 20.04系统已经安装了必要的依赖。PX4官方文档提供了基础安装指南,但实际情况往往更加复杂。
首先,更新系统并安装基础工具:
sudo apt update && sudo apt upgrade -y sudo apt install git zip qtcreator cmake build-essential ninja-build -y接下来,安装PX4特有的依赖项:
sudo apt install python3-pip python3-dev python3-wheel -y pip3 install --user kconfiglib future jinja2 packaging numpy empy toml pyros-genmsg特别注意:Ubuntu 20.04默认的CMake版本(3.16.3)可能无法满足PX4 v1.14.0的要求。我们建议安装更新的CMake版本,但不要卸载系统自带的CMake,以免影响其他依赖CMake的软件。
wget https://github.com/Kitware/CMake/releases/download/v3.22.0/cmake-3.22.0-linux-x86_64.tar.gz tar -xzf cmake-3.22.0-linux-x86_64.tar.gz sudo mv cmake-3.22.0-linux-x86_64 /opt/cmake-3.22.0 sudo ln -s /opt/cmake-3.22.0/bin/cmake /usr/local/bin/cmake验证CMake版本:
cmake --version # 应该显示3.22.0或更高版本2. 获取PX4源代码与子模块管理
PX4的源代码管理采用Git子模块方式,这在实际操作中可能会带来一些网络相关的问题。
git clone --recursive https://github.com/PX4/PX4-Autopilot.git --branch v1.14.0 cd PX4-Autopilot如果子模块更新失败(这在网络不稳定时很常见),可以尝试以下方法:
make submodulesclean git submodule sync --recursive git submodule update --init --recursive常见问题:子模块更新时可能会卡在Micro-CDR等仓库上。这是由于GitHub连接不稳定导致的。解决方法包括:
- 多次重试上述命令
- 使用SSH协议而非HTTPS
- 配置Git使用更稳定的网络库:
git config --global http.sslBackend openssl3. 编译过程中的典型错误与解决方案
3.1 Protobuf版本冲突
尽管Ubuntu 20.04默认安装的Protobuf 3.6.1理论上应该兼容,但实际编译中仍可能出现问题:
Gazebo SITL : fatal error: google/protobuf/port_def.inc: No such file or directory解决方案:
- 确认已安装的Protobuf版本:
apt list --installed | grep protobuf- 如果确实是3.6.1版本但仍报错,尝试重新安装开发包:
sudo apt install libprotobuf-dev protobuf-compiler -y3.2 Qt库缺失问题
这是最常见的问题之一,错误信息通常如下:
The imported target "Qt5::Gui" references the file "/usr/lib/x86_64-linux-gnu/libEGL.so" but this file does not exist.解决方法是为缺失的库创建符号链接:
sudo ln -s /usr/lib/x86_64-linux-gnu/libEGL.so.1 /usr/lib/x86_64-linux-gnu/libEGL.so sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so如果仍然存在问题,可能需要安装额外的Qt库:
sudo apt install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools -y3.3 网络相关编译失败
在子模块编译阶段,可能会遇到网络连接问题:
fatal: 无法访问 'https://github.com/eProsima/Micro-CDR.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.解决方案:
- 尝试多次运行编译命令
- 配置Git使用更稳定的网络后端:
git config --global http.sslBackend openssl- 或者直接手动克隆问题子模块:
cd build/px4_sitl_default/src/modules/uxrce_dds_client/src/ git clone https://github.com/eProsima/Micro-CDR.git cd - make px4_sitl gazebo-classic4. 性能优化与后续调试
成功编译后,你可能会发现Gazebo运行缓慢(如只有6帧)。这通常与硬件加速和显示驱动配置有关。
首先,确保你的系统正在使用硬件加速:
glxinfo | grep "OpenGL renderer"如果显示的是软件渲染器(如LLVMpipe),则需要安装正确的显卡驱动。
对于NVIDIA显卡:
sudo apt install nvidia-driver-470 -y对于Intel集成显卡:
sudo apt install mesa-utils libgl1-mesa-dri -y此外,可以调整Gazebo的渲染设置以提高性能:
- 打开Gazebo
- 点击顶部菜单栏的"Edit" > "Preferences"
- 在"Rendering"选项卡中:
- 降低"Quality Level"
- 关闭"Shadows"
- 减少"Physics update rate"
如果问题依旧,可以尝试使用轻量级桌面环境或通过SSH远程运行Gazebo。