ArduPilot教程(二)运行第一个SITL无人机仿真

运行一个 Copter 的 SITL 仿真。Ardupilot 是基于 MAVLink 通信协议的,而操作仿真无人机执行任务需要一个地面站 (GCS)和 Ardupilot SITL 进行配合。所以在运行仿真之前,我们先简单介绍一下 MAVLink 通信协议和 MAVProxy 地面站。

Ardupilot 的通讯是基于 MAVLink 协议的 。MAVLink(Micro Air Vehicle Link) 是一款轻量级、开源的无人系统通信协议,被广泛应用于 自动驾驶平台中(比如 ArduPilot、PX4 等)。MAVLink 协议是基于消息帧结构设计,支持串口、UDP、TCP 等多种传输方式,能够在地面站、飞控、传感器、伴随计算机等组件之间进行高效、可靠的数据交互。常见的 MAVLink 消息包括心跳(heartbeat)、位置(GPS/IMU)、姿态 (Yaw)、飞行模式、任务航点和参数配置等。MAVLink 最大的优势是跨平台与可扩展性,拥有 C、Python、JavaScript 等多种语言的官方或社区实现。开发者可以根据需求自定义消息,实现系统级集成与控制。在 SITL 仿真、自动任务规划、远程控制等应用中,MAVLink 是无人系统通信的核心桥梁。在这里大家先对 MAVLink 协议是什么有个基本的认识。我们先不对 MAVLink 的具体内容,比如消息帧结构和编程接口,进行介绍。这些内容会在以后的博客中讲解。

2 MAVProxy 地面控制站

MAVProxy 是由 ArduPilot 官方支持的命令行式地面控制站(GCS),采用 Python 编写,具有轻量级、跨平台和高度可扩展的特点。它可在 Linux、Windows、macOS 等系统中运行,广泛用于无人机仿真(SITL)、飞控调试、自动化测试以及树莓派等伴随计算平台。MAVProxy 支持多种 MAVLink 通信方式,内置航点任务、地图显示、参数管理等常用模块,并通过插件机制支持功能拓展。用户还可以通过 Python 脚本与 MAVLink 指令交互,快速实现自定义控制逻辑与任务流程。在不依赖图形界面的场景下,如远程终端或嵌入式环境,MAVProxy 是极为高效的控制工具。MAVProxy 的安装过程非常简单,在Ubuntu 22.04 命令行中运行:

bash 复制代码
sudo apt-get install python3-dev python3-opencv python3-wxgtk4.0 python3-pip python3-matplotlib python3-lxml python3-pygame
python3 -m pip install PyYAML mavproxy --user

然后将路径加入到 bashrc 中:

bash 复制代码
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc
source ~/.bashrc

这样我们就可以使用 mavproxy.py 脚本了。Ardupilot SITL 在运行仿真的时候默认自动启动 MAVProxy,我们这里直接进行仿真测试。

3 运行 SITL 无人机仿真

我们来运行一个基于 Ardupilot SITL 的 Copter 仿真,进入 Ardupilot 文件夹,先清理一下之前的安装:

bash 复制代码
./waf clean

使用waf构建SITL和copter仿真库,运行以下命令:

bash 复制代码
./waf configure --board SITL   
./waf copter

编译安装的过程会有很多输出,这里依然只截取最后一部分作为参考:

在 ardupilot 文件夹中输入以下命令,启动一个仿真程序:

bash 复制代码
 # 启动STIL
Tools/autotest/sim_vehicle.py -v ArduCopter -f quad --console --map

这里看到,仿真程序成功启动后,我们会看到下面四个界面,一个console,一个map界面,一个ArduCopter信息界面以及我们运行的命令行:

仔细观察Ubuntu命令行界面,我们注意到sim vehide.py命令已经自动启动了MAVProxy控制站,如下图:

接下来我们就可以操纵仿真无人机了。我们可以使用MAVProxy(通过ubuntu命令行)或者map界面来操作无人机。

3.1 使用MAVProxy控制无人机

我们在MAVProxy命令行中依次输入以下命令,让无人机起飞:

bash 复制代码
mode guided
arm throttle
takeoff 40

这三个命令的意思是,将行模式改为guided,解锁油门和引擎,并垂直起到40m。输入之后,MAXProxy命令行的状态如下图所示:

我们会看到命令行对行模式(默认为stabilize)的显示有些问题,这是MAVProxy 的一个小bug,但不影响我们操作飞机。我们也可以在console中看到信息的变化,如下图:

这里显示飞机的高度发生了变化,逐渐增加。我们还会发现电池的消耗真的非常快,不过我们是在作SITL仿真,不会坠机,所以不用在意。因为无人机是垂直起,所以在地图上看不到任何的变化。接下来我们控制无人机飞往指定地点,使用guided命令,MAVProxy输入如下:

无人机会根据quided命令飞到指定的[Latitude(经度),Lonqitude (纬度),Altitude(高度)],如下图:

我们看到无人机已经从Home(白色小房子处)飞到了指定地点。除了guided模式之外,Ardupilot还支持很多其它的飞行模式。

3.2 使用SITL地图界面控制无人机

当无人机成功起后(arm并takeoff之后),我们可以用map界面上的右键菜单来操纵无人机,飞往指定地点或执行某些任务(Mission),如下图所示:

图形界面是为了让用乎更方便的使用Ardupilot SITL进行仿真测试。

4 MAVProxy常用命令

在这篇博客中,我们只尝试了几个常用的命令,MAVProxy还有很多其它的命令,我们没有时间一一介绍。常用命令这里给大家整理了一个表格,作为参考:

无人机必须要以引导模式下才能起飞,执行以下命令。

bash 复制代码
mode guided         #切换模式到guided
arm throttle        #解锁油门,15s无动作,仿真环境里面的无人机会自动上锁
takeoff 40          #起飞到40m

其他常用指令:

给无人机解锁:arm throttle

给无人机强制解锁:arm throttle force

给无人机上锁:disarm

给无人机强制上锁:disarm force

切换到返航模式:mode rtl

切换到悬停模式: mode loiter

切换到降落模式: mode land

控制油门通道上升: rc 3 1800

控制油门通道下降: rc 3 1300

控制俯仰往右飞:rc 2 1200

5 其它地面控制站

除了 Ardupilot SiITL默认使用的MAVProxy以外,还有很多其它的地面控制站,这里介绍两个最常用的,QGC和 MissionPlanner。

5.1 QGroundControl

QGroundControl(QGC) 是一个跨平台、图形化的开源地面控制站软件,广泛支持ArduPilot和 PX4飞控系统。它提供直观的用户界面,方便用户进行任务规划、参数配置、实时监控和行模式切换。QGC支持航点拖拽式规划、地图导航、实时视频流、遥控器校准、电池管理等功能,适用于无人机、无人车、无人船等多种载体。用户只需通过USB、串口、Wi-Fi或射频模块连接飞控,即可实现对飞行器的全面管理。相比MAVProxy等命令行工具,QGC更适合入门用户与图形交互需求场景,但同时也具备强大的开发者调试功能,如MAVLinkInspector和日志分析工具,是地面站工具中最为主流和强大的一种。

5.2. Mission Planner

Mission Planner是由ArduPilot官方维护的功能强大的Windows平台图形化地面控制站(GCS),专为ArduPilot系列飞控设计。它支持行器的全生命周期管理,包括参数设置、传感器校准、固件刷写、航线规划、实时监控、遥控器校准、地理围栏配置、MAVLink消息调试等核心功能。用户可以通过USB、无线电遥测或TCP/UDP网络连接飞控,执行如自动起飞、返航、任务上传等复杂指令。Mission Planner提供丰富的数据可视化图表和行日志分析工具,还支持SITL仿真联动、脚本扩展(C#)和第三方MAVLink系统接入,是ArduPilot生态中最成熟、最全面的GCS工具之一,适合教学、开发、调试和实战应用。

相关推荐
土拨鼠不是老鼠18 天前
纯软件仿真
无人机·地面站·mavlink·qgc
爱看书的小沐22 天前
【小沐杂货铺】基于Three.js渲染三维无人机Drone(WebGL / vue / react )
javascript·vue.js·react.js·无人机·webgl·three.js·drone
星光20251 个月前
APM学习(8):TECS控制(1)
ardupilot·tecs
小灰灰搞电子2 个月前
mavlink协议详解与多通道支持
mavlink
EmotionFlying3 个月前
(11)(2.3.1) ESC遥测(二)
copter·ardupilot·电调和电机
EmotionFlying3 个月前
(11)(3.3) ESC术语
copter·ardupilot·电调和电机
星光20254 个月前
APM学习(7):ArduPilot初始化过程
ardupilot·apm
炸裂狸花猫4 个月前
开源CI&CD工具-Drone
ci/cd·云原生·容器·kubernetes·开源·drone