从零构建PX4 Gazebo垂起固定翼仿真环境Ubuntu 20.04全流程指南垂起固定翼无人机结合了多旋翼垂直起降和固定翼长航时的双重优势已成为当前无人机仿真研究的热点。但对于刚接触PX4生态的开发者而言从零搭建完整的仿真环境仍存在诸多技术门槛。本文将手把手带你完成Ubuntu 20.04系统下的环境部署、模型配置到QGC联调的全过程避开我踩过的那些坑。1. 系统环境准备与依赖安装在开始PX4编译前需要确保系统基础环境完整。Ubuntu 20.04虽然已经预装部分工具链但仍需补充关键组件。打开终端依次执行以下命令sudo apt update sudo apt upgrade -y sudo apt install -y git zip qtcreator cmake \ build-essential genromfs ninja-build \ libopencv-dev libeigen3-dev特别要注意Gazebo版本兼容性问题。PX4 v1.13推荐使用Gazebo 9而Ubuntu 20.04默认安装的是Gazebo 11。解决方法是添加特定PPAsudo sh -c echo deb http://packages.osrfoundation.org/gazebo/ubuntu-stable lsb_release -cs main /etc/apt/sources.list.d/gazebo-stable.list wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt update sudo apt install -y gazebo9 libgazebo9-dev验证Gazebo安装成功的标志是能正常启动空白场景gazebo --verbose /usr/share/gazebo-9/worlds/empty.world常见问题排查若遇到libOGRE相关错误需安装libogre-1.9-dev出现Could not find boost报错时执行sudo apt install libboost-all-devGazebo黑屏问题通常与显卡驱动有关NVIDIA用户需安装专有驱动2. PX4固件源码编译与工具链配置PX4代码库包含多个分支对于垂起固定翼仿真建议使用稳定的v1.13版本git clone https://github.com/PX4/PX4-Autopilot.git --recursive cd PX4-Autopilot git checkout v1.13.0 git submodule update --init --recursive编译前需要设置环境变量将以下内容添加到~/.bashrc末尾# PX4环境配置 export GAZEBO_PLUGIN_PATH$GAZEBO_PLUGIN_PATH:~/PX4-Autopilot/build/px4_sitl_default/build_gazebo export GAZEBO_MODEL_PATH$GAZEBO_MODEL_PATH:~/PX4-Autopilot/Tools/sitl_gazebo/models export LD_LIBRARY_PATH$LD_LIBRARY_PATH:~/PX4-Autopilot/build/px4_sitl_default/build_gazebo执行固件编译注意-j后的数字应根据CPU核心数调整make px4_sitl_default gazebo -j$(nproc)编译成功后会看到类似输出[100%] Built target px4_sitl_default SITL ARGS ... INFO [px4] Creating symlink /home/user/PX4-Autopilot/build/px4_sitl_default/etc - /home/user/PX4-Autopilot/build/px4_sitl_default/tmp/rootfs/etc此时可测试基础仿真是否正常make px4_sitl_default gazebo_iris如果Gazebo窗口正常显示四旋翼模型说明PX4环境配置成功。3. 垂起固定翼模型配置与启动文件修改PX4默认提供的iris模型是常规四旋翼我们需要替换为垂起固定翼模型standard_vtol。关键步骤是修改launch文件建议复制~/PX4-Autopilot/launch/posix_sitl.launch为mavros_posix_sitl_vtol.launch主要修改以下参数!-- 原四旋翼配置 -- arg namevehicle defaultiris/ arg namesdf default$(find mavlink_sitl_gazebo)/models/iris/iris.sdf/ !-- 修改为垂起固定翼 -- arg namevehicle defaultstandard_vtol/ arg namesdf default$(find mavlink_sitl_gazebo)/models/standard_vtol/standard_vtol.sdf/垂起固定翼的特殊参数配置vtol_type0表示使用Tailsitter布局FW_AIRSPD_MAX20设置固定翼模式最大空速VT_TRANS_MIN_TM2定义模式转换最短时间这些参数可通过QGC调参界面修改或直接编辑~/PX4-Autopilot/build/px4_sitl_default/etc/extras.txt文件。启动仿真环境时使用新launch文件roslaunch px4 mavros_posix_sitl_vtol.launch4. QGC地面站联调与飞行测试QGroundControl(QGC)是PX4生态的标准地面站软件建议下载每日构建版以获取最新功能。连接仿真器的关键步骤启动QGC后进入Vehicle Setup选择Comm Links添加UDP连接端口号14550在Parameters页面搜索SYS_COMPANION设置为921600垂起固定翼的典型飞行测试流程起飞阶段点击Takeoff按钮无人机将以多旋翼模式垂直起飞模式转换高度超过10米后在飞行模式中选择Transition进行转换定点飞行在地图界面左键点击目标点选择Go to location返航降落点击Return触发自动返航流程飞行数据监测要点local_position.z监控飞行高度vtol_vehicle_status.vehicle_vtol_state显示当前模式0为多旋翼1为固定翼tecs_status.airspeed_sp反映空速控制状态5. 高级调试与性能优化当基础仿真运行稳定后可通过以下方法提升仿真质量传感器噪声模拟修改~/PX4-Autopilot/Tools/sitl_gazebo/models/standard_vtol/standard_vtol.sdf添加imu噪声参数plugin nameimu_plugin filenamelibgazebo_imu_plugin.so robotNamespace/vtol/robotNamespace topicName/imu/topicName bodyNamebase_link/bodyName updateRate200/updateRate imu noise typegaussian mean0.0/mean stddev0.001/stddev /noise /imu /plugin风场环境模拟创建自定义world文件添加风场插件plugin namewind_plugin filenamelibgazebo_wind_plugin.so frameIdworld/frameId robotNamespace/robotNamespace windDirection1 0 0/windDirection windSpeed5.0/windSpeed /plugin实时调参技巧在QGC的Analyze页面监控actuator_outputs输出使用commander check命令验证系统状态通过param show VT_*查看所有垂起相关参数6. 典型问题解决方案库Gazebo模型加载失败现象终端显示[Err] [ModelDatabase.cc:356] Unable to find model[standard_vtol]解决确认GAZEBO_MODEL_PATH包含PX4的模型路径执行export GAZEBO_MODEL_PATH$GAZEBO_MODEL_PATH:~/PX4-Autopilot/Tools/sitl_gazebo/modelsMAVROS连接超时现象[ERROR] [mavros]: FCU: DeviceError:serial:open: Unknown error解决检查launch文件中的fcu_url参数应为arg namefcu_url defaultudp://:14540127.0.0.1:14557/模式转换失败现象无人机在转换过程中失控坠落调试步骤检查VT_TRANS_MIN_TM是否设置合理建议2-5秒监控actuator_controls_0输出是否饱和调整VT_FW_ALT_ERR高度容错阈值QGC地图显示异常现象地图区域显示为空白解决在QGC设置中更换地图源为Google Satellite备选方案离线加载本地地图mkdir -p ~/.local/share/QGCMapCache/GoogleSatellite cp local_map.jpg ~/.local/share/QGCMapCache/GoogleSatellite/