速腾雷达个人使用总结

目录

官网

官网资源

选择雷达

数据采集

RSView

版本

开源数据包分析工具

下载地址

使用教程

各种坑

Points_m_XYZ:0与Point_X

timestamp 时间戳

distance 距离

azimuth 角度

sdk

驱动内核rs_driver

下载地址

个人不喜欢文档的点

​编辑

各种坑

运行结果

​编辑

pcap转pcd时间戳的问题

遇到的一些问题

虚拟机连接雷达

使用驱动内核保存pcd文件

驱动内核cmakelist配置

个人整体总结


官网

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 · Download

使用教程

网络分析工具——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库,觉得比较麻烦。整体没有什么太难的,按照流程配置环境和运行就能起来。

下载地址

GitHub - RoboSense-LiDAR/rs_driver: RoboSense LiDAR cross-platform driver kernel for advanced development

个人不喜欢文档的点

个人可能是做算法的,对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文件的时间戳问题,能运行但是不严谨。

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值