Ubuntu 20.04上PX4 v1.14.0编译踩坑全记录:从CMake版本到Qt库缺失的保姆级修复
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。