pixhawk添加一个新的MAVLink 消息

版权声明

  • 博  主:thunder_fan
  • 声  明:喝水不忘挖井人,转载请注明出处。
  • 联系方式:cllshxz#163 DOT com(请自行改为正确格式)

前期准备

  • 源 码:自己到github上下载。可参阅这篇博客
  • 工 具:ecilpse用来查看源代码。

说明:

  • 主代码区是指ardupilot/ArduCopter目录下的文件
  • 库是指ardupilot/libraries目录下的文件

pixhawk和地面站之间是使用MAVLink协议来进行传输,pixhawk飞控板通过串口连到电脑的地面站上(地面站有mission planner,Droid Planner近10款之多,并且有针对不同的平台)。

这部分介绍仅仅在Linux上被测试过,我是在虚拟机的ubuntu上测试的。如何装虚拟机请自行百度。

步骤一
首先确保你已经下载了ArduPilot项目最新的代码,然后检查mavproxy,在终端窗口里输入一下命令,能完成mavproxy的更新。

sudo pip install –upgrade mavproxy

步骤二
首先决定你想要添加什么类型的消息,让它怎样和已存在的MAVlink消息不冲突。

举个例子:你可能想要发送一个新的导航命令到四旋翼上,它将会在一个任务中间被发送。这种情况下你需要一个类似于MAV_CMD_NAV_WAYPOINT这个定义的MAV_CMD_NAV_TRICK定义,你可以在 MAVLink messages这个页面找到MAV_CMD_NAV_WAYPOINT。

另外,你可能需要发送一个从飞控到地面站的新类型的传感器数据。这类似于 SCALED_PRESSURE这个消息。

步骤三
在 common.xml 或ardupilotmega.xml配置文件里添加新的消息定义。 这两个文件在ardupilot/modules/mavlink/message_definitions/v1.0/目录下。如果你仅仅是个人使用或者仅仅用于Copter这种顶层应用(你可以看在ardupilot下还有Plane,Rover等顶层应用)。那么你应该将这个定义,添加到 ardupilotmega.xml文件中。

步骤四
当你在主机器代码中添加了新的MAVlink消息用于向地面站发送或接收来自地面站的命令前,首先需要进行编译(make px4-v2)用于产生一个mavlink包代码,以确保在编辑了XML配置文件之后新的消息生效。这个mavlink消息如果编译成功之后会马上生效,不会因为其他代码的改变而不生效。

关于mavlink的顶层代码在主代码区的 GCS_MAVLink.cpp文件中和/libraries/GCS_MAVLink/GCS 类中。

举一个例子,如果你想为一个新的导航命令提供支持,你需要完成如下内容:

  • 拓展在 AP_Mission库中的mission_cmd_to_mavlink()和mavlink_to_mission_cmd()函数来将 MAVProxy命令转化为一个AP_Mission::Mission_Command 的结构。
  • 在主代码区的commands_logic.cpp的start_command()和verify_command()中添加一些新的函数来检查这个新的MAV_CMD_NAV_TRICK消息是否到达。这两个新的函数是do_trick()和verify_trick(),主要是用于检查新的消息有没有被传递成功。

总结

  • 对mavlink这部分理解还不是很透彻,有待继续加强理解。
  • 《pixhawk的源码结构介绍》四篇博客到此完结。
  • 本人水平有限,如有错误,欢迎指出。多多交流,共同进步。

你可能感兴趣的:(飞控)