laser_line_extraction

论文

论文A comparison of line extraction algorithms using 2D range data for indoor mobile robotics对比了6种提取雷达数据线条算法的效果。结论如下:

Split-and-MergeIncremental由于处理速度和准确性而表现最好。 对于实时的应用,Split-and-Merge是最佳选择,因为处理速度很快。它也是地图定位问题的第一选择,此时FalsePos不太重要。但是,算法实现的细节对应用是很重要的。

对于laser_line_extraction对应的03年论文,这篇论文在介绍Split-and-Merge时没有提到,只在Related Work里提了一下。但是laser_line_extraction的介绍里声称是使用了Split-and-Merge算法,还有待观察。

以及2017年的论文 A line segment extraction algorithm using laser data based on seeded region growing,效果在Line Segment Extraction

原理


对雷达扫描的结果,如果形状接近直线,就进行连线。

先对离群点进行过滤,再执行split-and-merge算法决定哪些点属于线,然后使用weighted line fitting算法找到最合适的线和相应的协方差矩阵。

使用roslaunch laser_line_extraction example.launch,修改参数以符合自己的需求。

参数

  • bearing_std_dev (default: 0.001): The standard deviation of bearing uncertainty in the laser scans (rad).

  • min_split_dist (default: 0.05): When performing “split” step of split and merge, a split between two points results when the two points are at least this far apart (m) 线段split的阈值,过大时很多线段被合并成一条,过小时,出现很多碎短的线段

  • outlier_dist (default: 0.05): Points who are at least this distance from all their neighbours are considered outliers (m).

  • range_std_dev (default: 0.02): The standard deviation of range uncertainty in the laser scans (m).

1
2
3
4
5
float32 radius
float32 angle
float32[4] covariance
float32[2] start
float32[2] end
  • start和end分别是这个线段的起点坐标和终点坐标。
  • angle: 原点到直线的垂线的角度,角度以机器人为坐标系计算,范围是-PI~PI
  • radius: 原点到直线的距离

这两个参数完全能够根据start和end点计算出来。不理解这两个参数存在的意义。

covariance是2X2的矩阵,是radius和angle的协方差

line_extractor

line_extractor发布:

1
2
3
4
5
6
7
8
camera_line_markers     [visualization_msgs/Marker]
camera_line_segments [laser_line_extraction/LineSegmentList]
line_markers [visualization_msgs/Marker]
line_segments [laser_line_extraction/LineSegmentList]

taimi/line_center_point [nav_msgs/Odometry]
taimi/line_wall_position [geometry_msgs/PoseStamped]
taimi/waste_aruco_position [geometry_msgs/PoseStamped]

订阅:

1
2
3
4
5
camera1/scan [sensor_msgs/LaserScan]
shelf_lifter/cmd [std_msgs/String]
sick_tim551_scan [sensor_msgs/LaserScan]
tf [tf2_msgs/TFMessage]
tf_static

参考:室内移动机器人二维激光数据线特征提取算法的总结与开源算法分享