目录
在上一篇博客中,我们介绍了如何在 Ubuntu 22.04 下安装 Ardupilot SITL 仿真环境。在这一篇 blog 中,我们将自己运行一个 Copter 的 SITL 仿真。Ardupilot 是基于 MAVLink 通信协议的,而操作仿真无人机执行任务需要一个地面站 (GCS)和 Ardupilot SITL 进行配合。所以在运行仿真之前,我们先简单介绍一下 MAVLink 通信协议和 MAVProxy 地面站。
1. MAVLink 通信协议
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 命令行中运行:
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 中:
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc
source ~/.bashrc
这样我们就可以使用 mavproxy.py 脚本了。Ardupilot SITL 在运行仿真的时候默认自动启动 MAVProxy,我们这里直接进行仿真测试。
3. 运行 SITL 无人机仿真
我们来运行一个基于 Ardupilot SITL 的 Copter 仿真,进入 Ardupilot 文件夹,先清理一下之前的安装:
使用 waf 构建 SITL 和 copter 仿真库,运行以下命令:
./waf configure --board SITL
./waf copter
安装输出的内容比较多,就不在这里截图了。在命令行中运行 sim_vehicle.py 命令,启动仿真, 如下:
sim_vehicle.py -v ArduCopter --console --map
仿真程序成功启动后,我们会看到下面四个界面,一个 console, 一个 map 界面,一个 ArduCopter 信息界面以及我们运行的命令行:
仔细观察 Ubuntu 命令行界面,我们注意到 sim_vehicle.py 命令已经自动启动了 MAVProxy 控制站,如下图:
接下来我们就可以操纵仿真无人机了。我们可以使用 MAVProxy (通过ubuntu 命令行) 或者 map 界面来操作无人机。
3.1. 使用 MAVProxy 控制无人机
我们在 MAVProxy 命令行中依次输入以下命令,让无人机起飞:
mode guided
arm throttle
takeoff 40
这三个命令的意思是,将飞行模式改为 guided, 解锁油门和引擎,并垂直起飞到 40 m。输入之后,MAXProxy 命令行的状态如下图所示:
我们会看到命令行对飞行模式(默认为 stabilize)的显示有些问题,这是 MAVProxy 的一个小bug,但不影响我们操作飞机。我们也可以在 console 中看到信息的变化,如下图:
这里显示飞机的高度发生了变化,逐渐增加。我们还会发现电池的消耗真的非常快,不过我们是在作 SITL 仿真,不会坠机,所以不用在意。因为无人机是垂直起飞,所以在地图上看不到任何的变化。接下来我们控制无人机飞往指定地点,使用 guided 命令,MAVProxy 输入如下:
无人机会根据 guided 命令飞到指定的 [ Latitude (经度), Longitude (纬度),Altitude(高度)],如下图:
我们看到无人机已经从 Home (白色小房子处) 飞到了指定地点。除了 guided 模式之外,Ardupilot 还支持很多其它的飞行模式,我们会在之后的 blog 中讲解。
3.2. 使用 SITL 地图界面控制无人机
当无人机成功起飞后 (arm 并 takeoff 之后),我们可以用 map 界面上的右键菜单来操纵无人机,飞往指定地点或执行某些任务 (Mission),如下图所示:
图形界面是为了让用乎更方便的使用 Ardupilot SITL 进行仿真测试。
4. MAVProxy 常用命令
在这篇博客中,我们只尝试了几个常用的命令, MAVProxy 还有很多其它的命令,我们没有时间一一介绍。常用命令这里给大家整理了一个表格,作为参考:
序号 | 命令 | 作用说明 |
---|---|---|
1 | mode GUIDED |
设置飞行模式为 GUIDED(导引模式) |
2 | mode STABILIZE |
设置为手动姿态控制模式 |
3 | arm throttle |
解锁电机,允许飞控响应油门 |
4 | disarm |
上锁电机,停止输出 |
5 | takeoff 10 |
在 GUIDED 模式起飞至 10 米高度 |
6 | param show |
显示所有参数或搜索特定参数 |
7 | param set PARAM VALUE |
设置参数值,例如 param set ALT_HOLD_RTL 1500 |
8 | wp list |
显示当前任务航点列表 |
9 | wp load xxx.txt |
加载任务航点文件 |
10 | wp clear |
清除当前所有任务航点 |
11 | mode rtl |
启动 Return-to-Launch(返航)模式 |
12 | mode land |
命令飞行器自动降落 |
有兴趣的小伙伴可以自己尝试一下这些命令。
5. 其它地面控制站
除了 Ardupilot SITL 默认使用的 MAVProxy 以外,还有很多其它的地面控制站,这里介绍两个最常用的,QGC 和 MissionPlanner。
5.1. QGroundControl
QGroundControl(QGC) 是一个跨平台、图形化的开源地面控制站软件,广泛支持 ArduPilot 和 PX4 飞控系统。它提供直观的用户界面,方便用户进行任务规划、参数配置、实时监控和飞行模式切换。QGC 支持航点拖拽式规划、地图导航、实时视频流、遥控器校准、电池管理等功能,适用于无人机、无人车、无人船等多种载体。用户只需通过 USB、串口、Wi-Fi 或射频模块连接飞控,即可实现对飞行器的全面管理。相比 MAVProxy 等命令行工具,QGC 更适合入门用户与图形交互需求场景,但同时也具备强大的开发者调试功能,如 MAVLink Inspector 和日志分析工具,是地面站工具中最为主流和强大的一种。
5.2. Mission Planner
Mission Planner 是由 ArduPilot 官方维护的功能强大的 Windows 平台图形化地面控制站(GCS),专为 ArduPilot 系列飞控设计。它支持飞行器的全生命周期管理,包括参数设置、传感器校准、固件刷写、航线规划、实时监控、遥控器校准、地理围栏配置、MAVLink 消息调试等核心功能。用户可以通过 USB、无线电遥测或 TCP/UDP 网络连接飞控,执行如自动起飞、返航、任务上传等复杂指令。Mission Planner 提供丰富的数据可视化图表和飞行日志分析工具,还支持 SITL 仿真联动、脚本扩展(C#)和第三方 MAVLink 系统接入,是 ArduPilot 生态中最成熟、最全面的 GCS 工具之一,适合教学、开发、调试和实战应用。
6. 本讲小结
在这一讲中,我们介绍了什么是 MAVLink 协议,什么是 MAVProxy 地面站以及如何安装。我们使用 MAVProxy 和 Ardupilot SITL 对一个无人机(Copter)进行了仿真,最后我们简单介绍了其它两个常用的地面站 QGC 和 Mission Planner。如果大家喜欢今天的 blog, 欢迎大家点赞关注本博客及专栏。我会继续更新更多的内容,帮大家玩转 Ardupilot 仿真。
参考文献:
https://www.chinaflier.com/thread-201860-1-1.htmlDownload and Installation — MAVProxy documentation
https://ardupilot.org/dev/docs/using-sitl-for-ardupilot-testing.html
https://ardupilot.org/dev/docs/copter-sitl-mavproxy-tutorial.html
https://ardupilot.org/mavproxy/docs/getting_started/cheatsheet.html#mavproxy-cheetsheet