2、仿真环境2:SITL + MAVProxy + gazebo + MP/QGC地面站的联动
一、前言
在上一个章节中介绍了 APM飞控的SITL仿真+MAVProxy的应用。
在这个章节中, 将会介绍另外一款更加强大的仿真工具gazebo,并和SITL联动
二、SITL和gazebo的区别
SITL 是 “飞控的大脑模拟器”,专注于 “代码算得对不对”;
Gazebo 是 “飞控的身体和环境模拟器”,专注于 “在真实世界中飞得稳不稳”。两者可结合使用(如 SITL+Gazebo),兼顾逻辑验证和真实场景测试。
比维度 | SITL(Software In The Loop) | Gazebo(物理引擎仿真器) |
|---|---|---|
本质 | 飞控软件的 “逻辑模拟器”:让飞控代码在电脑上运行,用数学模型模拟传感器和无人机运动,验证飞控逻辑。 | 虚拟物理世界的 “数字操场”:独立的开源仿真引擎,模拟真实物理规律(重力、碰撞、摩擦等)和 3D 场景,提供逼真的环境交互。 |
核心目标 | 验证飞控软件的核心逻辑(如导航、定高、姿态控制),确保代码 “算得对”。 | 还原真实物理环境,验证无人机 / 机器人在复杂场景下的表现(如抗风、避障、传感器交互),确保 “飞得稳”。 |
模拟范围 | 仅聚焦 “飞控内部逻辑”:用简化模型模拟传感器数据(GPS、IMU)和无人机运动(如 “油门 10%= 上升 1m/s”),不涉及复杂物理细节。 | 覆盖 “物理环境 + 传感器 + 运动”:模拟重力、风力、地面摩擦、机身碰撞,以及激光雷达、相机等传感器的真实特性(噪声、畸变)。 |
物理引擎 | 无独立物理引擎,用简单数学公式(如牛顿运动简化模型)模拟运动,忽略大部分物理细节(如风阻、电机延迟)。 | 内置高精度物理引擎(如 ODE、Bullet),精确计算力、力矩、碰撞反馈,无人机运动符合真实物理规律(如侧风会导致偏移)。 |
传感器模拟能力 | 基础模拟:仅提供理想化的传感器数据(如无噪声的 GPS 坐标、完美的加速度值),无法模拟传感器误差或环境干扰。 | 逼真模拟:支持激光雷达(点云噪声、扫描范围)、相机(畸变、光照、模糊)、IMU(漂移)等,数据格式与真实传感器一致。 |
是否依赖飞控 | 依赖:SITL 是飞控自带的仿真框架(如 Ardupilot 的 SITL 模块),必须绑定特定飞控代码运行。 | 不依赖:独立工具,可对接任意飞控(Ardupilot、PX4)或机器人系统,甚至可单独用于测试传感器算法。 |
适用开发阶段 | 早期快速迭代:适合飞控功能开发初期,快速验证代码逻辑(如 “返航指令是否触发”),改代码后几秒内可重跑。 | 后期真实场景验证:适合功能基本稳定后,测试复杂场景(如 “大风中悬停是否稳定”“激光雷达避障是否生效”)。 |
运行速度 | 快:因忽略物理计算,仿真速度可远超真实时间(如 10 倍速运行),适合批量测试。 | 较慢:需实时计算物理和传感器细节,通常只能 1 倍速运行,复杂场景可能卡顿。 |
能否模拟 SLAM / 目标检测 | 基本不能:传感器数据太简单(无噪声、无真实场景细节),无法支撑 SLAM 建图或 YOLO 检测等算法测试。 | 完全可以:提供逼真的点云(激光雷达)、图像(相机)数据,可直接用于 SLAM 建图、YOLO 目标检测等算法的仿真测试。 |
典型使用场景 | 1. 测试飞控新功能(如自定义航点逻辑);2. 排查代码 bug(如定高算法异常);3. 新手熟悉飞控指令(无需硬件)。 | 1. 测试无人机抗风 / 避障性能;2. 验证激光雷达 SLAM 建图精度;3. 用虚拟图像训练 YOLO 目标检测模型;4. 模拟复杂地形飞行(山地、城市峡谷)。 |
历史背景 | 随飞控诞生:2010 年左右由 Ardupilot 等飞控团队开发,初衷是 “无硬件也能跑飞控代码”。 | 独立发展:2004 年由 NASA 等机构发起,最初用于机器人仿真,2015 年后被无人机领域(Ardupilot、PX4)集成,补充物理仿真能力。 |
与对方的关系 | 可结合 Gazebo:SITL 可调用 Gazebo 作为 “物理引擎”, 用 Gazebo 的逼真环境替代自身简化模型(如 Ardupilot 的 “SITL+Gazebo” 模式)。 | 可被 SITL 调用:作为 “环境插件” 为 SITL 提供物理和传感器数据,增强 SITL 的真实性,但自身也可独立运行(如单独测试传感器算法)。 |
三、gazebo环境的搭建
1, 安装Gazebo Harmonic(本人系统是win11 wsl2,ubuntu22.04)
打开WSL子系统终端,在任意目录下执行:
sudo apt-get update
sudo apt-get install curl lsb-release gnupg
sudo curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] https://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update
sudo apt-get install gz-harmonic2、检查Gazebo Harmonic是否安装完成
输入以下命令:
gz sim -v4 -r shapes.sdf如果安装正常的话,会弹出以下窗口:

注意:
部分朋友执行命令gz sim -v4 -r shapes.sdf 会一直黑屏,这是有问题的,具体解决办法往下看。

最终解决办法如下:
如果你电脑的显卡是英伟达,执行以下命令,重启终端。
# 设置使用独立显卡而非集成显卡
export MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA
# 永久生效(添加到~/.bashrc)
echo "export MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA" >> ~/.bashrc如果你电脑的显卡是AMD的,就执行以下命令,重启终端。
# 启用AMD显卡加速
export MESA_LOADER_DRIVER_OVERRIDE=radeonsi
# 对于较新的AMD显卡
export RADV_PERFTEST=aco执行完上述命令后,再执行gz sim -v4 -r shapes.sdf 就不会再黑屏了,可以正常打开以下界面:
会显示6个立体物体(基础几何形状)

3、在任意目录执行以下命令:
sudo apt update
sudo apt install libgz-sim8-dev rapidjson-dev -y
sudo apt install libopencv-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
mkdir -p gz_ws/src && cd gz_ws/src
git clone https://github.com/ArduPilot/ardupilot_gazeboexport GZ_VERSION=harmonic
cd ardupilot_gazebo
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j4echo 'export GZ_SIM_SYSTEM_PLUGIN_PATH=$HOME/gz_ws/src/ardupilot_gazebo/build:${GZ_SIM_SYSTEM_PLUGIN_PATH}' >> ~/.bashrc
echo 'export GZ_SIM_RESOURCE_PATH=$HOME/gz_ws/src/ardupilot_gazebo/models:$HOME/gz_ws/src/ardupilot_gazebo/worlds:${GZ_SIM_RESOURCE_PATH}' >> ~/.bashrc4、执行仿真
打开终端1,可以在任何目录下运行:
gz sim -v4 -r iris_runway.sdf正常情况下,显示如下:

打开终端2:在ardupilot根目录下执行
Tools/autotest/sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --map --console #打开后可以关闭
四、联动演示(视频)
此时打开MP地面站或QGC地面站,飞行姿态数据也会在地面站上实时显示。
