关于大疆雷达的通讯问题
这部分比较主要,因为当时卡在这个问题上了好久,主要问题是大疆雷达在rviz实时显示的时候,livox/lidar这个topic的数据其实是很全的,但是我在转发的时候(单纯的转发,没做任何处理操作),这个时候就发现,我转发的数据会丢失,效果图如下:
彩色的部分是/livox/lidar原话题的数据,白色的是我直接转发的数据,但是发现有的时候有个雷达的数据没有,而且是闪烁性的,随机性的.不是真完整的源数据,花了好长时间在搞这个问题,为了方便转发过程,写的是简单的代码,如下:
point_date_sub = n.subscribe("/livox/lidar", , &callback);
raw_point_pub = n.advertise<sensor_msgs::PointCloud2>("/raw_Point", 1);
因为我们在平时对回调函数处理的时候都是将回调函数的队列长度设置为1,这样才能处理队列缓存中最新的消息.所以开始我也是按照这么处理的,但是实际上确实产生了数据丢失的问题,我查看了下/livo/lidar和我转发的数据的topic的频率,如下:
上面的图是我转发数据topic的p频率,大约26,下面的是源数据的topic,大约30,从图上我们可以看出其实数据是有丢失的,所以才产生了最开始图的现象,期间尝试了好多方法都不可以.最终尝试了种种方法,与大疆的工程师也做了沟通,最后将队列缓存区域的长度改为>3的情况,就会好很多,如下:
point_date_sub = n.subscribe("/livox/lidar", 3, &callback);
raw_point_pub = n.advertise<sensor_msgs::PointCloud2>("/raw_Point", 3);
设置完之后我们在运行一下程序,效果图如下:
频率基本保持一致.
实际输出的图也几乎是一直的,到此这个问题暂时解决了.