地面检测的代码全都在apps/floor_detection_nodelet.cpp文件中,这是一个节点文件,里面关于订阅和发布数据的内容我们不讲了,只介绍关于检测的核心算法。 地面检测共分为三个步骤:1)根据高度参数把地面分割出来,由函数plane_clip完成 2)把地面点云中,去掉法向量和地面实际法向量差别较大的点,这一步由函数normal_fil...
在3d的激光点云中,很多情况下都需要提取地面信息,而hdl中其主要目的是假设地面为平面的话,则可以根据点云进行提取并计算其参数,用于后端的约束,如此可以保证闭环在高度方向上和姿态角的准确性。但存在一个前提,即使用此功能需保证本体的确在平面上进行SLAM,否则不仅不能提高准确性,反而会增加误差; 平面检测思想也较...
hdl_graph_slam算法中,地面检测是一种重要的约束,可用来增加位姿(posegraph)中的约束从而提高定位与建图的精度。该算法假设了全局一致地面的存在,然后根据每次检测到的地面参数对当前...,直接来看源码吧。hdl_graph_slam中的地面检测部分代码主要定义在detect函数里面,还是比较容易理解的: 地面检测的主要流程就是上示...
HDL graph slam有四个主要线程,对于点云的预处理降采样prefiltering线程,floor detection线程(检测一个共有的平面作为地面),odometry线程(在测试中使用的是使用openmp加速的NDT算法),和graph optimization线程(优化包括:相邻帧的约束,回环约束,和每一帧检测到的地面约束)。 HDL – prefiltering the maximum time is :...
添加地面约束 使用add_se3_plane_edge函数的代码 执行图优化 优化函数optimization_timer_callback 执行图优化,闭环检测检测闭环并加到了概率图中,优化前 生成简化版关键帧,KeyFrameSnapshot用于地图拼接 生成地图并定时发送 生成地图:简化版关键帧拼接 定时发送:src/hdl_graph_slam_nodelet.cpp文件中...
180,同时z轴方向提高2m(依据采集数据的雷达与地面的距离而定) 2 把map绕z轴旋转90,使车头与朝向地图上前进的方向(依据车头与地图上车前进的方向而定)3经过上述3步,map已经可以进行ndt...工作中利用velodyne点云及GNSS信息构建高清三位地图(能进行从小到大地图的精确拼接),并实现实时准确定位(SLAM),在此记录下自...
LogoLOAM 增加了更多预处理的步骤,其中主要包括一个地面的提取(并没有假设地面是平面),和一个点云的分割。 使用更多筛选之后的点云再提取特征点,效率会更高。 Add segmentation before processing (gound extraction and image-based segmentation) 在提取特征点时,将点云分成小块,分别提取特征点,以保证特征点的均匀...
HDL graph slam有四个主要线程,对于点云的预处理降采样prefiltering线程,floor detection线程(检测一个共有的平面作为地面),odometry线程(在测试中使用的是使用openmp加速的NDT算法),和graph optimization线程(优化包括:相邻帧的约束,回环约束,和每一帧检测到的地面约束)。
4. 地面拟合参数 1)接收消息:floor_coeffs_callback 2)处理消息队列:flush_floor_queue 处理信息包括以下步骤: 1)在对应的callback函数中接收信息,并放入相应的队列 2)根据时间戳对队列中的信息进行顺序处理,加入概率图 其他内容: 1)执行图优化,这是一个定时执行的函数,闭环检测也在这个函数里 2)生成全局地图并...
1. 地面平面检测 根据点云检测平面,并拟合平面得到平面的数学描述参数,供构建概率图使用。 2. 点云滤波 处理原始点云,得到稀疏点云 3. 前端里程计 帧间匹配,得到每一帧位姿 4. 后端概率图构建 这一项功能承担了整个系统中的大部分内容,它的主要功能又包括: 1)提取关键帧。 前端里程计得到的是每一帧位姿,而...