Gutsgwh1997
Gutsgwh1997
在Camera类的构造函数中默认初始化了,Config类通过.yaml文件得到的参数。
> 多点几次初始化 是我IMU激励不够,鼠标点烂了也不行呀
对的是transform[]的旋转项。 这里我将负号理解成一个近似的坐标转换(差了一个旋转吧),不是做差是同一坐标系下做和。同时我觉得将PluginIMURotation()函数移动到平移分量更新之前更妥当。
激光雷达的坐标系和IMU坐标系跟KITTI中的方向一致
从代码里边看,lego-loam没用到IMU和Lidar之间的外参,Lidar和IMU有点要求: 1. IMU频率必须大于Lidar频率,IMU必须可以直接提供orientation; 2. IMU和Lidar的坐标系和KITTI数据集中的保持一致; 3. Lidar的时间戳是在一帧点云的起始点处;(不使用IMU,Lidar时间戳可以不满足这个要求) 如果不修改原代码,你要保证这几条,另外我现在手里没有硬件,没有测试过。
我说的一致是指Lidar与IMU坐标系的朝向相同,featureAssociation.cpp中的void imuHandler()函数与 void adjustDistortion()函数可以说明。lego-loam使用body系下的位移、转角去补偿Lidar系下的位移,外参中的平移较大时不太准确。
是我的问题,没有注意到函数体中的第一句代码。我运行时候出现(Assertion `cloud.points.size() == cloud.width * cloud.height` failed)错误,问题出现在去畸变后的cloud_pub_ptr_->Publish(),我将此函数的参数改为常引用了。
这个工具使用的是有序点云,pointCloud->width != 1
数据需要处理的,根据每个点的仰角将点分配到对应的ring,可以参照loam里那段代码
原代码确实可以载入poitncloud2类型的点云,若你的点云是有序的可直接使用,否则还是需要转换的,这个方法对点云的格式(是否有序,时间戳等还是有些要求的)。 https://github.com/Gutsgwh1997/lidar_IMU_calib/blob/55e74fa0b71475901e4d4bdc59639ada0196a182/include/utils/vlp_common.h#L192