思路参考了论文《基于特征线段匹配的救援机器人建图方法》
特征识别主要分为两个过程:区域分割与特征提取
首先要做的就是区域分割,假设激光雷达可以得到n个数据点,以这n个数据点作为一个区域,可以表示为A1{(Xi, Yi) | i = 1, 2, ..., n},利用两点间欧氏距离公式可得到两点间距Dj,同时确定一个阈值Delta,比较delta和Dj,确定两点是否在同一个线段特征集合范围内。当Dj大于Delta时,确定点(Xj, Yj)为区域的一个分割点,以此点将激光雷达的n个数据分割成两部分,分别得到区域A{(Xi, Yi) | i = 1, 2,..., j}和A’{(Xi, Yi) | i = j+1, j+2, ..., n}。依次类推,对A和A‘应用算法进行分割,最后能够得到N个互不相连区域{A1, A2, ..., An}。
因为做的是基于QT的程序,所以用的是QT下的模板类
#include <QCoreApplication>
#include "qvector.h"
#include "math.h"
#include "qlinkedlist.h"
#include <iostream>
using namespace std;
typedef struct Point
{
double xpos;
double ypos;
}Point;
QLinkedList<QVector<Point> > subset_list; //声明全局变量,用于存储分割后的子集
/************************