• 首页
    • 旋翼飞行器
    • 固定翼飞行器
    • 无人车UGV
    • 飞艇
    • 潜航器
    • 天线跟踪器
    • Mission Planner地面站
    • APM Planner 2
    • MAVProxy
    • 配套计算机
    • 开发人员
  • 下载
    • Mission Planner地面站
    • APM Planner 2
    • 高级用户工具
    • 开发人员工具
    • 固件
  • 社区
    • 支持论坛
    • 在 Facebook 上
    • 开发人员聊天室(Discord)
    • 开发人员语音(Discord)
    • 联系我们
    • 参与
    • 商业支持
    • 开发团队
    • 无人机系统培训中心
  • 商店
  • 关于
    • 历史
    • 许可证
    • 商标
    • 致谢
    • 维基编辑指南
    • 合作伙伴计划
开发 标志
  • 许可证(GPLv3)
  • AP_ 外围设备
  • 下载代码/使用 Git
  • 编写代码
  • 编辑器和集成开发环境
  • 学习代码
  • 模拟 & 测试
  • 调试
  • Linux 上的 ArduPilot
  • 支持代理
  • 贡献代码
  • MAVLink 接口
    • MAVLink 基础知识
    • 请求(飞行)控制器提供数据
    • 获取和设置参数
    • 旋翼飞行器指令(制导模式)
    • 平面指令(制导模式)
    • UGV无人车指令(引导模式)
    • 获取和设置原点和/或 EKF 原点
    • 上膛和撤膛
    • 获取和设置飞行模式
    • 摄像机命令
    • 云台/相机支架
    • 任务上传/下载
    • 移动伺服器
    • 卷扬机命令
    • MAVLink 路由
    • 其他命令
    • 任务指令列表
    • 任务指令包格式
  • CAN 和 DroneCAN/UAVCAN
  • 配套计算机
  • ROS1/ROS2
  • Lua 脚本
  • 移植到新的飞行控制器
  • OEM 定制
  • 安全固件
  • 远程 ID
  • 高级硬件信息
  • MAVProxy 开发人员 GCS
  • 为 GCS 开发人员提供的资源
  • RTF 载具开发人员信息
  • 团队如何工作
  • 活动
  • 培训中心
  • GSoC
  • 2021 年开发者大会
  • 2022 年路线图
  • 维基编辑指南
  • USB ID
  • 用户警报
  • 涉及 ArduPilot 的学术作品
  • 附录


个人 合作伙伴 SWAG 商店
开发
  • MAVLink 接口
  • ArduPilot 中的 MAVLink 路由器
  • 在 GitHub 上编辑

ArduPilot 中的 MAVLink 路由器¶

ArduPilot(在飞行控制器上运行)可将一个遥测端口上接收到的 MAVLink 信息路由到所有其他遥测端口。在飞行器上有多个启用 MAVLink 的组件(如飞行控制器和配套计算机),但飞行器和地面站之间只有一个遥测连接的情况下,这一点非常重要。本页描述了 ArduPilot 如何决定哪些信息应被路由到哪些遥测端口。

./_images/mavlink-routing.png

正如 MAVLink 基础知识 页面 MAVLink 网络由以下部分组成 系统 (载具、全球控制系 统、天线跟踪器等),它们本身由 部件 (飞行控制器、摄像系统等)。

每条信息都包含一个 系统 身份证 和 组件 身份证 字段来指定信息的来源。此外 一些消息 (包括 set_position_target_global_int) 包括 目标系统 和 目标组件 字段,以便指定应由哪个系统/组件执行命令。

的值为 0。 目标系统 或 目标组件 被视为广播 ID,将发送给网络中的所有系统/目标系统上的所有组件。

ArduPilot 系统的路由工作原理如下:

  • 所有接收到的 MAVLink 信息都会由 MAVLink_routing 类。

  • 该类提取源系统 ID(又名 系统码)和组件 id(又名 贮藏库) 并建立路由阵列,将通道(即 USB 端口、Telem1、Telem2)映射到 <sysid,compid>; 一对

  • 该类还能提取目标系统 ID (目标系统)和组件 ID (目标组件),如果它们与载具的 <sysid,compid>; 使用上述数组将信息转发到相应的通道。

  • 没有目标的信息 <sysid,compid>; 由载具处理,然后转发给每个已知系统/组件。

MAVLink 路由的详细理论¶

以下信息摘自路由代码源代码注释 (/libraries/GCS_MAVLink/MAVLink_routing.cpp)

  1. 当飞行控制器接收到信息时,如果其中任何一个条件成立,则应在本地进行处理:

    1. 它没有 目标系统 领域

    2. 它有一个 目标系统 的零

    3. 它拥有飞行控制器目标系统,没有 目标组件 领域

    4. 它拥有飞行控制器目标系统和飞行控制器 目标组件

    5. 它有飞行控制器的目标系统,而飞行控制器在其任何链接上都没有看到来自有信息的系统的任何信息 目标系统/目标组件 组合

  2. 当飞行控制器接收到信息时,如果该链路符合上述任何条件,则应将其转发到另一条不同的链路上:

    1. 它没有 目标系统 领域

    2. 它有一个 目标系统 的零

    3. 它没有飞行控制器 目标系统 而飞行控制器已经看到了来自报文的信息 目标系统 链接上

    4. 它有飞行控制器 目标系统 并有一个 目标组件 场,飞行控制员看到了来自 目标系统/目标组件 链接组合

备注

本建议假定,地面站在通过链路收到至少一个来自非广播目的地(sysid/compid 组合)的数据包之前,不会向该目的地发送指令数据包。这对于防止飞行控制器执行非针对它的信息至关重要。例如,一个 参数设置 不能发送到特定的 <sysid/compid>; 组合,直到 GCS 看到来自该组合的数据包为止。 <sysid/compid>; 链接上的组合。

全球监控系统还必须重新设置<sysid/compid>; 当它看到 SYSTEM_TIME 报文中的 time_boot_ms 从某个特定的 <sysid/compid>;.这对检测飞行控制器的重置至关重要,重置意味着路由表的重置。

上一页 下一页

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

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