pixhawk自学笔记之从串口获取光流数据

pixhawk代码已经给出了光流从iic接口获取数据的驱动,在driver文件下可以找到。因为我手边没有多余的传感器,也懒得重新配置mavlink协议,我们来看一下光流代码:

pixhawk自学笔记之从串口获取光流数据_第1张图片

我在main.c文件中把源代码给修改了,现在我们通过串口3,利用mavlink_msg_optical_flow_send函数传送数据。我们追踪到这个函数:

pixhawk自学笔记之从串口获取光流数据_第2张图片

在这个文件下。好,那我们看一下在飞控源代码里面怎么接受。

在rcS文件中配置串口:


 先看如何接受数据,我们找到modules/mavlink下面的mavlink_receiver.cpp

pixhawk自学笔记之从串口获取光流数据_第3张图片

 我们仿照上面的然后写一个属于我们自己的。case后面的判断语句是mavlink协议的命令名,我们追踪过去看看:

pixhawk自学笔记之从串口获取光流数据_第4张图片

  这里就是为了和光流模块传送过来的数据保持一致。然后我们看一下下面调用的函数:

pixhawk自学笔记之从串口获取光流数据_第5张图片

注意:-flow_pub是需要定义的,参照其他函数如何定义。就不一一截图所示了。
我们不仅接收到了还解析出来了,那么我们下一步该怎么办呢,该如何用到这个数呢?接下来我们看一下uorb的使用:

pixhawk自学笔记之从串口获取光流数据_第6张图片


   我们首先在topics文件下创建如图所示文件,结构体要和mavlink100号命令相同,为了接受和发布命令。在这里我们需要注意的是,如果你执行了clean文件,自己添加的这个文件也就被清理掉了,至于如何让他自己添加需要的topic文件,我还没有去研究。然后我们在如下的文件中,做以下声明:

pixhawk自学笔记之从串口获取光流数据_第7张图片


准备工作都已经做好了,那我们如何在其他文件中使用数据呢?

首先要在你使用的文件中:
#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);
    }

这样就可以获取到数据,等下次测试时我们测试结果贴上来看看。




你可能感兴趣的:(Pixhawk,uORB)