• 首页
    • 旋翼飞行器
    • 固定翼飞行器
    • 无人车UGV
    • 飞艇
    • 潜航器
    • 天线跟踪器
    • Mission Planner地面站
    • APM Planner 2
    • MAVProxy
    • 配套计算机
    • 开发人员
  • 下载
    • Mission Planner地面站
    • APM Planner 2
    • 高级用户工具
    • 开发人员工具
    • 固件
  • 社区
    • 支持论坛
    • 在 Facebook 上
    • 开发人员聊天室(Discord)
    • 开发人员语音(Discord)
    • 联系我们
    • 参与
    • 商业支持
    • 开发团队
    • 无人机系统培训中心
  • 商店
  • 关于
    • 历史
    • 许可证
    • 商标
    • 致谢
    • 维基编辑指南
    • 合作伙伴计划
开发 标志
  • 许可证(GPLv3)
  • AP_ 外围设备
  • 下载代码/使用 Git
  • 编写代码
  • 编辑器和集成开发环境
  • 学习代码
    • 导言
    • 图书馆简介
    • 图书馆草图示例
    • 传感器驱动程序
    • 穿线
    • UART 和控制台
    • RC 输入和输出
    • 存储和 EEPROM 管理
    • 文件系统
    • EKF
    • 旋翼飞行器 - 《载具法》介绍
    • 旋翼飞行器 - 姿态控制
    • 旋翼飞行器 - 添加参数
    • Copter - 添加新的飞行模式
    • Copter - 安排新代码间歇运行
    • 旋翼飞行器 - 电机库
    • Copter - 位置控制和导航
    • 旋翼飞行器 - 物体规避
    • Copter - 添加自定义姿态控制器
    • 罗孚 - 添加新的驾驶模式
    • 罗孚 - L1 导航控制器
    • 平面 - 结构概述
    • 添加新日志信息
    • 添加新的 MAVLink 信息
    • 添加新的 MAVLink 云台
  • 模拟 & 测试
  • 调试
  • Linux 上的 ArduPilot
  • 支持代理
  • 贡献代码
  • MAVLink 接口
  • CAN 和 DroneCAN/UAVCAN
  • 配套计算机
  • ROS1/ROS2
  • Lua 脚本
  • 移植到新的飞行控制器
  • OEM 定制
  • 安全固件
  • 远程 ID
  • 高级硬件信息
  • MAVProxy 开发人员 GCS
  • 为 GCS 开发人员提供的资源
  • RTF 载具开发人员信息
  • 团队如何工作
  • 活动
  • 培训中心
  • GSoC
  • 2021 年开发者大会
  • 2022 年路线图
  • 维基编辑指南
  • USB ID
  • 用户警报
  • 涉及 ArduPilot 的学术作品
  • 附录


个人 合作伙伴 SWAG 商店
开发
  • 学习 ArduPilot 代码库
  • 添加新的 MAVLink 信息
  • 在 GitHub 上编辑

添加新的 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 步),另一个提交用于修改载具代码。

上一页 下一页

有关本页面的问题、事项和建议可在 论坛.问题和建议可在论坛或 Github 问题跟踪.

知识共享许可协议© 版权 2024 年,ArduPilot 开发团队。