cartographer源码之probability_grid

9 篇文章 0 订阅

1.相关博客
https://zhuanlan.zhihu.com/c_1040559544505704448
2.关于grid_2d 与 probability_grid
probability_grid是 grid_2d的继承,主要实现的函数是

bool ProbabilityGrid::ApplyLookupTable(const Eigen::Array2i& cell_index,  const std::vector<uint16>& table)

float ProbabilityGrid::GetProbability(const Eigen::Array2i& cell_index) const

void ProbabilityGrid::SetProbability(const Eigen::Array2i& cell_index, const float probability)

ApplyLookupTable可以通过第一个知乎专栏的cartographer源码解读附一中关于probability_value文件的解释弄懂。
其第二个参数就是预先填好的两张表中的一个(一个叫hit_table,另一个叫 miss_table)。
hit_table表示 假设已知当前某个格子的被占据的概率为p1,那么如果新来一个测量数据m,如果m表示该格子被占据了,那么hit_table[p1]即是这个格子更新之后的被占据概率值,miss_table[p1]表示如果m是不被占据的情况下,这个格子对应的更新值。

不过实际上cartographer使用的不是被占据的概率,而是不被占据的概率,因此把上面的理解反一反就理解了cartographer的意思。cartographer主要使用的是CorrespondenceCost来表示地图每个格子不被占据的概率。

同时预先生成了查找表。

需要注意的是:

  1. 更新一个格子之后,需要执行FinishUpdate()函数才可以对这个格子再次更新
  2. 栅格有一个最大概率,一般设置为为0.9,表示当一个格子的概率为0.9的时候,这个格子一定是被占据了,如果一个观测的可信度刚好是最大值0.9,(测试代码中可以调整可信度,实际代码我记得是0.7<0.9),或者是最小值0.1,那么就是说观测到的就一定是正确的,那每次格子更新后的概率值就是观测的值,也就是0.1(一定没有物体,即miss)或者0.9(一定有物体,即hit)。
  3. 如果观测的可信度是介于最大最小的中间的话,那么就会使格子的概率值向最大概率靠拢
  4. 如果一个格子刚开始没有概率值,那它的概率值就是第一次的观测值的概率,之后再更新
  5. 通过调试probability_grid_test.cc文件可以帮助自己更好理解这部分的内容。
  6. 这个文件的可执行程序在 catkin_ws/build_isolated/cartographer/install/cartographer.mapping.2d.probability_grid_test
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值