Cart1.0 :MapBuildOptions、NodeOptions、TrajectoryOptions、TrajectoryBuilderOptions、LocalTrajectoryBuild

文章详细介绍了Cartographer中用于构建地图和配置轨迹的各种选项,包括MapBuilderOptions、NodeOptions、TrajectoryOptions和TrajectoryBuilderOptions等,涉及到2D和3D的局部轨迹构建参数,如激光数据处理、滤波、匹配算法以及IMU数据的使用。此外,还提到了SLAM模式和纯定位模式的差异,并提供了相应的控制参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值