在Ubuntu 18.04上从源码编译PX4-Autopilot,我踩过的那些坑都帮你填好了
在Ubuntu 18.04上从源码编译PX4-Autopilot避坑实战手册第一次尝试在Ubuntu上编译PX4-Autopilot时我花了整整三天时间才让Gazebo正常启动。那些看似简单的安装步骤背后藏着无数新手杀手——从子模块下载卡死到内存溢出崩溃每个坑都能让你怀疑人生。这份手册不会重复官方文档的流程而是聚焦那些只有真正踩过坑的人才知道的解决方案。1. 环境准备别让基础配置成为绊脚石很多人直接跳过系统配置直奔主题结果在后续步骤中频繁遇到权限和依赖问题。Ubuntu 18.04虽然被PX4官方支持但默认安装的环境就像毛坯房需要先打好地基。1.1 系统级依赖的隐藏陷阱执行标准的sudo apt-get update之后这些包才是真正影响编译的关键sudo apt-get install -y \ ninja-build exiftool ninja-build protobuf-compiler \ libeigen3-dev libopencv-dev \ libxml2-utils python3-pip python3-tk特别提醒libeigen3-dev的版本必须≥3.3.4否则会导致matrix模块编译失败。用apt-cache show libeigen3-dev确认版本号。注意如果之前安装过ROS务必检查/opt/ros目录下的OpenCV版本与系统默认版本冲突会导致Gazebo启动时段错误segmentation fault1.2 用户权限的隐形门槛PX4编译过程中最容易被忽视的是用户组权限sudo usermod -a -G dialout $USER sudo apt-get remove modemmanager -y注销重新登录后用groups命令确认dialout组已生效。我曾因为没做这一步导致后续make px4_sitl gazebo时出现permission denied错误。2. 源码获取解决子模块下载的玄学问题官方推荐的git clone --recursive在国情下经常卡在子模块更新阶段。与其反复重试不如用分步方案2.1 替代克隆方案git clone https://github.com/PX4/PX4-Autopilot.git --depth1 cd PX4-Autopilot git submodule update --init --recursive当子模块卡住时CtrlC中断当前进程进入.git/modules目录删除对应子模块文件夹单独更新该子模块git submodule update --init Tools/sitl_gazebo2.2 代理配置的实用技巧如果遇到Connection timed out可以尝试通过修改git配置使用SSH协议比HTTPS更稳定git config --global url.gitgithub.com:.insteadOf https://github.com/3. 编译过程中的经典报错当看到[XX%] Building CXX object时真正的挑战才刚刚开始。以下是三个最具迷惑性的错误3.1 Eigen库的版本地狱错误提示fatal error: Eigen/Core: No such file or directory解决方案sudo apt-get install libeigen3-dev sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen3.2 Python环境冲突报错信息ImportError: No module named em这是因为PX4某些工具链需要Python2而系统默认可能是Python3。最稳妥的方案是sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 sudo update-alternatives --config python # 选择python23.3 内存不足导致编译终止在4GB内存的机器上编译常会出现g: internal compiler error: Killed (program cc1plus)临时解决方案不需要换电脑sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile free -h # 确认swap空间已生效4. Gazebo启动的疑难杂症当终于看到[Msg] Waiting for master.时新的问题才刚刚开始...4.1 模型加载失败典型错误[Err] [ModelDatabase.cc:356] Missing model.config for model http://...手动下载模型包约500MBwget https://github.com/osrf/gazebo_models/archive/master.zip unzip master.zip mkdir -p ~/.gazebo/models cp -r gazebo_models-master/* ~/.gazebo/models/4.2 虚拟机中的性能优化在VirtualBox中运行Gazebo需要额外配置sudo apt-get install virtualbox-guest-dkms virtualbox-guest-utils echo export SVGA_VGPU100 ~/.bashrc vboxmanage setextradata global GUI/ScaleFactor 1.54.3 图形界面报错处理遇到libGL error: failed to load driver: swrast时sudo apt-get install mesa-utils libgl1-mesa-glx libgl1-mesa-dri LIBGL_DEBUGverbose glxinfo | grep render # 验证驱动5. 进阶调试技巧当标准方案都不奏效时这些方法可能救急5.1 编译缓存清理make clean rm -rf build/ git submodule foreach --recursive git clean -xfd5.2 详细日志输出make px4_sitl gazebo VERBOSE1 21 | tee build.log grep -i error build.log -A10 -B5 # 关键错误定位5.3 容器化编译方案对系统环境有洁癖的开发者可以用Dockerdocker pull px4io/px4-dev-ros-melodic:2021-01-01 docker run -it --rm \ -v $(pwd):/src \ px4io/px4-dev-ros-melodic bash cd /src make px4_sitl gazebo记得第一次成功启动Gazebo看到无人机模型时那种成就感让我觉得所有折腾都值得。现在我的开发机上还留着当初各种报错的日志文件——它们比任何官方文档都更能提醒我在开源世界解决问题的能力比按部就班的操作更重要。