本文主要是介绍基于VeloView测试自己的激光雷达样机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作者:ShownSun
公众号:时沿科技
文章目录
- 基于VeloView测试自己的激光雷达样机
- 前言
- 样例产品
- 数据格式
- FPGA代码
- ARM代码
- 测试
基于VeloView测试自己的激光雷达样机
前言
VeloView软件是Velodyne激光雷达厂商与Paraview合作设计的用于Velodyne产品的开源产品,该软件可以通过github或者Paraview官方网站下载获取。目前Velodyne的产品包括Alpha Prime、Ultra Puck、Puck、Puck LITE、Puck Hi-Res、HDL-32E等系列产品,这些产品应用于不同的应用场景,包括无人机、无人机汽车、农业机械和地面无人系统等。
样例产品
Velodyne不同的产品都是用相同的VeloView软件显示3D场景信息,对于用户来说唯一不同的就是xml文件的不同,只要设计好对应的xml文件即可使用。
如果想要为自己的激光雷达产品应用VeloView来进行一些前期的开发工作,比如测试相关产品的性能、稳定性、成像质量等,那么成熟的VeloView开源软件是一个不错的选择。
例如:有一款雷达使用一个激光发射机、一个激光接收机,扫描方式为矩形扫描64(像素点)x 180(像素点),先俯仰向扫描60个像素点,在方位向往上移动1个像素点,那么可以选择Velodyne的64线激光雷达产品协议进行数据传输。如果自己的雷达俯仰上不是64个像素点,那么只需要将对应像素点距离、强度数据置零即可。
数据格式
关于Velodynw 64线激光雷达数据传输协议之前介绍过,不了解的可翻阅查看。这里只针对上一段的一个激光发射机、一个激光接收机,扫描方式为矩形扫描64(像素点)x 180(像素点),先俯仰向扫描60个像素点,在方位向往上移动1个像素点的雷达进行数据格式的转换,使其适用于Velodynw 64线激光雷达数据传输协议。如果自己的雷达俯仰上不是64个像素点,那么只需要将对应像素点距离、强度数据置零即可。
首先正如之前文章介绍过的,只需要修改xml文件。而且这种一发一收的更加简单,只需要更改每个像素点的俯仰角度即可。如果俯仰角度范围为20°,且都在雷达水平视线之上,那么从下往上角度依次为-10°、-9.69°、-9.37°…共计64个角度。
然后就是传输的数据格式,因为像素矩阵为64(像素点)x 180(像素点),所以upper与lower数据段都设计为32个像素点(关于upper和lower见上一篇文章的Velodyne 64线激光雷达协议)。如果自己的雷达俯仰上不是64个像素点,那么只需要将对应像素点距离、强度数据置零即可。Upper对应上面32个激光器,用0xEEFF表示,lower对应下面32个激光器,用0xDDFF表示。此外,方位角的设置同upper、lower一样在包头中设置。一个UDP数据包传输12个upper和lower像素点数据,详细的数据包字节见下图。
FPGA代码
这里只是使用ZYNQ的ARM端仿真数据进行UDP数据的传输测试,所以并没有将FPGA端处理后的雷达距离、强度数据与ARM端进行通信。需要的话,只要使用AXI4进行连接即可。下图为ZYNQ的信号处理IP核,里面配置了DDR与网口串口等模块。
ARM代码
在ARM端按照数据传输协议设计仿真数据。
static u16 packet_cnt = 0;
static u16 azimuth_cnt = 0;
static u16 azimuth_val = 0;
static u8 distance_cnt = 0;
void packet_data_update(void)
{u32_t i;for (i = 0; i < UDP_SEND_BUFSIZE; i++)send_buf[i] = distance_cnt;for (i = 0; i < UDP_SEND_BUFSIZE; i=i+100){send_buf[i] = 0xff;send_buf[i+1] = 0xee;}for (i = 600; i < UDP_SEND_BUFSIZE; i=i+100){send_buf[i] = 0xff;send_buf[i+1] = 0xdd;}azimuth_val = packet_cnt + azimuth_cnt * 0x07ff;for (i = 2; i < UDP_SEND_BUFSIZE; i=i+100){send_buf[i] = 0x22;send_buf[i+1] = 0x22;}send_buf[UDP_SEND_BUFSIZE - 6] = 0x00;send_buf[UDP_SEND_BUFSIZE - 5] = 0x00;send_buf[UDP_SEND_BUFSIZE - 4] = 0x00;send_buf[UDP_SEND_BUFSIZE - 3] = 0x00;send_buf[UDP_SEND_BUFSIZE - 2] = 0x37;send_buf[UDP_SEND_BUFSIZE - 1] = 0xa0;packet_cnt = packet_cnt + 0x000f;if(packet_cnt >= 0x2327){packet_cnt = 0;distance_cnt++;if(distance_cnt >= 255){distance_cnt = 0;azimuth_cnt++;if(azimuth_cnt >= 255)azimuth_cnt = 0;}}
}
测试
关于数据的正确性验证可以通过wireshark软件抓取数据包分析即可。网上关于wireshark使用的文章很多,不做赘述。
下面是VeloView实时采集的测试数据,显示了矩形像素图像随着初始方位角度的变化不断变化的过程。
这篇关于基于VeloView测试自己的激光雷达样机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!