添加新的 MAVLink 信息¶
数据和命令在地面站(即Mission Planner地面站、QGroundControl、MAVProxy 等)之间通过使用 MAVLink 协议 通过串行接口。本页提供了一些添加新 MAVLink 信息的高级建议。
这些说明只在 Linux(准确地说,是在 Windows 机器上运行 Ubuntu 的虚拟机)上测试过。设置虚拟机的说明可在 SITL 页面.如果您可以运行 SITL,就可以按照这里的建议进行操作。这些说明无法在 Windows 或 Mac 上运行。
步骤 #1: 确保安装了最新的 ArduPilot 代码。此外,检查 mavproxy。可在终端窗口中运行此命令更新 Mavproxy:
苏都 核心 安装 --升级 mavproxy
步骤 #2: 决定要添加什么类型的信息,以及如何与现有的信息相匹配。 MAVLink 信息.
例如,您可能希望向飞行器发送一条新的导航命令,以便它能在任务中途(即自动模式下)执行一个特技(如翻转)。在这种情况下,您需要一个新的 MAV_CMD_NAV_TRICK 类似于 mav_cmd_nav_waypoint 定义(在 "MAV_CMD_NAV_WAYPOINT "中搜索 MAVLink 信息 页)。
或者,您可能希望从飞行器向地面站发送新型传感器数据。也许类似于 缩放压力 留言
步骤 #3: 将新信息定义添加到 common.xml 或 ardupilotmega.xml 文件。
如果该命令普遍有用,并有望添加到 MAVLink 协议中,则应将其添加到 ./modules/mavlink/message_definitions/v1.0/common.xml 文件中。如果该命令仅供个人使用或仅适用于 ArduPilot,则应将其添加到 ardupilotmega.xml 文件中。
步骤 #4: 在主飞行器代码中添加功能,以处理与地面站之间的指令收发。需要进行编译(即 ./waf copter)以生成 MAVLink 数据包代码,因此请确保在编辑 XML 文件后进行编译。MAVLink 生成会首先进行,因此由于其他源代码的更改,项目编译是否成功并不重要。
该代码的顶层很可能在载具的 GCS_MAVLink.cpp 文件或 ./libraries/GCS_MAVLink/GCS 类。
在第一个示例中,我们要添加对新导航命令(即窍门)的支持,需要如下操作:
延长 AP_Mission 图书馆的
mission_cmd_too_mavlink()
和mavlink_too_mission_cmd()
函数将 MAVProxy 命令转换为 AP_Mission::Mission_Command 结构。在载具的 commands_logic.cpp (mode_auto.cpp 用于 ArduCopter)
start_command()
和verify_command()
功能,以检查新mav_cmd_nav_trick
.这些函数将调用您创建的两个名为do_trick()
和verify_trick()
(见下文)。创建两个新函数 do_trick() 和 verify_trick(),以某种方式对载具发出指令 变戏法 (或许可以调用 control_auto.cpp 中的另一个函数 (mode_auto.cpp ),设置自动模式变量,然后调用一个新的
auto_trick_start()
功能)。该功能do_trick()
函数将在首次调用命令时被调用。调用verify_trick()
将以 10 赫兹(或更高)的频率反复调用,直到把戏完成。窍门verify_trick()
函数应在技巧完成后返回 true。
步骤 #5: 决定如何在 GCS 处理信息。最简单的方法之一是使用 Mavproxy。MavProxy 使用 pymavlink 来定义 MAVLink 消息,因此您需要重新构建 pymavlink 以包含您的自定义消息。
删除当前安装的 pymavlink 版本。
核心 卸载 pymavlink
安装更新版本。光盘至
ardupilot/modules/mavlink/pymavlink
并运行python3 setup.py 安装 --用户
Mavproxy 现在可以发送或接收新信息。要让 Mavproxy 打印或发送信息,需要执行一个模块。模块是 python 插件,可以为 Mavproxy 添加功能。在 Ubuntu 上,默认情况下模块位于
/usr/local/lib/python2.7/dist-packages/MAVProxy/modules/
.下面是一个打印 MY_CUSTOM_PACKET 消息内容的模块示例。有关如何使用命令行界面触发发送报文的示例,请参阅其他模块。
#!/usr/bin/env python
'''Custom'''
舶来品 时间, os
从 MAVProxy.modules.lib 舶来品 mp_module
从 pymavlink 舶来品 mavutil
舶来品 系统, 追溯
类 自定义模块(mp_module.MPM 模块):
捍卫 启动(自我, 多州):
棒极了(自定义模块, 自我).启动(多州, "自定义";, "自定义模块";)
'''initialisation code'''
捍卫 mavlink_packet(自我, m):
'处理 MAVLink 数据包''';
如果 m.get_type() == 'MY_CUSTOM_PACKET':
打印 "My Int: %(x).2f"; % \
{"x"; : m.intField}
捍卫 启动(多州):
'''initialise module'''
返回 自定义模块(多州)
警告
如果您添加的信息 ID 大于 255,则需要启用 MAVLink 2 支持。这可以通过设置相关的 SERIALn_PROTOCOL
参数(例如 serial1_protocol
)设为 2,并使用 -马夫20
争论。
第 6 步 考虑将您的代码贡献回主代码库。在 纪和声 和/或 提出拉取请求.如果您提出拉取请求,最好将更改至少分成两个独立的提交。一个提交用于修改 .xml 文件(即第 3 步),另一个提交用于修改载具代码。