保姆级避坑指南:在Ubuntu 20.04上搞定PX4 v1.13与XTDrone仿真环境(含ROS Noetic)
保姆级避坑指南:在Ubuntu 20.04上搞定PX4 v1.13与XTDrone仿真环境(含ROS Noetic)
搭建无人机仿真环境就像组装一台精密仪器——每个零件都必须严丝合缝。当PX4飞控、XTDrone仿真平台和ROS Noetic三大组件需要在Ubuntu 20.04上协同工作时,新手往往会陷入依赖冲突、环境配置和网络问题的泥潭。本文将用七个关键步骤带你穿越雷区,特别针对那些让90%初学者栽跟头的隐蔽陷阱提供解决方案。
1. 系统准备:避开初始配置的三大天坑
在开始之前,请确保你的Ubuntu 20.04系统已经完成这些基础配置:
- 磁盘空间:至少预留50GB可用空间(编译过程会产生大量中间文件)
- 用户权限:所有操作建议在普通用户下进行,避免使用root账户
- 终端习惯:使用
Ctrl+Shift+T新建终端标签页而非窗口,防止环境变量丢失
注意:如果之前尝试过失败安装,请先执行
sudo rm -rf ~/.gazebo清除旧模型缓存
常见翻车点在于Python环境冲突。Ubuntu 20.04默认同时存在Python2和Python3,而PX4 v1.13需要Python3.8+。使用以下命令检查:
python3 --version # 应显示3.8.x pip3 list | grep numpy # 检查关键依赖版本若出现版本不符,先用这个"万能清理命令"重置Python环境:
sudo apt purge python3-numpy && sudo pip3 uninstall numpy -y2. PX4源码编译:解决子模块缺失的终极方案
官方推荐的git clone --recursive方式在国内网络环境下成功率不足30%。我们采用分步克隆策略:
# 先克隆主仓库(使用国内镜像源) git clone -b v1.13.0-beta1 https://gitee.com/mirrors/PX4-Autopilot.git --depth=1 cd PX4-Autopilot # 手动下载容易失败的子模块 wget https://ghproxy.com/https://github.com/PX4/sitl_gazebo/archive/refs/tags/1.13.0.tar.gz tar -zxvf 1.13.0.tar.gz -C Tools/ --strip-components=1编译时最常卡在ubuntu.sh脚本执行阶段。遇到报错时:
- 先运行诊断命令:
./Tools/setup/check_ubuntu.sh - 根据缺失项选择性安装(示例):
sudo apt install -y python3-pip python3-dev python3-tk
关键技巧:在make px4_sitl_default gazebo前先执行:
export GAZEBO_PLUGIN_PATH=$GAZEBO_PLUGIN_PATH:$(pwd)/build/px4_sitl_default/build_gazebo3. ROS Noetic安装:鱼香ROS的隐藏选项
虽然鱼香ROS的一键安装脚本很方便,但默认配置可能不适合仿真环境。推荐这样使用:
wget http://fishros.com/install -O fishros && chmod +x fishros ./fishros <<< "1\n3\n2" # 选择Noetic+桌面版+不换源安装完成后必须检查这些关键包:
rosdep check mavros gazebo_ros_pkgs # 应当返回All system dependencies have been satisfied如果出现[ERROR] Not all system dependencies are installed,使用这个修复命令:
rosdep install --from-paths src --ignore-src -y --skip-keys "gazebo"4. MAVROS配置:地理数据库的替代方案
官方install_geographiclib_datasets.sh下载经常超时。我们可以手动部署:
- 先下载离线包:
wget https://xtdrone.oss-cn-beijing.aliyuncs.com/geographiclib_datasets.tar.gz - 解压到指定位置:
sudo tar -zxvf geographiclib_datasets.tar.gz -C /usr/share/GeographicLib/
验证安装成功的正确方式:
rosrun mavros mavsys --check-geodata # 应当显示All geodata packages installed5. 通信桥接:Catkin工作区的正确姿势
传统catkin_make在复杂项目中容易失败,改用catkin build需要特别注意:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin init # 初始化catkin build环境 catkin config --merge-devel # 关键配置!环境变量设置有个常见陷阱——很多人忘记source顺序。正确的.bashrc添加顺序应该是:
# 在~/.bashrc最后添加 source /opt/ros/noetic/setup.bash source ~/catkin_ws/devel/setup.bash source ~/PX4-Autopilot/Tools/setup_gazebo.bash ~/PX4-Autopilot ~/PX4-Autopilot/build/px4_sitl_default测试通信时如果发现connected: false,用这个诊断命令:
rosrun mavros mavsys --mavlink 2 --baudrate 921600 # 强制指定协议版本6. XTDrone部署:模型缺失的应急方案
当执行git submodule update失败时,可以手动补全关键模型:
# 下载预编译模型包 wget https://xtdrone.oss-cn-beijing.aliyuncs.com/XTDrone_models_v1.13.tar.gz tar -zxvf XTDrone_models_v1.13.tar.gz -C ~/.gazebo/文件复制阶段最容易出错的是权限问题。建议使用rsync而非cp:
rsync -avz --progress sitl_config/worlds/ ~/PX4-Autopilot/Tools/sitl_gazebo/worlds/遇到iris.sdf缺失错误时,直接从Gazebo模型库获取:
wget https://models.gazebosim.org/iris/iris.sdf -P ~/PX4-Autopilot/Tools/sitl_gazebo/models/iris/7. 联合调试:Gazebo卡死的根本解决
当Gazebo界面卡住时,90%的情况是模型加载问题。按这个流程排查:
- 先检查模型路径:
echo $GAZEBO_MODEL_PATH # 应当包含PX4和XTDrone的路径 - 启用详细日志:
gazebo --verbose ~/PX4-Autopilot/Tools/sitl_gazebo/worlds/indoor1.world
如果日志显示[Err] [ModelDatabase.cc:356] Missing model.config,执行修复:
find ~/.gazebo/models -name "model.config" -exec touch {} \;终极解决方案是使用轻量级测试环境:
HEADLESS=1 make px4_sitl_default gazebo # 无界面模式运行实际开发中发现,多数间歇性崩溃源于内存不足。在Ubuntu 20.04上,建议设置交换空间:
sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile sudo mkswap /swapfile && sudo swapon /swapfile仿真环境搭建完成后,立即做个系统快照是个好习惯:
sudo timeshift --create --comments "PX4+XTDrone baseline"