1. 程式人生 > >pixhawk自學筆記之建立一個應用程式(按官網)

pixhawk自學筆記之建立一個應用程式(按官網)

當把環境搭建好,整個工程下載後,開啟src-->examples--->px4_simple_app。

當然了,也可以自己新增想實現的功能和任務。當寫好這些應用程式,還要考慮要把它註冊為NuttShell命令。為了使該應用程式進入韌體的編譯,將其新增到模組來構建名單。

這此檔案的末尾,新增:

examples/px4_simple_app

然後執行make px4fmu-v2_default命令編譯工程。

編譯下載完後,我們需要連線測試一下:

我目前使用的是windows系統我使用的軟體是官網提供的TeraTerm


開啟這個軟體並連線好,?或者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()輪詢機制來完成的。 

例項中已經給出相關解釋和說明,然後編譯下載。我們來看一下測試:


系統可能已經執行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);