4、Gazebo仿真环境:从安装到起飞

Gazebo,说白了就是PX4的「虚拟试飞场」。

我刚开始接触PX4时,最头疼的就是每次改代码都要跑真机。炸一次机,几百块就没了。后来用了Gazebo,嗯,真香。你可以在电脑上模拟各种环境——室内、室外、甚至火星表面。今天我就带你一步步搭好这个环境。

核心要点:Gazebo + PX4 = 软件在环(SITL)仿真。你的飞控代码跑在电脑上,Gazebo提供物理引擎和传感器数据。两者通过MAVLink通信。

4.1 Gazebo安装:两条路,选一条

安装Gazebo,我个人习惯用Ubuntu 20.04 + Gazebo 11。这个组合最稳,我在项目中踩过的坑最少。

方式一:一键安装(推荐新手)

# 安装Gazebo 11
curl -sSL http://get.gazebosim.org | sh

# 验证安装
gazebo --version

方式二:源码编译(老手专用)

为什么要编译源码?因为有时候你需要改仿真模型。我曾经为了模拟一个特殊的多旋翼构型,不得不改Gazebo的插件代码。

# 安装依赖
sudo apt-get install build-essential cmake git

# 克隆源码
git clone https://github.com/osrf/gazebo.git
cd gazebo
mkdir build && cd build
cmake ..
make -j4
sudo make install

我的建议:第一次用,直接装二进制包。等你有需求了再折腾源码。别一开始就把自己劝退了。

4.2 PX4与Gazebo集成:打通任督二脉

装好Gazebo只是第一步。关键是怎么让PX4和它「对上话」。

PX4官方已经帮我们做好了集成。你只需要安装PX4的仿真依赖包:

# 安装PX4仿真依赖
cd ~/PX4-Autopilot
make px4_sitl gazebo

这条命令会做三件事:

  • 编译PX4固件(SITL版本)
  • 启动Gazebo服务器
  • 加载默认的iris模型

等等,你可能会问:「为什么是iris?」

因为iris是PX4的「标准小白鼠」。我在项目中90%的仿真测试都用它。它稳定、参数公开、社区资源多。

注意:第一次编译会下载很多依赖包。网速不好的话,建议先配好国内镜像源。我曾经在客户现场等了一个小时...嗯,很尴尬。

4.3 启动仿真环境:三步走

启动仿真环境,说白了就三步:

  1. 打开终端1:启动PX4 SITL
  2. 打开终端2:启动QGroundControl(地面站)
  3. 打开终端3:发送指令控制无人机

具体操作:

# 终端1:启动仿真
cd ~/PX4-Autopilot
make px4_sitl gazebo

# 终端2:启动地面站(可选,但强烈建议)
./QGroundControl.AppImage

# 终端3:通过MAVSDK或命令行控制
pxh> commander takeoff

你看到Gazebo窗口里出现一架四旋翼,然后它缓缓起飞——那一刻,说实话,挺有成就感的。

4.4 常见仿真模型:不止有iris

PX4支持多种仿真模型。我整理了一个表格,方便你查阅:

模型名称 类型 适用场景 启动命令
iris 四旋翼 通用测试、初学者 make px4_sitl gazebo
typhoon_h480 六旋翼 载重测试、冗余验证 make px4_sitl gazebo_typhoon_h480
plane 固定翼 VTOL过渡、巡航测试 make px4_sitl gazebo_plane
standard_vtol 垂直起降固定翼 混合模式验证 make px4_sitl gazebo_standard_vtol
rover 地面车 地面导航测试 make px4_sitl gazebo_rover

怎么切换模型?很简单:

# 启动固定翼仿真
make px4_sitl gazebo_plane

# 启动六旋翼仿真
make px4_sitl gazebo_typhoon_h480

避坑指南:我曾经在切换模型时忘了关掉之前的Gazebo进程。结果两个模型同时加载,直接卡死。记得每次切换前先killall gzserver

4.5 核心逻辑:一张图看懂

说了这么多,你可能有点晕。我画了一张流程图,帮你理清关系:

PX4 + Gazebo 仿真架构 PX4 SITL 飞控代码(软件在环) 姿态控制、导航、任务规划 MAVLink Gazebo 物理引擎 + 传感器仿真 IMU、GPS、光流、激光雷达 仿真模型 iris / typhoon plane / rover QGroundControl 地面站(监控 & 控制) 用户终端 MAVSDK / 命令行 / ROS 数据流向:PX4 → MAVLink → Gazebo → 模型 → 传感器反馈 → PX4

这张图你看懂了吗?

简单说:PX4发指令给Gazebo,Gazebo模拟物理世界,把传感器数据返回给PX4。地面站和用户终端可以随时介入。

4.6 常见问题与解决

我整理了几个新手最容易遇到的问题:

  • Gazebo启动后黑屏:显卡驱动问题。试试export SVGA_VGPU10=0再启动。
  • 无人机起飞后乱飘:检查一下GPS仿真是否开启。默认是开启的,但有时候模型配置会漏掉。
  • 编译报错找不到头文件:大概率是依赖没装全。运行make px4_sitl gazebo前,先跑一遍make clean

重要提醒:仿真环境里的参数和真机不一样。比如PID增益,仿真里调好的值,真机上可能完全不能用。我见过有人直接拿仿真参数刷真机,结果炸了。嗯,那个人就是我。

好了,Gazebo环境就讲到这里。你跟着操作一遍,应该能跑起来。如果卡住了,回头看看这张流程图,理清数据流向,问题往往就迎刃而解。

专注资料整理