velodyne32C激光雷达解析

  1. 首先就是选择single return模式,这样你在解析时就按照single模式进行拆包
  2. 其次就是选择转速600 rev/min,这样你的分辨率就确定了(即在设置页面设置频率)
  3. single模式返回如图:
    velodyne32C激光雷达解析
    激光雷达的参数,Laser ID不是ringvelodyne32C激光雷达解析
    里面的数字是Laser_id
    velodyne32C激光雷达解析
    4.关于大端模式与小端模式:
struct FiringData
{
        uint16_t flag; //!< 0xFFEE or 0xFFDD
        uint16_t azimuth; //!< 比例因子 = 0.01deg
        DistanceIntensity points[32]; //!< 32个激光器的距离和光强值
};
struct ScanPacket
{
        //! 状态类型,仅对HDL-64E有效
        enum StatusType
        {
                HOURS = 72,
                MINUTES = 77,
                SECONDS = 83,
                DATE = 68,
                MONTH = 78,
                YEAR = 89,
                GPS_STATUS = 71,
                TEMPERATURE = 84,
                FIRMWARE_VERSION = 86,
        };

        FiringData firing_data_blocks[12]; //!< 每帧数据包含12次发射
        uint32_t timestamp; //!< 从当前小时开始,经历的微秒数,同步到GPS时间
        /** 返回模式
        * 0x37=最强回波, 0x38=最后一次回波, 0x39=两次回波
        */
        uint8_t factory_byte1;
        /** 设备类型
        * 0x21=HDL-32E, 0x22=VLP-16/Punk LITE, 0x24=Puck Hi-Res
        * 0x28=VLP-32C, 0x31=Velarray, 0xA1=VLS-128
        */
        uint8_t factory_byte2;
        uint8_t padding[2]; // 补丁字节,对齐用
};

memcpy(&scan_packets_[count], &data, 1206); // 读一个1206一次memcopy很重要 copy151次后  拿走去解析(memocopy共享指针给另一个线程
// 常见电脑是x86架构,因为激光雷达发过来小端格式,你可以直接Memory copy过去
// 要是大端格式读过来的数据不能直接Memory copy
// 比如小端格式存 unsigned int value = ox12345678
usigned char buf[4] ;
buf[3] = 12  buf[2] = 34 buf[1] =  56 buf[0] =  78(低地址存低字节)
// 所以 memcpy 从data[0]低地址中存的低字节开始 1206-> 给  scan_packets_[0]的低地址
//  即 scan_packets_[0]的低地址存低字节,那么
// azimuth = static_cast<float>(firing_data_block.azimuth); // 直接这样给值       
上一篇:一个关于双目运算符的测试


下一篇:I420(YUV420)格式转RGB24