激光雷达帧头协议说明---以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的协议头

激光雷达帧头的一个主要作用是进行获取帧的过滤,特别是在多个激光雷达的应用场景中。

发布了37 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xu_fengyu/article/details/90679729
今日推荐