Apollo 6.0 perception 瞎学笔记(一)roi_filter
目录
前面看到autoware是怎么结合地图信息来滤除聚类点云目标的,现在我们学习下百度apollo的做法,这里纯属作者写给自己看的,肯定有很多错误,请大家不要相信。
代码分析:
bitmap2d.cc
打开 apollo-r6.0.0/modules/perception/lidar/lib/roi_filter/hdmap_roi_filter目录下的bitmap2d.cc
这些是关于bitmap的底层位操作,这里作者还不是太理解,因此跳过哈哈哈哈。。。。
这里是地图初始化,输入量是地图的最小,最大值,单元格尺寸。
- 前面是Check数据是否满足要求
- dims_等于变化量除以单元格尺寸
- dims_加上Vec2ui(1,1)
- map_size_ 存放dims_数据
- bitmap_调整到如此大小,但是里面的元素值为0
这里是SetUp函数,传入地图的主方向。然后计算出相反方向,将bitmap_.data()指向内存的前size个字节清0。
这里是RealToBitmap将真实的值转换为地图
- 计算出p点相对于最小点的单元格数,有种像素值的感觉
- 这里没看懂,传入到major_pix
- 将x,y,z分别传给3D的矩阵bit_p
没看懂,算出3维p点的2维index
根据2维索引判断时候合法存在
检测p点,将2维p点转换成3维点bit_p, 通过Index方法转换到idx,通过CheckBit方法检测数据位。
这里将上述的CheckBit转换为SetBit,应该是将p点的z值传到对应索引处
这里是将该点的z数据位重置
Set方法,传入x,min_y, max_y
- 将最小y和最大y分别传入到real_left,real_right的副方向,x传入到主方向
- 通过realtobitmap方法将其转换成3D的点
- 如果左边的y值等于右边的y值,得到左边点的索引,调用SetRangeBits方法
- 如果不相等的话,设立起始的bits为左边位的z值,设立尾部的bits为右边的z值
- 然后从左边的index到右边的index,将bitmap的每一位都设置为-1
相对于上面的方法,只是将-1改成0
总结
作者基本没看懂