博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载:Pixhawk源码笔记十一:增加新的MAVLink消息
阅读量:4965 次
发布时间:2019-06-12

本文共 2165 字,大约阅读时间需要 7 分钟。

 

 

 

 

转自:新浪长沙@WalkAnt 

第十二部分 增加新的MAVLink消息

英文参考:

本节源自:

MavLink协议:

 

地面站之间的数据和指令通信都是通过串行接口使用来传递的。本页面将提供关于添加新的MAVLink信息的一些高级建议。

这些指令仅在Liunx上测试完成(准确的说,是在Windows上运行的Ubuntu虚拟机上测试完成的)。关于设置虚拟机的方法在有相关介绍。如果你要运行SITL,你最好遵循下面的一些建议。这些指令不能直接在Windows或者Mac平台上本地运行。

Step #1:确保你已经安装了最新的ardupilot代码,同时也检查一下mavproxy是否是最新版本。mavproxy工具可以通过在终端窗口运行下面命令进行升级。

sudo pip install --upgrade mavproxy

 

Step #2先确定你所要添加的信息的类型,以及如何和已有的兼容。

比如:你可能会想要向飞行器发送一个新的导航指令,让它可以在任务中期(自动模式中)模仿一个特技动作(比如翻筋斗)。在这个例子中,你需要一个类似于MAV_CMD_NAV_WAYPOINT(可以在搜索MAV_CMD_NAV_WAYPOINT)一样的新的导航指令MAV_CMD_NAV_TRICK

又或者你想要从飞行器发送一个新的传感器数据类型到地面站,可能类似于消息。

 

Step #3:在和文件中添加你的信息的定义声明。

如果你希望将该指令添加到MAVLink协议中,那么你应该添加该指令到../ardupilot/libraries/GCS_MAVLink/message_definitions/common.xml文件中。如果你仅仅个人使用或者仅仅和ArduCopter,ArduPlane,ArduRover搭配使用,那么它就应该被添加到ardupimega.xml文件中。

 

Step #4:重新生成你的所有inlcude文件,确保添加的信息在主代码中可以被识别。

首先将目录切换到ardupilot文件夹下,然后执行下面命令:

./libraries/GCS_MAVLink/generate.sh

 

成功执行后,你应该看到下面这些文件都应经被更新。

../libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/ardupilotmega.h

../libraries/GCS_MAVLink/include/mavlink/v1.0/ardupilotmega/version.h

../libraries/GCS_MAVLink/include/mavlink/v1.0/common/version.h

文件version.h仅简单的更新了文件的日期和时间,但是ardupilotmega.h文件已经应该有了你的新消息的定义声明。

 

Step #5:在飞行器主代码中添加函数方法用来控制向/从地面站发送/接收指令。

这些顶层代码指令绝大部分包含在飞行器的文件中或在类中。

在我们想要添加一个新的导航指令的例子中(比如执行特技动作),应该需要下面信息:

  • 扩展中的mission_cmd_to_mavlink()和mavlink_to_mission_cmd()方法,将mavproxy的指定转换到一个AP_Mission::Mission_Command结构体中。

 

                //       将   Mission_Command 对象   转换到   mavlink消息,该消息能够被发送到 GCS 地面站。

                bool AP_Mission::mission_cmd_to_mavlink(const AP_Mission::Mission_Command& cmd, mavlink_mission_item_t& packet)

                {… …}

 

                //       将  mavlink消息   转换到    Mission_Command 对象,该对象可以被存储到  eeprom

                bool AP_Mission::mavlink_to_mission_cmd(const mavlink_mission_item_t& packet, AP_Mission::Mission_Command& cmd)

        {… …}

 

  • 在飞行器的文件中分别添加start_command()函数和verify_command()函数的一个case分支,用来校验新的消息指令MAV_CMD_NAV_TRICK是否接收到。这些需要你调用自己创建的两个新函数do_trick()和verify_trick()(具体参考下面)。
  • 创建两个新函数do_trick()verify_trick(),用来控制飞行器如何执行特技动作(这可能需要调用中的另一个函数来设置auto_mode变量,然后调用新方法auto_trick_start())。当指令第一次被唤醒时将使用do_trick()函数。verify_trick()函数将会以10hz频率(或者更高)被重复调用直到特技动作完成,当特技动作执行完毕之后verify_trick()函数应该返回True。

转载于:https://www.cnblogs.com/pinlyu/p/4634109.html

你可能感兴趣的文章
GNSS 使用DFT算法 能量损耗仿真
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>
1Caesar加密
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>