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-harmonic

2、检查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_gazebo
export GZ_VERSION=harmonic
cd ardupilot_gazebo
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j4
echo '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}' >> ~/.bashrc

4、执行仿真

打开终端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地面站,飞行姿态数据也会在地面站上实时显示。

相关文档