保姆级教程:在Ubuntu 20.04上从零搭建PX4 Gazebo垂起固定翼仿真环境
从零构建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。解决方法是添加特定PPA:
sudo 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-dev - Gazebo黑屏问题通常与显卡驱动有关,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 name="vehicle" default="iris"/> <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/iris/iris.sdf"/> <!-- 修改为垂起固定翼 --> <arg name="vehicle" default="standard_vtol"/> <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/standard_vtol/standard_vtol.sdf"/>垂起固定翼的特殊参数配置:
vtol_type=0表示使用Tailsitter布局FW_AIRSPD_MAX=20设置固定翼模式最大空速VT_TRANS_MIN_TM=2定义模式转换最短时间
这些参数可通过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 name='imu_plugin' filename='libgazebo_imu_plugin.so'> <robotNamespace>/vtol</robotNamespace> <topicName>/imu</topicName> <bodyName>base_link</bodyName> <updateRate>200</updateRate> <imu> <noise type="gaussian"> <mean>0.0</mean> <stddev>0.001</stddev> </noise> </imu> </plugin>风场环境模拟:创建自定义world文件,添加风场插件:
<plugin name='wind_plugin' filename='libgazebo_wind_plugin.so'> <frameId>world</frameId> <robotNamespace></robotNamespace> <windDirection>1 0 0</windDirection> <windSpeed>5.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/models
MAVROS连接超时:
- 现象:
[ERROR] [mavros]: FCU: DeviceError:serial:open: Unknown error - 解决:检查launch文件中的
fcu_url参数应为:<arg name="fcu_url" default="udp://:14540@127.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/
