首先添加一個uORB topic,然後添加一個mavlink解析程序,這將會將一個輸入的mavlink消息解析並傳入uORB topic中。
注:本例程,nsh仍然看不到消息,如果哪位朋友可以看到自定義的消息,希望能指導交流。
博客地址連接:http://www.cnblogs.com/spyplus/p/pixhawk_note_mavlink_customization.html
FantasyJxf http://blog.csdn.net/oqqenvy12/article/details/56849572
FantasyJxf的博客不詳細,但是思路清晰。
1、原文中定義的ca_trajectory.msg消息如下:
uint64_t應改爲uint64
2、原文中自定義的xml文件如下,我是定義的custom_messages.xml文件,內容一樣。
3、將mavlink generator生成c語言源文件Out目錄定位到一個空的文件夾,注意語言選擇C,協議選擇2.0,將生成的custom_messages文件夾拖到/mavlink/include/mavlink/v2.0
目錄下。
4、將原文中創建的自定義消息類更改爲本文件夾所示的類。
5、按原文的方法進行編譯會在 v2.0/custom_messages/mavlink_msg_ca_trajectory.h文件的開
頭定義的結構體產生錯誤:
Typedef struct MAVLINK_PACKED mavlink_ca_trajectory_t{
uint64_t timestamp;
:
:
Uint16_t seq_id;
}mavlink_ca_trajectory_t;
要去掉上面高亮的mavlink_ca_trajectory_t,就可以編譯過去。
6、(1)在 mavlink_receiver.h中增加一個處理類MavlinkReceiver 中的輸入mavlink消息的函
數:
void handle_message_ca_trajectory_msg(mavlink_message_t *msg);
這個函數是定義在MavlinkReceiver類中的。
(2)在 mavlink_receiver.h中加入一個類MavlinkReceiver中的uORB消息發佈者
orb_advert_t _ca_traj_msg_pub,也是在類中定義的。
7、但是在啓動nsh時出現的 Using MAVLINK 1.0消息。?
然後在其他配置步驟不變的情況下,在v1.0/message_definitions/下創建自定義消息custom_message.xml,mavlink generator的Out生成的custom_messages複製到v1.0目錄下。能編譯過去,但是不能在nsh看到消息,通過nsh下輸入ls obj命令查看消息。
8、然後確保啓用流,通過在啓動腳本中添加以下行(-r配置流速率,-u標識UDP端口14556上的mavlink通道):
示例:
(1)在ttyS1串口上啓動mavlink,波特率爲921600,最大發送速率爲80kB / s:
mavlink start -d /dev/ttyS1 -b 921600 -m onboard -r 80000
(後來回顧時感覺是/dev/ttyS1 端口沒有選對,由於目前沒有時間,沒機會嘗試)
(2)在UDP 14556端口上啓動mavlink,並以50Hz的速率發送HIGHRES_IMU消息:
mavlink start -u 14556 -r 1000000(nsh提示warn信息)
mavlink stream -u 14556 -s HIGHRES_IMU -r 50
本實例的命令爲:mavlink stream -r 50 -s CA_TRAJECTORY -u 14556
但是在nsh仍然看不到消息。