1. 系統組成
- 它由以下兩個系統組成:
- Local SLAM (Frontend) :產生好的Submap
創建局部一致的Submap集合,並把它們連在一起,會隨着時間漂移 - Global SLAM(Backend):把Submap以最一致的方式連接在一起
在後端運行,尋找閉環約束(通過掃描匹配來實現scans->submap),也使用其它傳感器數據以獲得更好的全局一致性,在3D中,它盡力尋找重力方向
1.1 Local SLAM
- 配置文件
- 2D (TRAJECTORY_BUILDER_2D)
trajectory_builder_2d.lua - 3D (TRAJECTORY_BUILDER_3D)
trajectory_builder_3d.lua
- 2D (TRAJECTORY_BUILDER_2D)
1.2 Global SLAM
- 配置文件
- pose_graph.lua (POSE_GRAPH)
2. 配置參數
2.1 adaptive_voxel_filter (體素濾波)
- 體素濾波用於爲Local SLAM匹配或爲Global SLAM閉環計算Sparser Point Cloud.
- AdaptiveVoxelFilterOptions
- 定義
syntax = "proto3";
package cartographer.sensor.proto;
message AdaptiveVoxelFilterOptions {
// 'max_length' of a voxel edge.
float max_length = 1;
// If there are more points and not at least 'min_num_points' remain, the
// voxel length is reduced trying to get this minimum number of points.
float min_num_points = 2;
// Points further away from the origin are removed.
float max_range = 3;
}
- 實例
adaptive_voxel_filter = {
max_length = 0.5,
min_num_points = 200,
max_range = 50.,
},
loop_closure_adaptive_voxel_filter = {
max_length = 0.9,
min_num_points = 100,
max_range = 50.,
},
2.2 RealTimeCorrelativeScanMatcherOptions
- 定義
syntax = "proto3";
package cartographer.mapping.scan_matching.proto;
message RealTimeCorrelativeScanMatcherOptions {
// Minimum linear search window in which the best possible scan alignment
// will be found.
double linear_search_window = 1;
// Minimum angular search window in which the best possible scan alignment
// will be found.
double angular_search_window = 2;
// Weights applied to each part of the score.
double translation_delta_cost_weight = 3;
double rotation_delta_cost_weight = 4;
}
- 實例
use_online_correlative_scan_matching = false,
real_time_correlative_scan_matcher = {
linear_search_window = 0.1,
angular_search_window = math.rad(20.),
translation_delta_cost_weight = 1e-1,
rotation_delta_cost_weight = 1e-1,
},
- a
參考: