【cartographer】(一)占据栅格地图更新策略

cartographer中的栅格地图中每个栅格存储的是这个格子的空闲概率,这样scan match就能很方便地转换成了最小二乘问题.


1. Probability、Odds、CorrespondenceCost的区别

  • Probability:占据概率
  • Odds:p/(1-p),p表示占据概率
  • CorrespondenceCost:空闲概率(浮点类型),对应的Value为线性映射到[1-32767]整型范围内的结果

2. 预计算hit_table和miss_table

这两个table存的都是Value(空闲概率的整数映射表达),只需计算一次,可视为常量数组.

2.1 hit_table

给定某个栅格的空闲概率整数值(uint16), 如果该栅格再次被激光击中了, 那么它新的空闲概率值, 其实是可以预先计算出来的,如下:

hit_table_[原有的空闲概率整数值(uint16)] = 再次击中之后新的空闲概率整数值(uint16)
2.2 miss_table

跟hit_table的作用相反

2.3 table中index 0的作用
  • hit_table[0]:第一次被观测(在此之前该栅格是unknown状态,即,value=0)到的栅格(hit)对应的空闲value(p_hit=0.55).
  • miss_table[0]:第一次被观测到的栅格(miss)对应的空闲value(p_miss=0.49).

3. 栅格地图更新

3.1 保证栅格在一轮scan insert中只更新一次

对上面的hit_table和miss_table中每个value增加一个kUpdateMarker=32768来实现.

3.2 hit更新

hit指的是激光点打到物体上,对这个位置对应的栅格的概率进行更新,通过hit_table_实现.

3.3 miss更新

由两部分构造成:

  • 从激光点到hit之间的为miss,这中间的栅格的概率通过miss_table进行更新.
  • 激光打出去未返回的点,比如,在空旷区域,miss默认长度设置为5m,表示5m内这些空间都是free的.
3.4 超分辨率

提升分辨率后,hit点转到栅格图像的index的精度更高了,这样从origin->hit所经过的栅格更加精确,更有利于miss的更新,具体做法如下:

  • 一条直线穿过很多cell,有的cell从对角穿过,有的只穿过一个小角落,虽然它们都是穿过,但是穿过的观测量不同,从对角穿过对这个cell的空闲概率提升应该作用更大,而只穿过一个小角落显然贡献很微弱.
  • 为了定量得到直线穿过该cell时,对该cell的贡献,采用超分辨率来实现。对于从对角穿过的cell,那么超分辨率后,就有很多小的sub-cell落在原来的cell中,sub-cell数(记为n)越多,贡献就越大(其实就是对cell这个栅格的概率重复算了n次…),而对于从小角落穿过的cell,sub-cell数就很少了.

4. 栅格地图增长

如果在栅格地图的更新过程中,发现图像的index超过了原来的栅格图像的范围,则长宽各需扩大1倍(左右各扩大0.5倍),并将原来的栅格图像整体挪到中心位置.


5. 减少栅格地图内存空间

上面栅格地图增长方式太暴力了,因为实际的栅格地图可能长宽差别很大,而使用的栅格图像确是正方形的(因为预设的栅格图像大小是100x100),所以需要根据known_cells_box_减少栅格地图所占的内存空间.


下一篇:cartographer(二)分支定界


@leatherwang
二零二零年十二月二十日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值