布料模拟算法
1、流程概述
1)利用点云滤波算法或者点云处理软件滤除异常点;
2)将激光雷达点云倒置;
3)设置模拟布料,设置布料网格分辨率
G
R
GR
GR,确定模拟粒子数。布料的位置设置在点云最高点以上;
4)将布料模拟点和雷达点投影到水平面,为每个布料模拟点找到最相邻的激光点的高度值,将高度值设置为
I
H
V
IHV
IHV;
5)布料例子设置为可移动,布料粒子首先受到重力作用,当粒子高度
C
H
V
CHV
CHV小于
I
H
V
IHV
IHV时,将粒子高度设置为
I
H
V
IHV
IHV;粒子设置为不可移动;
6)计算布料粒子之间的内力作用,根据设置的布料刚性参数,调整布料粒子之间的相对位置;
7)重复进行5)和6)计算,迭代次数达到设置的最大迭代次数;
8)计算激光雷达点与对应布料模拟点的距离,距离小于阈值标记为地面点,距离大于阈值标记为非地面点。
2、详细过程
懒得手打,直接贴图了。等上传PCL版本代码的时候再完善吧!!!!
3、参考文献
[1] 王传波. 基于点云数据的滤波与压缩方法研究[D].黑龙江大学,2021.
4.软件实现
1、加载点云数据,点击Plugins中的CSF Filter功能
2、弹出如下窗口:
图中:Cloth resolution:是指用于覆盖地形的布的网格大小(单位与点云的单位相同)。你设置的布分辨率越大,你得到的DTM就越粗糙;Max iterations:是指地形仿真的最大迭代次数。500对大多数场景来说都足够了。Classification threshold:是指根据点与模拟地形之间的距离,将点云划分为地面和非地面部分的阈值。0.5适用于大多数场景
这里的网格分辨率和距离阈值最小只能设置为10cm,地面10cm的范围默认是地面点,精确度不如自己代码实现中的高。
3、最后得到的结果: