论文
论文A comparison of line extraction algorithms using 2D range data for indoor mobile robotics
对比了6种提取雷达数据线条算法的效果。结论如下:
Split-and-Merge
和 Incremental
由于处理速度和准确性而表现最好。 对于实时的应用,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 | float32 radius |
- start和end分别是这个线段的起点坐标和终点坐标。
- angle: 原点到直线的垂线的角度,角度以机器人为坐标系计算,范围是-PI~PI
- radius: 原点到直线的距离
这两个参数完全能够根据start和end点计算出来。不理解这两个参数存在的意义。
covariance是2X2的矩阵,是radius和angle的协方差
line_extractor
line_extractor
发布:1
2
3
4
5
6
7
8camera_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
5camera1/scan [sensor_msgs/LaserScan]
shelf_lifter/cmd [std_msgs/String]
sick_tim551_scan [sensor_msgs/LaserScan]
tf [tf2_msgs/TFMessage]
tf_static