前期准备
- 源 码:自己到github上下载。可参阅这篇博客
- 工 具:ecilpse用来查看源代码。
说明:
- 主代码区是指ardupilot/ArduCopter目录下的文件
- 库是指ardupilot/libraries目录下的文件
###添加一个新的MAVLink 消息###
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(),主要是用于检查新的消息有没有被传递成功。