# lidar_slam **Repository Path**: learing8hard/lidar_slam ## Basic Information - **Project Name**: lidar_slam - **Description**: 本仓库是对已有开源lidar_slam算法的学习实践,仅做学习使用。不用于任何商业用途。如果使用,请引用原作者paper和开源仓库。 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-17 - **Last Updated**: 2022-01-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # lidar_slam #### 介绍 本仓库是对已有开源lidar_slam算法的学习实践,仅做学习使用。不用于任何商业用途。如果使用,请引用原作者paper和开源仓库。 #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 问题 ### 约束的选择,不是一个平面就选择一个,也不是平面内的所有点都选择,而是要平衡,间隔5个点选择。 不然,优化位姿态就会出错。同时,尽可能确保约束分布均匀。这非常重要,不然,容易导致匹配失败 ### 粗糙度提取要选择10个点以上,同一线上的。 ### 使用pcl的点云类加入点,原点会有点的问题 ### 地面平面点将采样构造kdtree,用于求残差;角点按照道理需要将其他没有那么sharp的点加入然后构造kdtree,但是,先看看效果。 ### 点到直线的距离以及点到平面的距离计算时要注意,一定是要算对正负,然后,明确法向量方向 ### 当没有特征点的时候就需要停止了 ### 有时候会出现数值求解问题?? corner coeff (0.79672,0.183239,0.5759 - 0.0507713) point raw (-3.05316,-6.48351,-0.62698 - 0) coeff (-0.122077,0.8765,0.465666 - 0.0498622) point raw (0.816444,-3.05428,-0.614537 - 0) coeff (0.43953,0.854411,-0.277119 - 0.049051) point raw (3.49896,1.81923,-0.624611 - 0) coeff (0.509396,0.331744,-0.794016 - 0.222048) point raw (-1.22805,-11.026,2.15649 - 0) coeff (0.957552,0.288013,-0.0119681 - 0.0489727) point raw (0.193819,-10.8316,2.50107 - 0) coeff (-0.0369014,-0.981523,0.18775 - 0.233256) point raw (-0.770862,-11.3216,2.61984 - 0) H 55.042 -4.5016 5.1003 -0.561111 -0.0495629 -6.35669 -4.5016 7.48583 31.1842 3.44215 1.20941 0.231062 5.1003 31.1842 147.785 15.3446 7.0261 -0.704251 -0.561111 3.44215 15.3446 1.77303 0.761271 -0.0190457 -0.0495629 1.20941 7.0261 0.761271 2.14603 -0.0347088 -6.35669 0.231062 -0.704251 -0.0190457 -0.0347088 0.995814 J_t_B -0.964218 -0.191881 -1.52222 -0.160881 -0.00377444 0.0506908 delta x -0.468296 -1.92717 0.411846 0.0563777 -0.330633 -2.21044 test rpy 0 -1.90797 0.482287 t last cur 0.149394 -0.312642 0 ### 在点云点预处理的时候,一定要将异常值点,除去,不然容易出现问题. ### 在求点到直线的距离的时候,要判断是否为直线,不然求解法向量的时候,容易导致nan的情况 ### vector如果没有指定大小的话,所引除去会导致访问值为0.而Eigen求法向量则可以求,同时不会出现除0错误 ### 雅可比使用左乘扰动和右乘算的雅可比有问题,可能是数值不稳定.同时,使用先平移后旋转的模型,求雅可比会更稳定? ### 使用平面法向量作为导数方向,以及求残差没有问题? ### 每次都是相邻帧之间匹配,相邻帧永远都是rpy000的时候开始求导,可能会导致一些问题? ### 旋转矩阵直接对旋转矩阵求雅可比和分别对旋转角求雅可比是不一样的 ### 自己写的雅可比错误,不知原因,无法复现lego loam ### 要处理遮挡点不然就会导致,角点选错 ### 相邻点之间不能出现无效点,不然,粗糙度计算等会受到干扰 ### 约束不够的话,判断退化的标准要松一些,判断特征值的大小。如果没有imu的初值估计也不能将其设得太大,不然,就会无法优化。 ### opencv的求解方程貌似更好一些,但是,约束不够就会导致计算出nan ### lio sam如果没有imu辅助的话,可能跑步出来loam。 ### 如果不能实时处理的话,就会出现匹配失败,匹配很取决于初值和环境变化情况。因此,好的imu估计可以获得较好的初值。因此,一般都要将点云帧村成队列。 ### 特征点数要求如果太严苛,那么就会导致部分帧没有优化,从而导致后面的帧间匹配出问题 ### 纯lidar法的缺点就是在长直走廊会退化