任务动机:检测已有地图中的直线特征,以此为参照,旋转地图至“合理”的方向。
任务描述:栅格地图开始建立的时候,地图方向由机器人的位置决定,为了能在任意位置启动,得到一个人类看图习惯的地图,需要将地图进行一个旋转。
1. 前言
在使用激光构建地图时,形成的地图在rviz中呈现一般如下图所示,它和初始的建图位姿有关,如果手动的调整建图起始位置的朝向,将激光雷达正对墙壁或者其他参考,建图后效果,会是墙壁对齐于视图,当然在rviz中可以直接用鼠标中键旋转,如果想让地图在建图中自己调整至垂直的方向,就需要做一些工作。
2. 思路
目标是将墙壁对齐与显示区域,所以墙壁是要检测的目标,从三个方面考虑
- 主方向检测;检测二维图像中两个主要的方向;
- 检测图片中的墙壁直线;
- 检测激光数据中的直线。
方法1简单明了,直接使用PCA方法,SVD分解后的U矩阵向量,即为主向量; 方法2需要识别直线,然后找到一堆直线中的所需直线; 方法3需要定义激光点中什么样的数据点是直线。
3. 方法
3.1 PCA分解图片
PCA分解方法是图像降维的一种方法,在二维点的特殊情况下,可以这样理解