Skip to content

bs_models

Jake McLaughlin edited this page Feb 19, 2022 · 1 revision

bs_models

The bs_models package contains all sensor models used to create cost functions for SLAM, and any helping functions/classes are in thier resepctive subfolders.

Frame Initializers

Frame initializers are classes meant to provide an interface to any sensor model for getting initial pose estimates. They are used to communicate higher rate live estimates of odometry to other sensor models.This is typically used in the following cases:

  1. Lidar odometry using it for initial pose estimates for scan registration
  2. VIO using it for building visual maps with an already good trajectory estimate
  3. Inertial odometry using it for a fused odometry
  4. Lidar aggregation using it to aggregate multiple scans into one motion compensated one at a specified timestamp

SLAM Initializers

SLAM initializers are specialized sensor models that perform rough initial pose estimates with no priors, these are typically used for bootstrapping VIO or inertial odometry.

LO Initializer

The LO initializer uses lidar scans to estimate an initial path in world scale.

Parameters

  • registration_config_path:
  • matcher_params_path:
  • ceres_config_path:
  • lidar_topic:
  • aggregation_time:
  • trajectory_time_window:
  • min_trajectory_distance:
  • scan_output_directory:
  • max_frequency:

GT Initializer

The GT initializer uses a prior known odometry to publish an initial path in world scale.

Parameters

  • imu_topic: imu topic to use mainly as a timing mechanism for when messages are coming in
  • frame_initializer_config: path to frame initializer config here
  • trajectory_time_window: time window to wait for a valid trajectory
  • min_trajectory_length: minimum length in metres for a valid trajectory

VO Initializer

The VO Initializer uses images only to estimate an up to scale initial path using relative pose estimation and structure from motion.

Parameters

  • image_topic: image topic
  • detector: detector to use, see here
  • detector_config: path to detector config, see 'here
  • tracker_config: 'here
  • parallax: pixel parallax for between a valid start and end image to begin sfm
  • tracker_window_size: number of images to store in memory for the tracker

Sensor Models

Global Mapper

The global mapper creates and manages "slam chunks" from the local mapper, looks for and processes loop closures and performs global pose graph optimization.

Parameters

  • global_map_config :
  • output_path:
  • offline_map_path:
  • save_global_map_data:
  • save_submaps:
  • save_submap_frames:
  • save_trajectory_cloud:
  • save_local_mapper_trajectory:
  • save_local_mapper_maps:
  • publish_new_submaps:
  • publish_updated_global_map:
  • publish_new_scans:
  • disable_loop_closure:

Inertial Odometry

Inertial odometry performs odometry purely off IMU data, this requires the use of a slam initializer to estimate initial imu parameters. Due to the large drift of imu's it is not reccomened to use this by itself, instead either lidar odometry or potentially a GPS based sensor model should be used with this.

TODO:

  • add ability to use a frame initializer with this sensor

Parameters

  • msg_queue_size: message queue size for imu callback
  • input_topic: imu topic
  • init_use_scale_estimate: true if slam initializer isn't to world scale (vo_initializer)
  • keyframe_rate: time between states

Lidar Aggregation

Parameters

  • aggregation_time_topic:
  • odometry_topic:
  • pointcloud_topic:
  • sensor_frame_id_override:
  • lidar_type:
  • max_aggregation_time_seconds:
  • use_trigger:

Lidar Odometry

TODO:

  • add ability to use lidar odometry byitself without a frame initializer (assume a constant velocity motion model for initala pose estimates)

Parameters

  • local_registration_type:
  • local_registration_config_path:
  • local_matcher_params_path:
  • local_registration_noise_diagonal:
  • global_registration_type:
  • global_matcher_params_path:
  • global_registration_noise_diagonal:
  • lidar_type:
  • input_filters_config_path:
  • input_topic:
  • output_loam_points:
  • output_lidar_points:
  • publish_active_submap:
  • publish_local_map:
  • publish_registration_results:
  • frame_initializer_config:
  • frame_initializer_prior_noise_diagonal:
  • reloc_request_period:
  • scan_output_directory:

Visual Inertial Odometry

Visual inertial odometry tightly couples imu and visual measurements using imu preintegration and a KLT based visual feature tracker. Like inertial odometry a SLAM initializer is also required to bootstrap this sensor model.

Parameters

  • image_topic: topic of image messages
  • imu_topic: topic of imu messages
  • frame_initializer_config: path to frame initializer config, see here
  • reloc_request_period: time ins seconds between reloc requests
  • descriptor: descriptor type to use, see here, empty if no descriptor extraction desired
  • detector: detector to use, see here
  • descriptor_config: path to descriptor config to use see, 'here
  • detector_config: path to detector config to use, see 'here
  • tracker_config: path to tracker config to use, see 'here
  • tracker_window_size: number of images to store in memory for the visual feature tracker
  • num_features_to_track: number of features being tracked pure image, should match the detector config
  • keyframe_window_size: number of keyframes to store in memory for the current sliding window (independent of the optimization window)
  • keyframe_parallax: minimum average pixel parallax between images to determine a new keyframe
  • init_max_optimization_time_in_seconds: maxmium amount of time to optimize the initial visual map
  • init_map_output_directory: output directory to output initialization result, empty if not desired
  • init_use_scale_estimate: true if slam initializer is not in world scale (vo_initializer)
  • save_keyframes_folder: output directory to save keyframes, empty if not desired

Unicycle 3D

Parameters

  • process_noise_diagonal:
  • buffer_length: