第七章 PX4-Mavlink解析
首先我们是还是来说一说mavlink吧。Mavlink协议是无人机的一种开源通信协议。可以理解就是按照一定的格式来发送数据。
这一章节涉及到了消息的打包发送和接收解析。
首先我们还是找到入口函数然后回到脚本启动中找到mavlink的启动
,这个找到应该不难吧,前面几章都有这个。这里有一个需要提一下,很多人在后台nsh调试出现乱码需要拔掉SD卡就行了,造成这个问题的原因是同时也发送了mavlink消息,这个的启动如图:
回到start函数找到创建的任务start_helper在到else中找到task_main中。首先还是对波特率进行初始化设置速率设置模式设置。然后根据启动参数我们可以知道_daterate=1200,_device_name=/dev/tty1很显然数传用的是串口1,我们对应到硬件确实是串口1哦,这个没什么好说的吧。
然后就是选择控制模式这个也可以找到,在new初始化的时候就可以看到。进入这个if可以看到对串口进行了配置这个没什么好说的跟GPS的配置方式差不多,如果大家不明白去看看GPS这一章节
。然后初始化发送是否有冲突
。更新mavlink参数所有的参数都是有用的
这里贴出一个网站http://mavlink.org/messages/common大家自己去查查看,那些参数如果英文水平还可以的话可以自己去理解。
接着就创建了mavlink消息接收这里面就也创建了一个任务
查看这个start_helper函数,首先还是new
然后执行receive_thread函数,在这个函数中一开始获取串口
,到while中开始读取串口数据
然后就需要解析获取的数据
这里有两个一样的我们用的mavlinkV2.0,剩下的就自己找。然后就是获取数据ID 并解析
这里的解析需要自己去定义结构体然后去赋值和发布数据(最好是用msg文件)。这里我们举个例子
这个消息帧是138,里面就有对接收到的数据赋值
然后就是发布数据
。
在回到mavlink_main.cpp中继续往下分析,接下来就是数据流的配置和参数的数据流的配置。往下走你可以看到switch语句这里面就有对数据发送频率配置了。如果某些没用的数据或者不是很重要的数据你想传的慢一点或者快一点就在这里修改了哦。。讲到这个configure_stream数据函数,接下来就对这个进行描述一下,熟悉了这个你就可以自己添加数据进行传输了。首先找到这个函数,前面是对数据进行搜索是否存在,然后通过for
来找到这个数据流的列表,这里我们需要看一看streams_list列表了这是一个数组都是对这些要发送的数据进行一个初始化。我们随意找一帧数据,我们就找第一个数据帧心跳包的,回到定义的这个类中,首先就是获取这个名字
,然后它的ID
,这里的ID我们稍后再讲,然后就是send函数,这里面就有
函数,这个函数可以自己编写也可以生成。接下来我们就讲这个ID和这个函数了。
这个ID是唯一的,这个我们只需加入ID然后利用mavlink工具就可以生成相关函数,打包函数和发送函数,这些都不用管。首先我们去找一个文件common.xml,我们用的是2.0的协议,我们在这个文件中的最后加入一个ID和name,这个你只需模仿就行,这里面有field name(参数名字)和type(数据类型)这个不难理解,大家相加多少就加多少。注意哦ID的个数是有限制的不能无限往上加。编辑好这个文件后你就要用mavlink工具了。
先下载工具gitclone https://github.com/mavlink/mavlink mavlink-generator,回到工具目录cd mavlink-generator,执行python mavgenerete.py就会出现一个配置GUI ,将该
下的common.xml文件加入,生成文件目录为
这个要对应不要搞错了,然后你在该目录下就可以看到你要的.h文件了命名是mavlink_msg_***.h,然后你就可以使用了。如何加入一个新的数据帧就将完了。然后回到mavlink_main中,我们就到while中去执行。这个里面当中就基本上是对定义的消息帧去赋值了,赋值完了调用发送函数就算是完事。