通过Mavlink协议向Ardupilot请求数据流并解析数据

通过Mavlink消息请求数据流

参考网页:从自动驾驶仪请求数据 — 开发文档 (ardupilot.org)

在这里我们使用Mavlink的REQUEST_DATA_STREAM 消息来获取我们需要的数据流(此消息可以设置数据流的频率),然后再数据流中解析我们需要的数据,整个过程分为请求数据、解析数据两步。

第一步:利用mavlink消息请求数据流

利用mavlink源码Common文件夹下的mavlink_msg_request_data_stream.h文件中的mavlink_msg_request_data_stream_pack函数,具体如下:

函数中的每个参数的说明如下:

system_id发送端的系统id;target_system目标(接收端)的系统id。系统id是用来区分系统中的不同个体的,常用于多机编队中,因为此时需要详细确认发送方和接收方的身份。mavlink最多允许一个系统中存在255个id。

component_id发送组件的id;target_component目标组件id,这是用来区分同一个体中不同组件的,如区分地面站cpu发给机载gpu,或地面站cpu发给机载imu。这个id可以明确消息的发送源和接收方。0代表发送给目标系统的所有组件。

函数的参数设置:

system_id 自己系统的ID,先设为255

component_id 发送组件的id,设为190,通过Mavlink官网中的MAV_COMPONENT可以看到190表示地面站MAV_COMP_ID_MISSIONPLANNER

msg 通用的mavlink消息数据类型,用于存储打包后的结果,最后通过串口发送

target_system 该参数与自己所连接飞控有关,一般可以在飞控全部参数表里设置,如下图

也可以通过读取心跳包来获得。

target_component 设置为1,表示发送给飞机的控制组件,也可以在MAV_COMPONENT中找到

req_stream_id 请求数据流的ID, 可以在MAV_DATA_STREAM中找到(对应的value值),在描述中有其数据流包含哪些数据的值

req_mssage_rate 请求消息的频率Hz,自己设置为5

start_stop 1表示开始,0表示停止,设置为1

1.首先需要获得想要数据对应数据流的组别ID和消息ID

在参考网页的Using SRx Parameters部分可以找到自己需要的数据,及其属于的组别

也可以在Mavlink源码的common文件夹的common.h文件中的MAV_DATA_STREAM枚举的相应数据流的注释部分找到其包含的消息,其中MAV_DATA_STREAM_EXTRA1~3,注释为取决与飞控,通过搜索飞快的全部参数表(搜索EXTRA)可以看到,具体的数据流内容

如:想要获得GPS数据,GLOBAL_POSITION_INT消息,属于POSITION组,其数据流对应的IDMAV_DATA_STREAM枚举中为MAV_DATA_STREAM_POSITION,

然后点击GLOBAL_POSITION_INT,其会自动跳转到Mavlink官网中GLOBAL_POSITION_INT消息对应的消息ID(33),可以看到该消息的具体参数及说明,以用于解析该消息的数据。

从Mavlink源码的common.h文件夹的MAV_DATA_STREAM枚举中可以获得其消息组别ID为6

然后利用mavlink_msg_request_data_stream_pack 函数,通过串口发送给飞控请求该组数据

请求部分代码:

在解析部分,先利用mavlink_parse_char函数,解析串口数据存在message

根据message的msgid进行利用相应的解析函数进行解析,及对应消息的ID,如GLOBAL_POSITION_INT消息对应的消息ID(33),其对应的解析函数根据消息的名称可以在Mavlink源码的common文件夹的mavlink_msg_global_position_int.h中找到mavlink_msg_global_position_int_decode,在该文件的最上面也有消息的ID以及消息内部包含数据的说明

解码部分代码:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值