pixhawk代码已经给出了光流从iic接口获取数据的驱动,在driver文件下可以找到。因为我手边没有多余的传感器,也懒得重新配置mavlink协议,我们来看一下光流代码:
我在main.c文件中把源代码给修改了,现在我们通过串口3,利用mavlink_msg_optical_flow_send函数传送数据。我们追踪到这个函数:
在这个文件下。好,那我们看一下在飞控源代码里面怎么接受。
在rcS文件中配置串口:
先看如何接受数据,我们找到modules/mavlink下面的mavlink_receiver.cpp
我们仿照上面的然后写一个属于我们自己的。case后面的判断语句是mavlink协议的命令名,我们追踪过去看看:
这里就是为了和光流模块传送过来的数据保持一致。然后我们看一下下面调用的函数:
注意:-flow_pub是需要定义的,参照其他函数如何定义。就不一一截图所示了。
我们不仅接收到了还解析出来了,那么我们下一步该怎么办呢,该如何用到这个数呢?接下来我们看一下uorb的使用:
我们首先在topics文件下创建如图所示文件,结构体要和mavlink的100号命令相同,为了接受和发布命令。在这里我们需要注意的是,如果你执行了clean文件,自己添加的这个文件也就被清理掉了,至于如何让他自己添加需要的topic文件,我还没有去研究。然后我们在如下的文件中,做以下声明:
准备工作都已经做好了,那我们如何在其他文件中使用数据呢?
首先要在你使用的文件中:#include <uORB/topics/young_flow_1.h>
struct young_flow_data flow; _flow_pub = orb_subscribe(ORB_ID(young_flow_1)); orb_check(_flow_pub, &flow_updated); if(flow_updated){ orb_copy(ORB_ID(young_flow_1), _flow_pub, &flow); }
这样就可以获取到数据,等下次测试时我们测试结果贴上来看看。