PIXHAWK新增自定義訊息儲存到SD卡

2021-08-07 06:20:14 字數 1680 閱讀 3095

四旋翼除錯階段總會出現很多難以預見的現象,這時為了找到所出問題的原因,就需要獲得原始相關資料進行分析,pixhawk**提供了記錄飛行日誌的功能,能夠將飛行中的重要資料存入sd卡中,並有相應的軟體畫出曲線分析資料。

目前pixhawk官方開發指導**上介紹的是logging功能的用法,沒有提到sdlog2,而**中預設啟動的是sdlog2這個應用,所以新增新的日誌需要按照sdlog2的方式新增,通過閱讀原始碼嘗試,總結出新增新的日誌資料的步驟如下:

在src/modules/sdlog2目錄下找到sdlog2_messages.h標頭檔案,仿照檔案中其他資料結構體的寫法,新增自己的結構體。如:

#define log_alt_msg 62

struct log_alt_s

floatdistance;

boolstatus;

其中數字代表標號,按順序排即可;結構體中變數個數按照自己需求新增,不一定要和某個uorb主題內的變數完全相同。

log_format(alt, 」fb」 , 」alt , state」 ),

其中alt,alt,state均為讀取日誌曲線時對應曲線的標號。

fb代表結構體中資料的型別,對應關係如下圖

在src/modules/sdlog2目錄下找到sdlog2.c檔案,在buf聯合體的末尾(約1186行)中新增所訂閱某個主題的資料。如訂閱超聲波資料:

struct sonar_distance_s sonar;

緩衝變數用於儲存某個主題的所有資料,因此要在此檔案的起始位置包含所訂閱主題的標頭檔案。

在sdlog.2檔案中body結構體的末尾(約1233行)新增待記錄資料的變數。如:

struct log_alt_s log_sonar;

這個變數用於儲存所要寫入sd卡的資料。

在sdlog.2檔案中subs結構體的末尾(約1296行)新增對所記錄主題的訂閱,並在結構體外賦初值。如:

int sonar_sub;

subs.sonar_sub = -1;

實現對超聲波資料的訂閱以及賦值。

這一步將某個主題更新後的資料儲存到自定義的資料結構體中。在sdlog.2檔案末尾(如2290左右空白處)仿照其他主題的方式增加**:

if(copy_if_updated(orb_id(sonar_distance),&subs.sonar_sub, &buf.sonar))

log_msg.msg_type=log_alt_msg;

log_msg.body.log_sonar.distance=buf.sonar.distance[0]/100.0f;

log_msg.body.log_sonar.status=buf.sonar.status[0];

logbuffer_write_and_count(alt);

這段**將緩衝區中所儲存的更新後的某主題的資料轉移到自定義結構體中用於寫入sd卡,可以選擇性的儲存需要的資料,因此正如第1步所說,自定義資料結構體內的變數個數並不一定如所訂閱主題一樣,依自己需求而定,可以是主題內的部分變數。

下圖為存入sd卡中的超聲波資料,紅色為測量的距離值,綠色為超聲波返回的狀態資訊。

VC新增自定義訊息

在vc 中想加入自定義訊息,以下方法可供參考 1 首先定義訊息 cpp view plain copy print?define wm mymessage wm user 100 define wm mymessage wm user 100 2 在.h標頭檔案中,加入訊息響應函式 cpp view...

MFC新增自定義訊息

由於mfc中無法通過類嚮導來自定義訊息,所以需要手動新增,主要過程如下 本文基於vs2008下通過執行緒實現資料實時更新的對話方塊運用程式 1.定義訊息 resource.件中 由於很多新控制項也會用到wm user訊息,所以定義wm user 100或更高,避免衝突 define wm updat...

MFC新增使用者自定義訊息

1 傳送訊息 首先在a的標頭檔案中定義這個訊息 define wm usermessage wm user 100所有自定義訊息都是以wm user訊息為基礎加上乙個任意的自然數來表示的。2 接受訊息 物件接受乙個訊息,應該有三部分 在標頭檔案中有該訊息的處理函式的原型 在實現檔案中有接受訊息對映的...