hku-mars / LiDAR_IMU_Init

[IROS2022] Robust Real-time LiDAR-inertial Initialization Method.
GNU General Public License v2.0
803 stars 138 forks source link

[laserMapping-3] process has died #81

Closed neng-wang closed 10 months ago

neng-wang commented 10 months ago

作者,你好!今天我在ubuntu20.04上测试代码的时候发现报如下错误: [laserMapping-3] process has died [pid 309725, exit code -6, cmd /home/wangneng/mapping/LiDAR_IMU_Init/devel/lib/lidar_imu_init/li_init name:=laserMapping log:=/home/wangneng/.ros/log/9c904738-4d84-11ee-af27-63a6fd5491b2/laserMapping-3.log]. log file: /home/wangneng/.ros/log/9c904738-4d84-11ee-af27-63a6fd5491b2/laserMapping-3*.log 然后我设置Debug,发现代码输出以下信息: li_init: /usr/include/eigen3/Eigen/src/Core/Block.h:132: Eigen::Block<XprType, BlockRows, BlockCols, InnerPanel>::Block(XprType&, Eigen::Index, Eigen::Index) [with XprType = Eigen::Matrix<double, -1, -1>; int BlockRows = 3; int BlockCols = 3; bool InnerPanel = false; Eigen::Index = long int]: Assertion `startRow >= 0 && BlockRows >= 0 && startRow + BlockRows <= xpr.rows() && startCol >= 0 && BlockCols >= 0 && startCol + BlockCols <= xpr.cols()' failed. 貌似是在Eigen库断言的时候出现错误,我在ubuntu18.04上测试代码,编译设置为SET(CMAKE_BUILD_TYPE "Debug")时报同样错误,SET(CMAKE_BUILD_TYPE "Release")不报错。而在ubuntu20.04上无论是Debug还是Release都会报错。 这种错误你曾经遇到过吗?或者这种错误可能出现在哪里,有没有提供的方向,我们发现特别是长时间运行时会出现这种错误,可能算法在运行5~10分钟左右就会出现这种错误,我们使用的是robosense 5515雷达,因为一些原因,我们把它转换成velodyne格式进行测试。所以使用的是velodyne.launch

neng-wang commented 10 months ago

今天测试发现是Jacobian_rot矩阵越界,frame_num一直是累加的,而Jacobian_rot定义在这里,是有大小的,最大为30000,因此当frame_num累加到10000时,就会数组越界,产生上面的错误。

zfc-zfc commented 10 months ago

是的,我设置了一个上限用以避免内存消耗过大。正常情况下这个上限是足够用于收集标定数据的,如果10000个数据都无法满足激励要求,说明需要改变激励方式。

neng-wang commented 10 months ago

确实,对于标定来说,10000个数据完全足够了。但是标定完成后,直接继续运行建图算法。好像一段时间也会导致同样的问题,这个有想过做一些设计吗?

zfc-zfc commented 10 months ago

确实,对于标定来说,10000个数据完全足够了。但是标定完成后,直接继续运行建图算法。好像一段时间也会导致同样的问题,这个有想过做一些设计吗?

这很简单:在标定完成后就把buffer清空,不要再往里面放数据就好了。这是一个标定算法,原本的设计是用户得到需要的外参、时差之后就结束,然后用得到的外参、时差去运行其他SLAM算法。

zfc-zfc commented 10 months ago

确实,对于标定来说,10000个数据完全足够了。但是标定完成后,直接继续运行建图算法。好像一段时间也会导致同样的问题,这个有想过做一些设计吗?

我看了一下代码,数据收集完成之后,Jaco_rot这个变量不会再被使用。所以标定完成后,直接继续运行建图算法,应该不会因为Jaco_rot越界导致程序崩溃。

neng-wang commented 10 months ago

好的,感谢你的回答。另外一个问题,我发现标定完之后使用标定参数运行Fast_LIO,建图效果没有直接运行标定算法好,然后我发现之前有人提过相关问题,issue#39。我尝试运行了这个issue中的rosbag,但是获得的外参和你们标定出来的不一样,可以分享一份你们的标定参数吗?我直接把你们标定后的参数用到Fast_LIO上发现效果也不好,直接会飘。如下图:是因为这个时间差和处理机器有关吗? 1

zfc-zfc commented 10 months ago

出来

image 这是我用#39中的参数运行的结果。mapping_velodyne.launch中的参数你改了吗?

neng-wang commented 10 months ago

原来如此,非常感谢你耐心的回答,现在我得到了和你一样的结果。再次感谢!