cartographer 坐标系_[参考转]关于cartographer应用场合和配置使用、以及源码的重点...

本文介绍了cartographer在视觉SLAM中的应用,探讨了其能与不能实现的功能,包括室内SLAM的精度和兼容多种传感器的能力。同时,文章详细阐述了cartographer的配置与使用,强调了数据转换的重要性,并提供了imu、里程计和传感器配置的要点。最后,文中列出了主要参考文献和代码重点,分析了cartographer在2D和3D SLAM中的区别与优化策略。

由于本人学习cartographer的目的就是做visual SLAM,以相机作为传感器展开slam。而cartographer官网提供的demo包括参考沦为都是以激光雷达作为传感器,因此我找到前辈这篇文章作为参考,开始我的第一步。

作者:斯坦德机器人链接:https://www.zhihu.com/question/51348391/answer/221614714

  1. cartographer能做到,不能做到什么?
  2. cartographer配置与使用 (激光雷达买不起,kinect很流行,怎么用非官方的传感器方案跑cartographer)?
  3. cartographer有用的参考文献和代码核心结构? 其亮点在哪里?
  • 有同学之前提到能不能纯视觉用cartographer,如果手持,不管2d3d都不能; 如果固定平地,效果跟其他开源比我也不知道优势在哪。
  • part1: cartographer能与不能
  • 实现精度要求不高的室内SLAM,论文说5cm,有人评论说能3cm;
  • 兼容多种传感器方案,可以激光雷达,相机;甚至能同时用;支持多trajectory似乎能有一些玩法。
  • 一直在更新,实现得很好,有诚意,值得学习和支持。但看了之后,看其他开源的实现眼睛要瞎,建议不要最先看。
  • 2.不能: (需要指正补充)
  • 如果走丢了(定位失败),算法里似乎没有恢复的方法,不能全局定位,它写了个PerformGlobalLocalization,但是没看见使用;
  • 如果环境动态一些,环境有玻璃等,算法里没作处理,定位精度还能行吗,它对scan的过滤就只用最短距离最长距离来判断;
  • 在长走廊中,实际机器人在走,由于观测没有变化,因此定位不动,在缺乏里程计时,此时误差很大;
  • 不用IMU,大环或者多环就基本
### Cartographer Fast Correlative Scan Matcher 实现细节 #### 1. 原理概述 Fast Correlative Scan Matcher 是一种用于快速匹配激光雷达扫描数据与概率栅格图的技术。它通过在预定义的搜索窗口内评估多个候选位姿的可能性来估计机器人的真实姿态。具体来说,算法会基于当前点云数据计算出每个可能的姿态对应的概率得分,并最终选取最大概率对应的位置作为最佳匹配结果[^1]。 此方法的核心在于减少不必要的计算量并加速收敛过程。为了达到这一目标,Cartographer 使用了分支定界 (Branch and Bound) 技术来进行粗略匹配阶段中的优化操作。 #### 2. 源码结构分析 `fast_correlative_scan_matcher_2d.cc` 文件实现了二维空间内的快速相关性扫描匹配逻辑。以下是几个重要部分的功能描述: - **初始化参数配置** 初始化过程中设置了诸如旋角度分辨率 (`angular_grid`) 平移距离网格大小 (`translation_delta_cell_count`) 等关键变量。这些参数直接影响后续迭代搜索的空间粒度效率。 - **构建评分函数** 构建了一个高效的评分机制用来衡量每种假设状态下的拟合优劣程度。对于每一个采样得到的新位置 `(x, y, θ)` ,都会重新投影原始观测值至更新后的坐标系下,并统计落入高占用区域的比例总分。 - **执行分支限界策略** 利用递归方式探索整个可能性树形结构的同时不断剪枝掉那些不可能成为全局最优解的部分子节点集合。这样既保证能找到近似精确的结果又大幅降低了整体运算复杂度。 ```cpp // Example pseudo-code snippet demonstrating the recursive nature of BnB algorithm. void EvaluateNode(const Transform& current_transform, const std::vector<float>& scores_so_far){ if(IsLeaf(current_transform)){ UpdateBestMatchIfBetter(scores_so_far); return; } for(auto child : GetChildrenTransforms(current_transform)){ auto new_scores = ComputeScores(child); if(new_scores > best_score_found){ // Pruning condition check here EvaluateNode(child,new_scores); }else{ continue; } } } ``` 上述伪代码片段展示了如何运用递归来遍历所有潜在变换组合,并且适时应用裁减条件以剔除不必要继续深入考察的情形^。 #### 3. 主要成员函数解释 - `ComputeMatchingScore`: 计算给定位置处的整体吻合分数。 - `SearchWithinBoundaries`: 定义边界范围并对内部各点逐一尝试调用前一功能获取相应数值直至发现最高者为止。 - `OptimizeScanMatcherPose`: 结合前面两者完成最终精化调整工作流程[^2]. #### 4. 应用场景举例 当自动驾驶汽车或者无人机需要实时感知周围环境变化时,这种技术能够帮助它们迅速判断自身所在方位以便做出下一步行动决策。例如,在GPS信号较弱的城市峡谷地带,依靠本地SLAM系统维持稳定导航显得尤为重要. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值