激光雷達幀頭協議說明---以Velodyne64爲例

首先說明幾個協議頭:

(1)14字節的EthernetHeader

typedef struct  _EthernetHeader {
        u_char DestMAC[ETHER_ADDR_LEN];       //目的MAC地址 6字節   
        u_char SourMAC[ETHER_ADDR_LEN];       //源MAC地址 6字節
        u_short EthType;                      //上一層協議類型,如0x0800代表上一層是IP協議,0x0806爲arp協議  2字節
    }  EthernetHeader

(2)20字節IPv4的協議頭

typedef struct _IpHeader{
    u_char  VerIhl;           // 版本4 + 首部長度4Version (4 bits) + Internet header length (4 bits)
    u_char  Tos;              // 服務類型Type of service
    u_short Tlen;             // 總長度Total length,包括IP20字節的頭
    u_short Identification;   // 標識Identification
    u_short FlagsFo;          // 標誌(4 bits)+片偏移(12 bits)Flags (3 bits) + Fragment offset (13 bits)
    u_char  Ttl;              // 生存時間Time to live
    u_char  Proto;            // 協議類型:TCP(6)、UDP(17)、ICMP(1)
    u_short Crc;              // 首部校驗和Header checksum
    u_char SourceIpAdd[4];    // 源地址Source address
    u_char DestIpAdd[4];      // 目標地址Destination address
}IPHeader;

(3)8字節UDP header

typedef struct _UDPHeader{
    u_short SrcPort;         // Source port
    u_short DestPort;        // Destination port
    u_short Len;             // Datagram length
    u_short Crc;             // Checksum
}UDPHeader;

velodyne64的一個幀頭的原始數據如下:
在這裏插入圖片描述

解析如下:
HDL 42字節幀頭(14+20+8,按照前面的三個協議幀頭排列,也可以參看HDL的參考手冊)

255 255 255 255 255 255
//FF FF FF FF FF FF
96 118 136 64 18 69
// 60 76 88 40 12 45 源MAC地址 6字節,見器件標籤
08 00
//0x0800代表上一層是IP協議

===========================
69
00
04 210
00 01
00 00
128
17

// UDP
177 138
192 168 1 64

//源地址
192 168 1 255
//目標地址
//以上爲IPv4的協議頭

==========================
1 187
9 64
4 190
0 0

//以上爲UDP的協議頭

激光雷達幀頭的一個主要作用是進行獲取幀的過濾,特別是在多個激光雷達的應用場景中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章