目录
官网
RoboSense | World Leader in LiDAR and Perception Solutions
官网资源
产品介绍:没啥用
产品手册:介绍了雷达如何安装、使用,使用上主要是软件RSView跟SDK没啥关系
3D数模文件:没用过
软件:RSView,可以实时看雷达数据,可以将pcap文件转成pcd文件,不可以实时保存雷达数据,点云的效果有强度比大多数点云查看工具的好一些,雷达数据有一堆坑(csv文件查看)。
SDK:后续的开发全靠这个,其他的白扯
选择雷达
款式
Helios 32:26°垂直视场角
原因
雷达选择这个位置,主要还是根据项目对雷达使用场景的一个定义吧
通过比较主流的一些雷达产品,像速腾聚创、禾赛、大疆、华为等,速腾聚创和禾赛的产品更符合我们的需求。最后通过计算确认(Helios 32:26°垂直视场角)这款雷达能够在水平距离雷达30米远的位置,站有一个1.8米的人身上打更多的点,因此选择了这一款。
数据采集
建议使用sdk,然后对sdk中的代码进行更改(sdk),将点云数据保存到本地。
不要使用开源数据包分析工具获取雷达数据,原因是速腾雷达官方提供的可视化工具RSView维护并不好,完全没有办法在此的基础上进行后续的开发。详细见坑
RSView
速腾雷达厂家提供的RSView,这个工具具备pcap转雷达数据的功能和实时读取雷达数据的功能,但是它不具备实时保存数据的功能。
因此使用手册上给出的拉取数据程是使用Wireshark工具生成pcap文件,然后使用RSView工具生成pcd文件或者是其他类型的雷达文件
针对这个工具的各种坑与雷达厂商的工作人员对应过,得到的答复是让我使用sdk,他去问问,然后就没有结果了
挺坑的,这个是官方使用手册上给出的教程,最后有输出结果但是不准确,你要是只想看看雷达的效果是可以的
版本
RSView4.3.12
设置
在线读取雷达的时候需要配置好你的网络,读取pcap时,直接默认就行
两种功能都需要配置好你的雷达款式
开源数据包分析工具
Wireshark-4.2.3-x64.exe
下载地址
使用教程
网络分析工具——WireShark的使用(超详细)-CSDN博客
设置
需要注意的就这两个位置吧,一个是设置里Input一定要选好网络,我使用的时候是以太网一,第二个是输出这个位置一定要定义好文件名,一定要加后缀
各种坑
使用RSView工具将pcap文件转成csv文件查看结果
这些坑应该只存在于pcap文件转csv文件中,pcd格式文件无法保存这些信息
Points_m_XYZ:0与Point_X
这个位置我怀疑是一次回波和二次回波的结果,与速腾厂家的工作人员对应并没有得到肯定的答复
timestamp 时间戳
能够明显看出RSView输出结果的时间戳明显是有问题的,原因应该是雷达这个设备是不能实时获取时间戳的
因此只能设置一个开机时间戳作为初始时间戳,雷达预设的初始时间戳时间是2017-01-01 08:00:00,由此得到如上的时间戳
distance 距离
可以仔细看一下这个距离,你会发现这个距离比点坐标Point_X小,斜边大于直角边应该是常识,与雷达厂商对应了也没有得到肯定的答复
azimuth 水平旋转角
这个位置问题更大,按照官方给出的手册可以看出,水平视场角的最大取值氛围应该在0-3600(360/0.1)之间,个人选择的是帧率10Hz,也就是应该在0-1800之间或者在-900-900之间
但是从结果上可以看出,这个位置不但有负值,而且还有大于36000的值,与速腾工作人员沟通,给出的结果是这个位置取值范围应该是0-36000度,至于这个位置为啥有负值,还有大于36000的值他也不知道
ring与orig_ring
sdk
其实官方给出的sdk使用的一个标准流程是雷达端采集数据,然后驱动内核rs_driver获取雷达数据并将其发送给ROS端,在ROS端进行一些列的操作。个人做自驾不使用ROS端,因此只使用了驱动内核rs_driver
文档比较多
驱动内核rs_driver
这个位置文档也很多,个人在ubuntu18.04上配置的环境,虚拟机和双系统都配了,个人不是很喜欢在windows下配置PCL、eigens库,觉得比较麻烦。整体没有什么太难的,按照流程配置环境和运行就能起来。
下载地址
个人不喜欢文档的点
个人可能是做算法的,对C代码的文档不太了解,大多数情况调的代码都是github上的那种,因此不太喜欢官方写文档的风格,流程上没介绍多少,列了一堆的代码。github上的python工程都会有如何运行的教程,教程里不会教你代码是啥,只会简单的告诉你如何将代码运行起来。
各种坑
运行结果
按照教程将工程运行起来之后(文档里到这里就结束了),个人理解应该有保存雷达的数据,类似pcd的文件,但是并没有。原因就像个人在sdk一开始说的,驱动内核rs_driver标准的流程是将雷达数据拉取下来然后发给ROS。因此如果你想要保存pcd文件需要自己写代码
pcap转pcd时间戳的问题
个人理解,你将pcap文件转为pcd文件,保存的时间戳应该是你存pcap文件的时间戳而不是实时的时间戳。官方提供的demo_pcap.cpp文件中没有关于这个位置代码,因此转换出来的文件时间戳是实时的时间戳。我通过查找驱动内核的代码,发现这个位置其实是可以通过设置进行更改的,如下。
怎么说呢,就是主线任务是拉取雷达数据,然后发给ROS,这一块我做完了,辅线pcap文件转pcd文件功能也有。功能做完之后我也不用,我也不测,因此不严谨。
总结
有详细比较过使用RSView工具将pcap文件转成pcd文件得到的结果和使用sdk将pcap文件转成pcd文件得到的结果,发现两者结果是一样的。
无法进行实时的结果比较,不保存下来看不出来区别,保存下来时间戳没有办法对齐
遇到的一些问题
虚拟机连接雷达
管理->虚拟机设置->网络适配器->网络连接->桥接模式
然后更改虚拟机的IP地址,使其与雷达处于同一网段,如果能ping通IP(192.168.1.200,雷达默认是这个)就能连,更改完IP地址之后别忘了更新一下。
使用驱动内核保存pcd文件
这个位置有个问题就是保存pcd文件一定要保存Binary格式,不能保存ASCII格式。保存ASCII格式存储时间比较长有可能造成延迟,造成你存储文件的时间比雷达读取数据的时间长。时间久了这样你的堆栈会爆掉的。因此单独写了个函数doSave从线程中拿了出来。
#include <pcl/io/pcd_io.h> //PCD读写类相关的头文件
#include <pcl/point_types.h> //PCL中支持的点类型的头文件
......
void doSave(std::shared_ptr<PointCloudMsg> msg)
{
std::cout << " point cloud frame_id: " << msg->frame_id << std::endl;
std::cout << " point cloud timestamp: " << msg->timestamp << std::endl;
pcl::PointCloud<pcl::PointXYZI> cloud;
// 创建点云 并设置适当的参数(width height is_dense)
cloud.width = msg->width;
cloud.height = msg->height;
cloud.is_dense = msg->is_dense; // 不是稠密型的
cloud.points.resize(cloud.width * cloud.height); // 点云总数大小
// 用随机数的值填充PointCloud点云对象
for (size_t i = 0; i < cloud.points.size(); ++i)
{
cloud.points[i].x = msg->points[i].x;
cloud.points[i].y = msg->points[i].y;
cloud.points[i].z = msg->points[i].z;
cloud.points[i].intensity = msg->points[i].intensity;
}
std::string save_name = "../timestamp_" + std::to_string(msg->timestamp) + ".pcd";
//pcl::io::savePCDFileASCII(save_name , cloud);
pcl::io::savePCDFileBinary(save_name , cloud);
}
void processCloud(void)
{
while (!to_exit_process)
{
......
RS_MSG << "msg: " << msg->seq << " point cloud size: " << msg->points.size() << RS_REND;
doSave(msg);
#if 0
......
#endif
free_cloud_queue.push(msg);
}
}
驱动内核cmakelist配置
在头文件中加入了pcl文件的头,因此cmakelist中一定要连接pcl的lib:
target_link_libraries(rs_driver_demos ..... ${PCL_LIBRARIES})
cmake_minimum_required(VERSION 3.5) project(rs_driver_demos) message(=============================================================) message("-- Ready to compile demos") message(=============================================================) find_package(PCL REQUIRED) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS}) include_directories(${DRIVER_INCLUDE_DIRS}) find_package(rs_driver REQUIRED) include_directories(${rs_driver_INCLUDE_DIRS}) add_executable(rs_driver_demos demo_pcap.cpp) target_link_libraries(rs_driver_demos ${EXTERNAL_LIBS} ${PCL_LIBRARIES}) find_package(rs_driver REQUIRED) include_directories(${rs_driver_INCLUDE_DIRS} ${rs_driver_LIBRARIES} )
个人整体评价
感觉这个雷达做的还是挺不错的,主线任务做的挺好,像是SDK到ROS,但是一些辅线任务做的就不太好了,像是RSView工具的结果异常,像是驱动内核rs_driver的pcap文件转pcd文件的时间戳问题,能运行但是不严谨。