1. MapBuildOptions,构建地图的控制Message参数。
syntax = "proto3";
import "cartographer/mapping/proto/pose_graph_options.proto";
package cartographer.mapping.proto;
message MapBuilderOptions {
bool use_trajectory_builder_2d = 1;
bool use_trajectory_builder_3d = 2;
// Number of threads to use for background computations.
int32 num_background_threads = 3;
PoseGraphOptions pose_graph_options = 4;
// Sort sensor input independently for each trajectory.
bool collate_by_trajectory = 5;
}
2. NodeOptions,对应cartograpger的节点配置选项
struct NodeOptions {
::cartographer::mapping::proto::MapBuilderOptions map_builder_options;
std::string map_frame;
double lookup_transform_timeout_sec;
double submap_publish_period_sec;
double pose_publish_period_sec;
double trajectory_publish_period_sec;
bool use_pose_extrapolator = true;
};
3. TrajectoryOptions,轨迹生成参数,可以看到这里有个TrajectoryBuilderOptions参数,还算有和使用数据类型,和数据类型使用方式,和数据使用采样间隔等。
struct TrajectoryOptions {
::cartographer::mapping::proto::TrajectoryBuilderOptions
trajectory_builder_options;
std::string tracking_frame;
std::string published_frame;
std::string odom_frame;
bool provide_odom_frame;
bool use_odometry;
bool use_nav_sat;
bool use_landmarks;
bool publish_frame_projected_to_2d;
int num_laser_scans;
int num_multi_echo_laser_scans;
int num_subdivisions_per_laser_scan;
int num_point_clouds;
double rangefinder_sampling_ratio;
double odometry_sampling_ratio;
double fixed_frame_pose_sampling_ratio;
double imu_sampling_ratio;
double landmarks_sampling_ratio;
};
4. TrajectoryBuilderOptions,轨迹控制参数,在proto添加,还有纯定位参数,纯定位裁减参数等
message TrajectoryBuilderOptions {
LocalTrajectoryBuilderOptions2D trajectory_builder_2d_options = 1;
LocalTrajectoryBuilderOptions3D trajectory_builder_3d_options = 2;
InitialTrajectoryPose initial_trajectory_pose = 4;
reserved 5;
bool pure_localization = 3 [deprecated = true];
message PureLocalizationTrimmerOptions {
int32 max_submaps_to_keep = 1;
}
PureLocalizationTrimmerOptions pure_localization_trimmer = 6;
bool collate_fixed_frame = 7;
bool collate_landmarks = 8;
}
5. LocalTrajectoryBuilderOptions2D,可以看到这里包含激光数据处理的参数(距离处理,滤波处理参数,激光匹配参数CSM,是否使用imu参数等,还有移动滤波参数),可以看到这里就是所谓的“前端”参数。
syntax = "proto3";
package cartographer.mapping.proto;
import "cartographer/mapping/proto/motion_filter_options.proto";
import "cartographer/mapping/proto/pose_extrapolator_options.proto";
import "cartographer/sensor/proto/adaptive_voxel_filter_options.proto";
import "cartographer/mapping/proto/scan_matching/ceres_scan_matcher_options_2d.proto";
import "cartographer/mapping/proto/scan_matching/real_time_correlative_scan_matcher_options.proto";
import "cartographer/mapping/proto/submaps_options_2d.proto";
// NEXT ID: 22
message LocalTrajectoryBuilderOptions2D
{
// Rangefinder points outside these ranges will be dropped.
float min_range = 14;
float max_range = 15;
float min_z = 1;
float max_z = 2;
// Points beyond 'max_range' will be inserted with this length as empty space.
float missing_data_ray_length = 16;
// Number of range data to accumulate into one unwarped, combined range data
// to use for scan matching.
int32 num_accumulated_range_data = 19;
// Voxel filter that gets applied to the range data immediately after
// cropping.
float voxel_filter_size = 3;
// Voxel filter used to compute a sparser point cloud for matching.
sensor.proto.AdaptiveVoxelFilterOptions adaptive_voxel_filter_options = 6;
// Voxel filter used to compute a sparser point cloud for finding loop
// closures.
sensor.proto.AdaptiveVoxelFilterOptions
loop_closure_adaptive_voxel_filter_options = 20;
// Whether to solve the online scan matching first using the correlative scan
// matcher to generate a good starting point for Ceres.
bool use_online_correlative_scan_matching = 5;
cartographer.mapping.scan_matching.proto.RealTimeCorrelativeScanMatcherOptions
real_time_correlative_scan_matcher_options = 7;
cartographer.mapping.scan_matching.proto.CeresScanMatcherOptions2D
ceres_scan_matcher_options = 8;
MotionFilterOptions motion_filter_options = 13;
// Time constant in seconds for the orientation moving average based on
// observed gravity via the IMU. It should be chosen so that the error
// 1. from acceleration measurements not due to gravity (which gets worse when
// the constant is reduced) and
// 2. from integration of angular velocities (which gets worse when the
// constant is increased) is balanced.
// TODO(schwoere,wohe): Remove this constant. This is only used for ROS and
// was replaced by pose_extrapolator_options.
double imu_gravity_time_constant = 17;
mapping.proto.PoseExtrapolatorOptions pose_extrapolator_options = 21;
SubmapsOptions2D submaps_options = 11;
// True if IMU data should be expected and used.
bool use_imu_data = 12;
}
slam模式和纯定位模式需要的优化不同,可以通过轨迹参数进行控制
如 trajectory_builder_options.proto中的
message TrajectoryBuilderOptions {
LocalTrajectoryBuilderOptions2D trajectory_builder_2d_options = 1;
LocalTrajectoryBuilderOptions3D trajectory_builder_3d_options = 2;
bool pure_localization = 3;
InitialTrajectoryPose initial_trajectory_pose = 4;
bool is_in_slam_mode = 6;
message OverlappingSubmapsTrimmerOptions2D {
int32 fresh_submaps_count = 1;
double min_covered_area = 2;
int32 min_added_submaps_count = 3;
}
OverlappingSubmapsTrimmerOptions2D overlapping_submaps_trimmer_2d = 5;
}
添加控制参数bool is_in_slam_mode = 6;