一文搞定px4、ardupilot mavlink软件协议

搞开源无人机的朋友最耳熟能详的莫过于它的通讯协议MAVLINK了。

Mavlink----一个又好气又好笑的名词,仿佛自带光环,它一出场,就会附带两个小弟:ros、mavros。

网络上mavros免费的课程一大堆,mavlink的倒是少之又少。

很多人都会形成一种观念,难道是因为mavros要简单些?今天L君要告诉你们,其实直接使用mavlink比使用mavros简单的多啦。

对于一个老程序员来说,理解数据结构犹如吃饭,但是理解框架犹如登天!

先来好好说说这个大哥和两小弟的关系。

ROS
robot operation system,机器人操作系统。说是操作系统,其实跟硬件毫无关系,完全是用一大堆软件堆砌起来的彻头彻尾的----“骗局”。没有mmu、smp、cache,它唯一的功能就是----通讯。把所有的逻辑性代码转换为通讯数据,比如一个函数调用完成的事情,它会拆分成----publish数据、对端接受数据、执行代码。这里看起来,ros跟mavlink似乎毫无关系,直到说到mavros。

MAVROS
一个在ros下的mavlink软件适配包,它的作用其实就是将mavlink协议放到ros框架里去解析,统一使用ros框架,publish、subscribe进行操作。

MAVLINK
一种软件协议,说白了,就是一大堆的struct,做过服务器的朋友应该会搞懂,其实就是封包格式啦,只是mavlink由于介质不唯一,所以加了CRC效验而已。

那么从这里我们已经看出了端倪:学mavros其实是无端的增加了学习成本呀,本来我收发收发数据就完事儿了的东西,我为啥一定要去学一套ros呢?

而且就程序员的原则而言,我们学习时,一定要看到本质,用mavros的时候,中间经过了一个黑盒,里面到底干了什么,我们根本不知道呀。

L君以前也吃过很多亏,用mavros反跟ardupilot代码,发现,我publish出去的东西,人家ardupilot收到的压根儿就不一样!坐标系从NED变成了ENU,然而heading的坐标系还是NED。有些结构体少了几个参数,有的甚至比mavlink原来的还多了几个。

不仅mavros在给你制造着麻烦,ros也时不时给你制造麻烦:

“CMakeList怎么改才能用PCL库?”
“怎么有的包必须用catkin_make_isolated才能编译?”
“不是说好的catkin_make吗?”
“为什么我publish出去没效果啊?”
“catkin_make一分钟,看一次效果3秒。MD怎么用gdb啊?”
“我好想单步走啊,printf调试起来内心在滴血- -。。。”

不!!!这简直就是地狱!我要砍掉它,这不是人干的事儿。我忍受着在linux下用记事本写代码的痛苦,你还给我搞这些幺蛾子?

算了算了,框架这玩意儿不是我等卑微程序员能玩儿的东西,我们还是不怕苦不怕累的啃啃数据流吧。

当我正打算回到小黑屋啃mavlink数据协议的时候,我发现了一个神奇的事情:
一文搞定px4、ardupilot mavlink软件协议_第1张图片

一个老程序员的直觉,既然mavlink是以modules存在的,那么一定在那神奇的网站上。。。
一文搞定px4、ardupilot mavlink软件协议_第2张图片

好吧好吧,其实我早就知道了,人家mavlink为了用户方便,sdk早就给我们准备好啦,根本不需要我们自己去做解析,我们快速的git clone下来:
一文搞定px4、ardupilot mavlink软件协议_第3张图片

然后我们执行mavgenerate.py脚本:
一文搞定px4、ardupilot mavlink软件协议_第4张图片

这里我们XML选择:message_definitions/v1.0/common.xml(其中还有ardupilotmega.xml表示支持APM固件扩展协议,以及其他无人机固件的协议,common表示通用协议,所有固件都支持。)

Out随意选择一个要生成代码的地方

语言选择c语言

协议簇2.0

点击生成:
一文搞定px4、ardupilot mavlink软件协议_第5张图片
一文搞定px4、ardupilot mavlink软件协议_第6张图片

一个通用的mavlink库就生成好啦!

我们现在只需要在编程的时候包含这些头文件就可以实现我们的mavlink通讯了。

现在赶快连上ALICE飞控,打开visual studio:
一文搞定px4、ardupilot mavlink软件协议_第7张图片

将我们刚才生成的mav_inc文件夹整个丢进新创建的项目:
一文搞定px4、ardupilot mavlink软件协议_第8张图片

并在解决方案资源管理器中添加mavlink的头文件和一个main.cpp(注意文件夹需要自己添加哦):
一文搞定px4、ardupilot mavlink软件协议_第9张图片

写入如下代码:

你可能感兴趣的:(通讯,自动驾驶,数据挖掘,机器学习,自然语言处理,深度学习)