MavLink協議(開發筆記)
本例程在探索者串口實驗基礎上面修改。如果您的硬件平臺是探索者,可以直接下載使用。 一.MavLink編碼(數據封包) 數據封包:將所需要發送的數據包裝成MavLink協議字節流,通過串口發送出去。 下面是發送心跳包的Demo void Mavlink_TX_Heartbeat(void){ //消息包結構
mavlink_message_t MSG; //調用mavlink_msg_heartbeat_pack函數將數據封包,傳入到消息結構中。
uint16_t len = mavlink_msg_heartbeat_pack(
0x01, //system_id 0x01, //component_id &MSG, //msg 0x02, //type 0x03, //autopilot 0x51, //base_mode 0x00, //custom_mode 0x03);//system_status //臨時緩存區
uint8_t MAVLink_Buf[6+9+2]; //調用mavlink_msg_to_send_buffer函數將消息結構里面的數據以字節流的方式保存到緩存區
len = mavlink_msg_to_send_buffer(MAVLink_Buf, &MSG); //調用MAV_USART_SendNByte函數發送緩存區里面的數據 MAV_USART_SendNByte(MAVLink_Buf, len);//(需要自己編寫)}
如果正常的話,就如下圖所示。
心跳包數據.png (78.31 KB, 下載次數: 81)
下載附件
2019-9-1 18:47 上傳
圖中就是心跳包數據,一幀數據有17位。
在ardupilotmega文件里面還有大量的數據封包函數, 比如: mavlink_msg_sys_status_pack 系統狀態 mavlink_msg_battery_status_pack 電池狀態 mavlink_msg_highres_imu_pack IMU mavlink_msg_global_position_int_pack 定位 等等。
二.MavLink解碼(數據解析) 數據解碼:將接收到的數據轉換成字符的形式顯示出來。
下面是解碼心跳包的Demo //狀態uint8_t ret = 0;//消息結構mavlink_message_t msg;void USART1_IRQHandler(void) //串口1中斷服務程序{ if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中斷
{ uint8_t data = USART_ReceiveData(USART1);//(USART1->DR); //讀取接收到的數據 //調用mavlink_parse_char函數來判斷數據,數據接收完成,返回MAVLINK_FRAMING_OK ret = mavlink_parse_char(MAVLINK_COMM_3, data, &msg, &status); }}
void MAVLinkRcv_Handler(mavlink_message_t MAVLinkMsg){ //心跳包結構 mavlink_heartbeat_t current_messages; if(MAVLinkMsg.msgid==MAVLINK_MSG_ID_HEARTBEAT)//消息ID為心跳包
{ //調用mavlink_msg_heartbeat_decode函數解碼心跳包 mavlink_msg_heartbeat_decode(&MAVLinkMsg, ¤t_messages); //顯示心跳包數據(需要自己編寫) SHOW_HEARTBEAT(MAVLinkMsg, current_messages); }}
int main(void){
init();
while(1) { if( MAVLINK_FRAMING_OK == ret )
{ //接收成功 //解碼
MAVLinkRcv_Handler(msg);
ret = 0; }
else /*TODO*/ ; }}
如果正常的話,就如下圖所示。
心跳包解析后的數據.png (17.82 KB, 下載次數: 73)
下載附件
2019-9-1 18:48 上傳
圖中就是已經解碼后的心跳包數據。具體的含義可以自行去官網了解,這里就不過多的介紹。
在ardupilotmega文件里面還有大量的數據解碼函數, 比如: mavlink_msg_battery_status_decode 系統狀態 mavlink_msg_battery_status_decode 電池狀態 mavlink_msg_highres_imu_decode IMU mavlink_msg_global_position_int_decode 定位 等等。
以上就是MavLink協議的心跳包編碼與解碼實現
全部程序51hei下載地址:
MacLink協議.7z
(678.23 KB, 下載次數: 102)
2019-9-2 04:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|