Clothooo / lvt2calib

A unified calibration for 3D LiDARs, visual cameras and thermal cameras
126 stars 13 forks source link

速腾RS-Helios 32线雷达检测不到点云 #11

Open wang6342 opened 3 months ago

wang6342 commented 3 months ago

您好! 又得麻烦一下,想请教个问题,看能帮忙看一下吗

在适配速腾32线激光雷达时,我利用rs_to_velodyne将速腾32线转为velodyne格式,直接用vel_32格式雷达运行代码,遇到检测不到点云模板 都是激光雷达和红外相机标定,其他终端都没有问题 1.我将转换后的雷达格式改为XYZIRT,在检测点云的终端遇到了下面报错,直接挂了 Screenshot from 2024-03-08 17-04-33 2.然后我将雷达格式改为XYZI,不出现上述报错,但是调整了i_filter_out_max、cluster_size_min、rmse_ukn2tpl_thre' and 'rmse_tpl2ukn_thre'都无法解决 Screenshot from 2024-03-08 17-24-44

3.上述两个错误都存在咱们这个项目需要匹配"ring"和"range"参数吗 雷达数据格式 见下图 Screenshot from 2024-03-08 17-51-35 Screenshot from 2024-03-08 17-52-15

下面是我测试用的三个数据,80fov.bag是激光雷达只有80度视角,XYZIRT.bag是XYZIRT格式的雷达数据,XYZI.bag是XYZI格式的雷达数据 链接: https://pan.baidu.com/s/1_Ouz7qn_lZRsvYBd3a1fpA?pwd=ui72 提取码: ui72

Clothooo commented 3 months ago

您好,近期我们自己在rs系列的雷达上测试也遇到了相似bug,正在尝试debug解决中,会尽快更新,感谢您的反馈。

wang6342 commented 3 months ago

您好! 又得麻烦一下,想请教个问题,看能帮忙看一下吗

在适配速腾32线激光雷达时,我利用rs_to_velodyne将速腾32线转为velodyne格式,直接用vel_32格式雷达运行代码,遇到检测不到点云模板 都是激光雷达和红外相机标定,其他终端都没有问题 1.我将转换后的雷达格式改为XYZIRT,在检测点云的终端遇到了下面报错,直接挂了 Screenshot from 2024-03-08 17-04-33 2.然后我将雷达格式改为XYZI,不出现上述报错,但是调整了i_filter_out_max、cluster_size_min、rmse_ukn2tpl_thre' and 'rmse_tpl2ukn_thre'都无法解决 Screenshot from 2024-03-08 17-24-44

3.上述两个错误都存在咱们这个项目需要匹配"ring"和"range"参数吗 雷达数据格式 见下图 Screenshot from 2024-03-08 17-51-35 Screenshot from 2024-03-08 17-52-15

下面是我测试用的三个数据,80fov.bag是激光雷达只有80度视角,XYZIRT.bag是XYZIRT格式的雷达数据,XYZI.bag是XYZI格式的雷达数据 链接: (80fov数据有点问题,我重新传了下) 链接: https://pan.baidu.com/s/1UKJUhrq8jDAay1NspUby9A?pwd=eby4 提取码: eby4

我今天重新测试了下,用XYZI那个360度数据,将i_filter_out_max设为20,rviz中fixed frame设为velodyne,点云检测到了,但是可能我速腾雷达的输出方式(外面更密),安装位置有点低,下面的圆检测不完整,我下周再去测试下,报"too many outliers,not computing circles",您这边有什么调参建议 Screenshot from 2024-03-09 16-18-17 Screenshot from 2024-03-09 16-18-29 Screenshot from 2024-03-09 16-20-08 Screenshot from 2024-03-09 16-21-20

刚调试出来点结果,您给回复啦,感谢交流。

Clothooo commented 3 months ago

Waring: Failed to find match for field 'ring' 表示您的输入点云里没有ring这个属性,但我们的算法用于重复式扫描雷达时,'ring'是必须的属性。在没有'ring'的情况下,算法应该是默认所有的扫描线都属于同一条ring了,因此无法检测出circle。

Clothooo commented 3 months ago

另,range并不是输入点云必须的属性,只是用来便于存放计算中间量的

wang6342 commented 3 months ago

您好 我这两天也在研究,刚才也反复测试了一下,目前遇到以下几个问题: 1.我采用rs_to_velodyne将速腾RSHELIOS雷达(32线)转为velodyne格式,带ring数据,我也同时在结构体定义了个range类型。在运行标定程序开始,不报不匹配ring和range数据,也能检测到4个圆孔了,但在开始采集数据时候,报不匹配ring和range数据,同时报 too many outliers,not computing circles 和 not enough centers :0 或者1,如下图所示 ![Screenshot from 2024-03-14 10-26-52](https://github.com/Clothooo/lvt2calib/assets/49356538/60a0adaa-850c-4026-aa95-e Screenshot from 2024-03-14 10-26-29 966ed553964) 2.我修改了您标定代码,主要将订阅话题和fixed_frame改为了速腾雷达的形式,直接采用原始速腾雷达数据作为输入,将'rmse_ukn2tpl_thre' and 'rmse_tpl2ukn_thre'两个参数设为0.05成功检测到了circle,但是遇到了收集不到点云数据的问题,见下图所示: Screenshot from 2024-03-14 15-36-36 Screenshot from 2024-03-14 15-35-55 Screenshot from 2024-03-14 15-36-58 3.我有个想法是,在rs_to_velodyne转发发送数据时候,将range数据定义了,提前设置好范围,进而后面和标定程序匹配? Screenshot from 2024-03-14 15-49-31

下面是我的数据 rs_32里面:velodyne.bag为用rs_to_velodyne转成速腾雷达的bag,rslidar为原始速腾雷达bag rs_driver_src为我采用的rs_to_velodyne和速腾雷达驱动 rs_src为我直接采用速腾原始数据修改后的代码,nameplace仍然用的是velo_32,见下图 Screenshot from 2024-03-14 16-02-47

wang6342 commented 3 months ago

Screenshot from 2024-03-14 10-26-52 第一个数据没传上去,我重新传了下

Clothooo commented 3 months ago

您好 我这两天也在研究,刚才也反复测试了一下,目前遇到以下几个问题: 1.我采用rs_to_velodyne将速腾RSHELIOS雷达(32线)转为velodyne格式,带ring数据,我也同时在结构体定义了个range类型。在运行标定程序开始,不报不匹配ring和range数据,也能检测到4个圆孔了,但在开始采集数据时候,报不匹配ring和range数据,同时报 too many outliers,not computing circles 和 not enough centers :0 或者1,如下图所示 ![Screenshot from 2024-03-14 10-26-52](https://github.com/Clothooo/lvt2calib/assets/49356538/60a0adaa-850c-4026-aa95-e Screenshot from 2024-03-14 10-26-29 966ed553964) 2.我修改了您标定代码,主要将订阅话题和fixed_frame改为了速腾雷达的形式,直接采用原始速腾雷达数据作为输入,将'rmse_ukn2tpl_thre' and 'rmse_tpl2ukn_thre'两个参数设为0.05成功检测到了circle,但是遇到了收集不到点云数据的问题,见下图所示: Screenshot from 2024-03-14 15-36-36 Screenshot from 2024-03-14 15-35-55 Screenshot from 2024-03-14 15-36-58 3.我有个想法是,在rs_to_velodyne转发发送数据时候,将range数据定义了,提前设置好范围,进而后面和标定程序匹配? Screenshot from 2024-03-14 15-49-31

下面是我的数据 rs_32里面:velodyne.bag为用rs_to_velodyne转成速腾雷达的bag,rslidar为原始速腾雷达bag rs_driver_src为我采用的rs_to_velodyne和速腾雷达驱动 rs_src为我直接采用速腾原始数据修改后的代码,nameplace仍然用的是velo_32,见下图 Screenshot from 2024-03-14 16-02-47

从1和2的rviz里面可以明显看到是圆环点全部检测错了(中间那堆彩色点) 关于3:按理说来输入点云里range是否定义和赋值,对于我们的检测算法没有影响,因为算法里会自己计算一次range并赋值 目前我们自己测试出来的发现是,robosense原有的intensity类型为uint_8t,rs_to_velodyne中定义的velodyne点云的intensity类型也为unit_8t,我们算法中是按照velodyne官方的定义将intensity定义为float类型。intensity也是算法中用于存储中间值的变量。rviz观察计算重置intensity后的点云表现异常。猜测是在uint_8t和float两种类型混用转换的过程中出现了bug。

wang6342 commented 3 months ago

不好意思,数据忘记传,看帮忙看看或者有什么调参建议 链接: https://pan.baidu.com/s/1SHSsgFLRYiKoTkmbCz71sQ?pwd=zpny 提取码: zpny

wang6342 commented 3 months ago

您好 我这两天也在研究,刚才也反复测试了一下,目前遇到以下几个问题: 1.我采用rs_to_velodyne将速腾RSHELIOS雷达(32线)转为velodyne格式,带ring数据,我也同时在结构体定义了个range类型。在运行标定程序开始,不报不匹配ring和range数据,也能检测到4个圆孔了,但在开始采集数据时候,报不匹配ring和range数据,同时报 too many outliers,not computing circles 和 not enough centers :0 或者1,如下图所示 ![Screenshot from 2024-03-14 10-26-52](https://github.com/Clothooo/lvt2calib/assets/49356538/60a0adaa-850c-4026-aa95-e Screenshot from 2024-03-14 10-26-29 966ed553964) 2.我修改了您标定代码,主要将订阅话题和fixed_frame改为了速腾雷达的形式,直接采用原始速腾雷达数据作为输入,将'rmse_ukn2tpl_thre' and 'rmse_tpl2ukn_thre'两个参数设为0.05成功检测到了circle,但是遇到了收集不到点云数据的问题,见下图所示: Screenshot from 2024-03-14 15-36-36 Screenshot from 2024-03-14 15-35-55 Screenshot from 2024-03-14 15-36-58 3.我有个想法是,在rs_to_velodyne转发发送数据时候,将range数据定义了,提前设置好范围,进而后面和标定程序匹配? Screenshot from 2024-03-14 15-49-31 下面是我的数据 rs_32里面:velodyne.bag为用rs_to_velodyne转成速腾雷达的bag,rslidar为原始速腾雷达bag rs_driver_src为我采用的rs_to_velodyne和速腾雷达驱动 rs_src为我直接采用速腾原始数据修改后的代码,nameplace仍然用的是velo_32,见下图 Screenshot from 2024-03-14 16-02-47

从1和2的rviz里面可以明显看到是圆环点全部检测错了(中间那堆彩色点) 关于3:按理说来输入点云里range是否定义和赋值,对于我们的检测算法没有影响,因为算法里会自己计算一次range并赋值 目前我们自己测试出来的发现是,robosense原有的intensity类型为uint_8t,rs_to_velodyne中定义的velodyne点云的intensity类型也为unit_8t,我们算法中是按照velodyne官方的定义将intensity定义为float类型。intensity也是算法中用于存储中间值的变量。rviz观察计算重置intensity后的点云表现异常。猜测是在uint_8t和float两种类型混用转换的过程中出现了bug。

这个intensity类型也关注到了,我也全改为了float,rs_to_velodyne也改为float类型,您之前velodyne 16线没遇到类似的问题吗

Clothooo commented 3 months ago

velodyne并没有遇到过类似问题

wang6342 commented 3 months ago

velodyne并没有遇到过类似问题 我里面有单纯速腾雷达的数据,看有时间能帮忙看一下吗。这个是速腾原始定义,也都改为了float类型,用的是XYZIRT的数据,带ring

Clothooo commented 3 months ago

您好,我已经查看过您的数据,分析如下:

  1. velodyne.bag我这边是能显示可以成功检测到标定板的。
  2. rslidar.bag的数据我通过自己编辑过的rs_to_velodyne也是可以成功检测到标定板的。
  3. 您编辑过的rs_to_velodyne.cpp中,建议将38行的(uint8_t, intensity, intensity)改为(float, intensity, intensity)与前面定义的PCL_ADD_INTENSITY(是float类型)保持一致。
  4. 关于无法检测到圆心:使用的标定板是更改过尺寸的吗?圆环相关的尺寸是否也和我们提供的默认尺寸不一样?如果是的话,请更改相应的参数circle_radius、centroid_distance_min、centroid_distance_max,在velodyne_pattern.launch中。显示too many outliers,not computing circles是因为这个原因。此外,观察到您提供的数据里,标定板距离背景墙太近,robosense的点云在孔洞出出现了非常明显的变形,噪声很大,建议改善标定环境和条件。 image
wang6342 commented 3 months ago

您好,我已经查看过您的数据,分析如下:

  1. velodyne.bag我这边是能显示可以成功检测到标定板的。
  2. rslidar.bag的数据我通过自己编辑过的rs_to_velodyne也是可以成功检测到标定板的。
  3. 您编辑过的rs_to_velodyne.cpp中,建议将38行的(uint8_t, intensity, intensity)改为(float, intensity, intensity)与前面定义的PCL_ADD_INTENSITY(是float类型)保持一致。
  4. 关于无法检测到圆心:使用的标定板是更改过尺寸的吗?圆环相关的尺寸是否也和我们提供的默认尺寸不一样?如果是的话,请更改相应的参数circle_radius、centroid_distance_min、centroid_distance_max,在velodynepattern.launch中。显示too many outliers,not computing circles是因为这个原因。此外,观察到您提供的数据里,标定板距离背景墙太近,robosense的点云在孔洞出出现了非常明显的变形,噪声很大,建议改善标定环境和条件。 ![image](https://private-user-images.githubusercontent.com/31653202/313165441-3cce60f0-b949-40c8-b121-57ef79e40530.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTA1MDE2MTUsIm5iZiI6MTcxMDUwMTMxNSwicGF0aCI6Ii8zMTY1MzIwMi8zMTMxNjU0NDEtM2NjZTYwZjAtYjk0OS00MGM4LWIxMjEtNTdlZjc5ZTQwNTMwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAzMTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMzE1VDExMTUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZmYTBjYWY4OWUzMmE1M2I5ZGViYTYxM2FlNmNiYmFjZDMwMTIxNDEwYTBjN2Q0YjY3YjE1M2ZkMWEyZWJhNTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.9NvhgL0p10KMTJhYj2BmFZRz5EImjBW9ozQlAb-4G4)

感谢帮忙! 1.我今天也去关注了您之前提到了类型转换bug问题,您提到的38行,我再去测试一下 2.您意思像下图这样,我在rviz将fixed_frame改为velodyne形式(看您rviz配置文件里面,没有设置fixed_frame,以为是设为velo_32,有彩色带强度的点云才是正确的),可以显示下图检测到全是红色四孔标定板点云,说明已经检测到了标定板,对吧?只是是因为标定环境和距离问题,导致中间明显变形和噪声,我着力解决这个问题就行。 Screenshot from 2024-03-14 10-26-29

3.标定板更改了长度,长度为1000mm,其他都没变化,不过我的圆孔直径误差有3mm左右,这个加热贴精度不高。

Clothooo commented 3 months ago

回复2:是的,标定板成功检测了,圆环检测不成功 回复3:可以尝试适当地把圆环相关的阈值给放松一些

wang6342 commented 3 months ago

回复2:是的,标定板成功检测了,圆环检测不成功 回复3:可以尝试适当地把圆环相关的阈值给放松一些

好的,谢啦,我再去调试一下

wang6342 commented 2 months ago

回复2:是的,标定板成功检测了,圆环检测不成功 回复3:可以尝试适当地把圆环相关的阈值给放松一些

您好 速腾32线雷达已经解决啦,是您提出的解决方式,分享一下,给大家参考吧。 1.在rs_to_velodyne转换包中,将速腾和velo雷达的intensity都设定为float类型,不要采用velo的宏定义,再之速腾雷达的SDK类型定义不要改,它其实已经改为了float类型。

  1. 就是您提到的噪声问题,标定板中心噪声太大,导致无法完整的检测到圆。
  2. 还有想请教一下,就是关于标定板4个圆的检测阈值,主要调节哪几个参数,大概参数含义是什么,在参数描述里面没有找到。例如angle_threshold、edge_depth_thre、edge_knn_radius是代表什么意思。

Screenshot from 2024-04-10 15-25-05 Screenshot from 2024-04-03 17-22-12