pixhawk自学笔记之创建一个应用程序(按官网)

今天我们看一下如何创建一个应用程序,读取传感器和发送数据:https://pixhawk.org/dev/px4_simple_app

 

当把环境搭建好,整个工程下载后,打开src-->examples--->px4_simple_app。

当然了,也可以自己添加想实现的功能和任务。当写好这些应用程序,还要考虑要把它注册为NuttShell命令。为了使该应用程序进入固件的编译,将其添加到模块来构建名单。

 

名单构建位置:Firmware/cmake/configs/nuttx_px4fmu-v2_default.cmake

这此文件的末尾,添加:

examples/px4_simple_app

然后执行make px4fmu-v2_default命令编译工程。

 

编译下载完后,我们需要连接测试一下:

串口连接官网:https://pixhawk.org/users/serial_connection

我目前使用的是windows系统我使用的软件是官网提供的TeraTerm

pixhawk自学笔记之创建一个应用程序(按官网)_第1张图片

打开这个软件并连接好,?或者help都会出现已经编译好的命令,在其中你会发现px4_simple_app,就是咱们要测试运行的。

刚才添加的程序已经在系统中注册好。

接下来我们需要扩展的是:如何订阅传感器数据并打印出来。

应用程序之间的个人信息通道称为px4主题。在本教程中,我们感兴趣的sensor_combined话题,其中包含完整系统的同步传感器数据。(下一更着重翻译一下uORB进程间通信)

#include <uORB/topics/sensor_combined.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));

毫无疑问,sensor_sub_fd是一个文件描述符,官网上说,这可以用于非常有效地执行一个阻塞等待新数据,当前线程进入睡眠状态,并且一旦有新数据,不消耗任何cpu周期,等待自动唤醒。当然做到这一点使用pull()轮询机制来完成的。 

实例中已经给出相关解释和说明,然后编译下载。我们来看一下测试:

pixhawk自学笔记之创建一个应用程序(按官网)_第2张图片

系统可能已经运行uorb程序,如果运行的程序我们再启动一遍,会收到系统的通知,XX已经启动。

第二部运行sh/etc/init.d/rc.sensors

启动传感器。

最后一部启动传感器,px4_simple_app&

但是为什么后面要加个&符号呢?

如果加上&符号,会一直握有NuttShell的控制权。

下一步我们如何发布获取到的数据呢?我们可以通过mavlink应用程序,将其转发给地面站。

(按官网)

初始化要发布的的专题的结构和广告的话题:

 #include <uORB/topics/vehicle_attitude.h>
..
/* advertise attitude topic */struct vehicle_attitude_s att;memset(&att, 0, sizeof(att));
orb_advert_t att_pub_fd = orb_advertise(ORB_ID(vehicle_attitude), &att);

在主循环中发布信息:

orb_publish(ORB_ID(vehicle_attitude), att_pub_fd, &att);







你可能感兴趣的:(传感器,Pixhawk,开源飞控,uORB)