【问题标题】:How can I add a new message in the mavlink protocol?如何在 mavlink 协议中添加新消息?
【发布时间】:2016-04-18 15:56:02
【问题描述】:

我是 Mavlink 的新手,我想在 Mavlink 协议中添加一条新消息,并每秒定期发送一次。我该怎么做?

【问题讨论】:

  • 该消息的目的是什么?谁将发送消息,谁将接收消息?
  • 我想要的是每秒使用 3DR 将消息从我的 dron 定期发送到我的 PC。目的是知道我该怎么做,这也有助于我完成我的最终学位项目。
  • 好的,但是消息包含什么?
  • 该消息包含两个标识符,第一个是控制器ID,第二个用于识别消息。我对两者都使用 uint8_t 类型。
  • 您查看过现有消息吗?您也许可以将这些数据塞进一条消息中,例如 debugstatustextsys_statusheartbeat

标签: c++ xml dronekit mavlink


【解决方案1】:

在这里您可以找到detailed steps 了解如何向mavlink 协议添加新消息以及如何处理它。

  1. 确保您安装了最新的 ArduPilot codeMavproxy
  2. 确定要添加的消息类型。
  3. 将新的消息定义添加到mavlink子模块的common.xmlardupilotmega.xml文件中。

  4. 向主车辆代码添加函数以处理发送或接收命令。

【讨论】:

    【解决方案2】:

    这取决于您使用的自动驾驶仪。如果您使用的是 ardupilot,那么您需要在 ardupilot/modules/mavlink/message_definitions/v1.0/ardupilotmega.xml 中添加一个新的 xml 消息定义。

    您可以查看其他消息以了解其格式。只需确保您选择了一个未使用的 id。

    接下来,您需要决定如何将其放入代码中。您可以通过将消息 id 添加到 STREAM_EXTRA3 来将其放入 data_stream_send 任务中。这将像其他数据在那里发送一样频繁地发送您的消息。作为其中的一部分,您需要定义函数以使用 pymavgen 生成的函数、消息 ID 和枚举来实际打包数据结构。这就是我在自己的 ASH_DATA 项目中所做的。您可以查看我所做的更改in my repository 以供参考。请注意,其中一些更改包括合并在 pixhawk 上接收 ash 数据并将数据添加到日志文件中。

    鉴于您希望每秒运行一次,您可能希望添加到 one_second_loop 任务或创建您自己的任务,该任务只需使用您的新消息 ID 调用 try_send_message 函数。

    您当然需要将新消息合并到您的 gcs 中,这样您才能真正收到它,但这是另一回事。

    希望这可以推动其他试图做同样事情的人朝着正确的方向前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多