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

目录

1. MAVLink 通信协议

2. MAVProxy 地面控制站

3. 运行 SITL 无人机仿真

3.1. 使用 MAVProxy 控制无人机

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

4. MAVProxy 常用命令

5. 其它地面控制站 

5.1. QGroundControl

5.2. MissionPlanner

5.3. 不启用 MAVProxy

6. 本讲小结


在上一篇博客中,我们介绍了如何在 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-pygamepython3 -m pip install PyYAML mavproxy --user

然后将路径加入到 bashrc 中:

echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrcsource ~/.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 还有很多其它的命令,我们没有时间一一介绍。常用命令这里给大家整理了一个表格,作为参考:

序号命令作用说明
1mode GUIDED设置飞行模式为 GUIDED(导引模式)
2mode STABILIZE设置为手动姿态控制模式
3arm throttle解锁电机,允许飞控响应油门
4disarm上锁电机,停止输出
5takeoff 10在 GUIDED 模式起飞至 10 米高度
6param show显示所有参数或搜索特定参数
7param set PARAM VALUE设置参数值,例如 param set ALT_HOLD_RTL 1500
8wp list显示当前任务航点列表
9wp load xxx.txt加载任务航点文件
10wp clear清除当前所有任务航点
11mode rtl启动 Return-to-Launch(返航)模式
12mode land命令飞行器自动降落

有兴趣的小伙伴可以自己尝试一下这些命令。

5. 其它地面控制站 

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

5.1. QGroundControl

QGroundControl(QGC) 是一个跨平台、图形化的开源地面控制站软件,广泛支持 ArduPilotPX4 飞控系统。它提供直观的用户界面,方便用户进行任务规划、参数配置、实时监控和飞行模式切换。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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/911762.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/911762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源AI大模型驱动下视频媒介对图文生态的重构与S2B2C商业场景创新——基于AI智能名片与商城小程序源码的实践分析

摘要:数字媒介演进的进程中,视频对图片及文字的媒介侵蚀效应正呈现加速态势,尤其在Z世代及新网民群体中,视频已成为其触网的首要信息载体。本文基于媒介技术迭代与商业场景融合的双重视角,探究开源AI大模型如何通过智能…

Kafka线上集群部署方案:从环境选型到资源规划思考

在分布式消息系统的落地应用中,Kafka集群的线上部署方案直接关系到业务系统的稳定性与性能表现。不同于测试环境的简易搭建,生产级集群需要从操作系统适配、存储介质选型、容量规划到网络资源调度等多维度进行系统性设计。本文将从工程实践角度&#xff…

算法第40天|买卖股票的最佳时机 1 2 3

121. 买卖股票的最佳时机 题目 思路与解法 记录每一天买或不买时的价值 class Solution { public:int maxProfit(vector<int>& prices) {// dp数组含义&#xff1a;// dp[i][0]:第i天&#xff0c;持有股票时的最大价值&#xff0c;dp[i][1]:第i天&#xff0c;不持…

【赵渝强老师】使用select...into outfile语句备份MySQL

MySQL可以使用select…into outfile语句将表的内容导出为一个文本文件。其基本的语法格式如下&#xff1a; select [列名] from 表名 [WHERE 语句] into outfile 目标文件 [其他选项];该语句分为两个部分。前半部分是一个普通的select语句&#xff0c;通过这个select语句来查询…

PHY XGE 自协商AN数据交互过程

在裸机环境下&#xff0c;两个 **支持 10GBASE-T** 的 PHY 芯片通过 Clause 73 协议完成自协商&#xff08;Auto-Negotiation&#xff0c;AN&#xff09;&#xff0c;它们在 **无操作系统控制** 的条件下&#xff0c;完成以下 **完整的点对点数据交互流程**&#xff1a; --- ##…

【算法 day09】LeetCode 232.用栈实现队列 | 225. 用队列实现栈 | 20. 有效的括号 |1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 题目链接 | 文档讲解 |视频讲解 : 链接 1.思路&#xff1a; 使用2个栈去实现队列 先将元素放入栈1中&#xff0c;然后在将栈1中的元素出栈到栈2中&#xff0c;栈2的元素出栈顺序就和队列的出队一样 2.代码&#xff1a; class MyQueue {Stack<Integer…

大模型项目实战:业务场景和解决方案

你的这张图已经涵盖了很多主流的大模型实战项目&#xff0c;非常全面&#xff01;下面我会补充更多市面上常见的AI大模型实战项目&#xff0c;并且简要说明每个项目的核心内容、实现思路和主流技术栈&#xff0c;方便你参考和扩展。 1. 智能问答/知识库系统 核心内容&#xff…

vscode + Jlink 一键调试stm32 单片机程序(windows系统版)

vscode Jlink 一键调试stm32 单片机程序 安装交叉编译工具链安装 x-pack 构建工具安装 JLink 工具gnu-debuger 插件编译一键启动调试 安装交叉编译工具链 stm32采用 交叉编译工具链 arm-none-eabi-xxx, 下载之后解压&#xff0c;压缩包内部结构如下图&#xff1a; 目录下的bi…

Linux线程概念和控制

Linux线程概念 Linux中线程如何理解 线程<执行流<进程 Linux中的线程模拟进程实现&#xff08;线程就是轻量级进程&#xff09; 与独立的进程相比&#xff0c;线程创建和销毁的开销较小&#xff0c;因为它们共享相同的内存空间和资源。 线程是进程内的执行分支&…

服务器出现问题,连接服务器出现3680 并删除数据库出现1192,请查看详细问题(运维)

mysql连接服务器时&#xff0c;出现这个问题&#xff1a;3680 - Failed to create schema directory xxxx (errno: 28 - No space left on device) 第一步&#xff1a;诊断问题类型 检查磁盘空间 运行以下命令&#xff1a; bash df -h # 查看磁盘使用情况 如果输出中 Use% 接…

uniapp:微信小程序胶囊「复制链接」灰色处理

在原生开发的小程序中默认是支持复制的 &#x1f424; 但是在 uniapp 开发的小程序中无法复制&#xff08;体验版与开发版都可以进行复制&#xff0c;但发布后不可&#xff09; 解决方法&#xff1a; methods: {onShareAppMessage: function() {// return custom share data …

差分数组c++

温度波动记录 每天记录温度&#xff0c;支持区间温度调整和单日查询 输入&#xff1a; 第一行&#xff1a;一个整数n表示有n个温度 第二行&#xff1a;n个数表示具体温度 第三行&#xff1a;三个整数&#xff1a;S&#xff0c;e&#xff0c;c&#xff0c;表示从…

Vue.js 列表过滤实现详解(watch和computed实现)

Vue.js 列表过滤实现详解 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…

性能测试-jmeter实战4

课程&#xff1a;B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战4 jmeter环境搭建1. 安装Java环境&#xff08;必需&#xff09; JMeter环境搭建完整指南1. 安装Java&#xff0…

GPPT(Graph Pre-training and Prompt Tuning)项目复现

GPPT(Graph Pre-training and Prompt Tuning)项目复现 项目概述 GPPT是一种创新的图神经网络预训练与提示调整框架,由MingChen-Sun等人提出。该项目通过将自然语言处理中的提示学习概念引入图领域,解决了图预训练模型在下游任务中的适应性问题。 环境配置 # 创建Python…

anchor 智能合约 IDL 调用

简介&#xff1a;通过 IDL 生成代码 调用 anchor 智能合约。 全网首发 使用 anchor 可以快速开发 solana 上面的智能合约 &#xff0c; 在本案例中我们 先使用 anchor 创建一个只能合约&#xff08; 多个函数方法&#xff09;。 部署到 dev 链上。 通过 anchor 的 IDL 生成 代码…

【Clickhouse系列】事务

目录 1. 标准 ACID 支持场景 (MergeTree 引擎家族) 2. 非 ACID 场景 3. 实验性事务功能 (非云环境) 总结 参考文档 事务性 (ACID) 支持 | ClickHouse Docs ClickHouse ACID 支持核心要点 1. 标准 ACID 支持场景 (MergeTree 引擎家族) • 单分区插入 (原子块) • ✅ 原子性…

在cursor中,配置jdk和maven环境,安装拓展插件

目录 1.手动配置jdk和maven 2.安装java拓展插件 1.手动配置jdk和maven 第一步&#xff1a;按ctrl shift p, 搜索“Preferences: Open User Settings (JSON)” 并回车&#xff0c;打开 settings.json 文件 。然后添加或修改以下内容&#xff1a; "java.home": &qu…

(线性代数最小二乘问题)Normal Equation(正规方程)

Normal Equation&#xff08;正规方程&#xff09; 是线性代数中的一个重要概念&#xff0c;主要用于解决最小二乘问题&#xff08;Least Squares Problem&#xff09;。它通过直接求解一个线性方程组&#xff0c;找到线性回归模型的最优参数&#xff08;如权重或系数&#xff…

在架构设计中平衡动态语言与静态语言部署差异的策略分析

在软件架构设计过程中&#xff0c;语言的选型不仅仅关乎开发效率&#xff0c;更直接影响系统的部署速度、运行性能与维护成本。动态语言&#xff08;如 Python、Node.js&#xff09;部署快、开发灵活&#xff1b;静态语言&#xff08;如 Go、Java、Rust&#xff09;性能强、类型…