Lidar_IMU_Localization icon indicating copy to clipboard operation
Lidar_IMU_Localization copied to clipboard

WINDOWSIZE,SLIDEWINDOWSIZE意义

Open iglstone opened this issue 1 year ago • 8 comments

如果我不用local map,初始化WINDOWSIZE = 1; //if IMU success initialized WINDOWSIZE = SLIDEWINDOWSIZE; // SLIDEWINDOWSIZE =2 问题: 1)这里注释表示如果IMu初始化成功,全局变量又变成了2,怎里理解这个SLIDEWINDOWSIZE,为什么要存两帧激光雷达,是前后帧吗?和WINDOWSIZE有什么关系和联系?

2)松耦合(IMU_Mode<2)的时候这个LidarIMUInited没有地方赋值true;

iglstone avatar Oct 09 '23 05:10 iglstone

感谢关注! 问题1: 在IMU_Mode=2这个是滑动窗口的紧耦合,所以SLIDEWINDOWSIZE是滑动窗口所包含的frame数量,也可以是前后帧;WINDOWSIZE 和SLIDEWINDOWSIZE,一个是初始化,一个是常规滑窗,具体你可以理解一下代码; 问题2: 建议阅读一下代码,或者阅读一下lio-livox;

chengwei0427 avatar Oct 09 '23 07:10 chengwei0427

抱歉,我这边主要看的是定位部分的代码,主要想去掉紧耦合部分的代码后发现的问题,也就是打算把IMU_Mode = 2相关的都删除掉后发现的问题; 1)如果没有紧耦合(主要是不想维护这个submap,只是纯粹的定位,提高速度和定位频率),是不是就没有这个划窗了,这样我这两个参数就都是1了; 2)问题2我整个文档搜索LidarIMUInited(没删除的也搜索了) 在1132行有个赋值true语句,但是这个是在 if (IMU_Mode > 1 && !LidarIMUInited)里面,如果我这IMU_Mode=2删除了,是不是也就没地方初始化了。。

iglstone avatar Oct 09 '23 09:10 iglstone

IMU_Mode 设置为0或1,就是松耦合了,你看一下是否能运行?

chengwei0427 avatar Oct 09 '23 09:10 chengwei0427

我的目的是想只用激光和IMU进行定位,激光10Hz,输出100Hz的定位结果,中间没有激光用IMU的普通积分(不要预积分)来弥补,目前在改代码,还望多多指导,可以付费。

iglstone avatar Oct 09 '23 09:10 iglstone

IMU_Mode 设置为0或1,就是松耦合了,你看一下是否能运行?

目前来看这个LidarIMUInited没出事化,删了不少东西之后发现运行有问题,初步还没判断出来是我删除的问题还是没初始化导致的

iglstone avatar Oct 09 '23 09:10 iglstone

您好,再请教下,定位里这个exTlb参数是否是lidar to base的外参,这是待优化变量还是需要根据实际机器人测量或标定出来的赋值就行?没看太明白,主要是这个值全局搜索了下没看到哪里还有有给赋值(只在构造函数里赋值了一次单位阵),比较疑惑。还望指点下,

iglstone avatar Oct 10 '23 13:10 iglstone

你好,最近在忙一些新的工作,回复比较晚; 你上面所说的问题,这里建议你,先把我原版的代码都跑通以后,再进行调试修改,在理解代码的基础上,相信修改起来才会比较顺手呢,祝好!

chengwei0427 avatar Oct 11 '23 00:10 chengwei0427

    icp.setInputSource(cloud_icp);
    icp.setInputTarget(surround_surf_);
    CLOUD_PTR unused_result(new CLOUD());
    icp.align(*unused_result);

    if (icp.hasConverged() == false || icp.getFitnessScore() > 0.4) return;

    Eigen::Affine3f correct_transform;
    correct_transform = icp.getFinalTransformation();
    Eigen::Matrix4d curr_pose = toMatrix(init_pose_);
    Eigen::Matrix4d pose = correct_transform.matrix().cast<double>() * curr_pose;

在最开始icp获取初始定位这段代码这里,最后的pose是不是乘反了,correct_transform是算的是cloud_icp相对于surround_surf_的变换关系,可以理解为init_pose_到匹配后坐标系之间的位姿变换,这个curr_pose(也就是init_pose_)从rviz中获取一般是相对于map的,如果 Eigen::Matrix4d pose = curr_pose * correct_transform.matrix().cast()应该就对了,就能获取到相对于map的坐标系变换关系了,也就是定位结果,还请帮忙确认下。感谢

iglstone avatar Oct 16 '23 10:10 iglstone