cartographer源码分析(48)-mapping-imu_tracker.h

本文深入探讨了Cartographer开源SLAM库中mapping模块的imu_tracker.h源码,详细分析了如何利用IMU数据进行状态估计,对理解和实现SLAM算法具有指导意义。

markdown文件可在https://github.com/learnmoreonce/SLAM 下载


文件:imu_tracker.h


#ifndef CARTOGRAPHER_MAPPING_IMU_TRACKER_H_
#define CARTOGRAPHER_MAPPING_IMU_TRACKER_H_

#include "Eigen/Geometry"
#include "cartographer/common/time.h"

namespace cartographer {
   
   
namespace mapping {
   
   


/*
ImuTracker
作用:使用来自imu的角速度+加速度用于跟踪pose的orientation


构造函数指定重力加速度g和最新测量时间。
数据成员包含
1,加速度g
2,测量时间
3,方向,四元数
4,三个加速度3d
5,imu角速度

*/
// Keeps track of the orientation using angular velocities and linear
// accelerations from an IMU. Because averaged linear acceleration (assuming
// slow movement) is a direct measurement of gravity, 
// roll/pitch does not drift,though yaw does.
//x,y轴不会drift漂移。z轴可能会产生漂移。(有累计误差)
class ImuTracker {
   
   
 public:
  ImuTracker(double imu_gravity_time_constant, common::Time time);


  // Advances to the given 'time' and updates the orientation to reflect this.
  // 系统时间增加t,更新方向角
  void Advance(common::Time time);

  // Updates from an IMU reading (in the IMU frame).
  void AddImuLinearAccelerationObservation(   //加速度
      const Eigen::Vector3d& imu_linear_acceleration);

  void AddImuAngularVelocityObservation(      //角速度
      
[INFO] [launch]: All log files can be found below /home/michael/.ros/log/2025-11-13-20-58-01-810975-michael-Legion-Y7000-IRX9-19250 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [ldlidar-1]: process started with pid [19251] [INFO] [static_transform_publisher-2]: process started with pid [19253] [INFO] [cartographer_node-3]: process started with pid [19255] [INFO] [cartographer_occupancy_grid_node-4]: process started with pid [19257] [ldlidar-1] [INFO] [1763038681.848068170] [rclcpp]: Using port /dev/ttyUSB0 [ldlidar-1] [INFO] [1763038681.848215863] [rclcpp]: LiDAR_LD06 started successfully [static_transform_publisher-2] [INFO] [1763038681.854935283] [static_transform_publisher_rhh6TZQasS30xSPv]: Spinning until stopped - publishing transform [static_transform_publisher-2] translation: ('0.000000', '0.000000', '0.000000') [static_transform_publisher-2] rotation: ('0.000000', '0.000000', '0.000000', '1.000000') [static_transform_publisher-2] from 'base_link' to 'laser' [cartographer_node-3] [INFO] [1763038681.866653454] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/home/michael/ros2_ws/install/ldlidar-ros2/share/ldlidar-ros2/configuration_files/mylaser.lua' for 'mylaser.lua'. [cartographer_node-3] [INFO] [1763038681.866834936] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-3] [INFO] [1763038681.866843969] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/map_builder.lua' for 'map_builder.lua'. [cartographer_node-3] [INFO] [1763038681.866860499] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-3] [INFO] [1763038681.866866271] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/pose_graph.lua' for 'pose_graph.lua'. [cartographer_node-3] [INFO] [1763038681.866925744] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-3] [INFO] [1763038681.866931863] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder.lua' for 'trajectory_builder.lua'. [cartographer_node-3] [INFO] [1763038681.866948391] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-3] [INFO] [1763038681.866953836] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_2d.lua' for 'trajectory_builder_2d.lua'. [cartographer_node-3] [INFO] [1763038681.867004255] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-3] [INFO] [1763038681.867010139] [cartographer logger]: I1113 20:58:01.000000 19255 configuration_file_resolver.cc:41] Found '/opt/ros/humble/share/cartographer/configuration_files/trajectory_builder_3d.lua' for 'trajectory_builder_3d.lua'. [cartographer_node-3] F1113 20:58:01.867271 19255 lua_parameter_dictionary.cc:399] Check failed: HasKey(key) Key 'rangefinder_sampling_ratio' not in dictionary: [cartographer_node-3] { [cartographer_node-3] lookup_transform_timeout_sec = 0.200000, [cartographer_node-3] map_builder = { [cartographer_node-3] collate_by_trajectory = false, [cartographer_node-3] num_background_threads = 4.000000, [cartographer_node-3] pose_graph = { [cartographer_node-3] constraint_builder = { [cartographer_node-3] ceres_scan_matcher = { [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 10.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = true, [cartographer_node-3] }, [cartographer_node-3] occupied_space_weight = 20.000000, [cartographer_node-3] rotation_weight = 1.000000, [cartographer_node-3] translation_weight = 10.000000, [cartographer_node-3] }, [cartographer_node-3] ceres_scan_matcher_3d = { [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 10.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] occupied_space_weight_0 = 5.000000, [cartographer_node-3] occupied_space_weight_1 = 30.000000, [cartographer_node-3] only_optimize_yaw = false, [cartographer_node-3] rotation_weight = 1.000000, [cartographer_node-3] translation_weight = 10.000000, [cartographer_node-3] }, [cartographer_node-3] fast_correlative_scan_matcher = { [cartographer_node-3] angular_search_window = 0.523599, [cartographer_node-3] branch_and_bound_depth = 7.000000, [cartographer_node-3] linear_search_window = 7.000000, [cartographer_node-3] }, [cartographer_node-3] fast_correlative_scan_matcher_3d = { [cartographer_node-3] angular_search_window = 0.261799, [cartographer_node-3] branch_and_bound_depth = 8.000000, [cartographer_node-3] full_resolution_depth = 3.000000, [cartographer_node-3] linear_xy_search_window = 5.000000, [cartographer_node-3] linear_z_search_window = 1.000000, [cartographer_node-3] min_low_resolution_score = 0.550000, [cartographer_node-3] min_rotational_score = 0.770000, [cartographer_node-3] }, [cartographer_node-3] global_localization_min_score = 0.600000, [cartographer_node-3] log_matches = true, [cartographer_node-3] loop_closure_rotation_weight = 100000.000000, [cartographer_node-3] loop_closure_translation_weight = 11000.000000, [cartographer_node-3] max_constraint_distance = 15.000000, [cartographer_node-3] min_score = 0.650000, [cartographer_node-3] sampling_ratio = 0.300000, [cartographer_node-3] }, [cartographer_node-3] global_constraint_search_after_n_seconds = 10.000000, [cartographer_node-3] global_sampling_ratio = 0.003000, [cartographer_node-3] log_residual_histograms = true, [cartographer_node-3] matcher_rotation_weight = 1600.000000, [cartographer_node-3] matcher_translation_weight = 500.000000, [cartographer_node-3] max_num_final_iterations = 200.000000, [cartographer_node-3] optimization_problem = { [cartographer_node-3] acceleration_weight = 110.000000, [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 50.000000, [cartographer_node-3] num_threads = 7.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] fix_z_in_3d = false, [cartographer_node-3] fixed_frame_pose_rotation_weight = 100.000000, [cartographer_node-3] fixed_frame_pose_tolerant_loss_param_a = 1.000000, [cartographer_node-3] fixed_frame_pose_tolerant_loss_param_b = 1.000000, [cartographer_node-3] fixed_frame_pose_translation_weight = 10.000000, [cartographer_node-3] fixed_frame_pose_use_tolerant_loss = false, [cartographer_node-3] huber_scale = 100.000000, [cartographer_node-3] local_slam_pose_rotation_weight = 100000.000000, [cartographer_node-3] local_slam_pose_translation_weight = 100000.000000, [cartographer_node-3] log_solver_summary = false, [cartographer_node-3] odometry_rotation_weight = 100000.000000, [cartographer_node-3] odometry_translation_weight = 100000.000000, [cartographer_node-3] rotation_weight = 16000.000000, [cartographer_node-3] use_online_imu_extrinsics_in_3d = true, [cartographer_node-3] }, [cartographer_node-3] optimize_every_n_nodes = 35.000000, [cartographer_node-3] }, [cartographer_node-3] use_trajectory_builder_2d = true, [cartographer_node-3] use_trajectory_builder_3d = false, [cartographer_node-3] }, [cartographer_node-3] map_frame = "map", [cartographer_node-3] num_laser_scans = 1.000000, [cartographer_node-3] num_multi_echo_laser_scans = 0.000000, [cartographer_node-3] num_point_clouds = 0.000000, [cartographer_node-3] num_subdivisions_per_laser_scan = 1.000000, [cartographer_node-3] odom_frame = "odom", [cartographer_node-3] pose_publish_period_sec = 0.005000, [cartographer_node-3] provide_odom_frame = false, [cartographer_node-3] publish_frame_projected_to_2d = false, [cartographer_node-3] published_frame = "laser", [cartographer_node-3] submap_publish_period_sec = 0.300000, [cartographer_node-3] tracking_frame = "laser", [cartographer_node-3] trajectory_builder = { [cartographer_node-3] collate_fixed_frame = true, [cartographer_node-3] collate_landmarks = false, [cartographer_node-3] trajectory_builder_2d = { [cartographer_node-3] adaptive_voxel_filter = { [cartographer_node-3] max_length = 0.500000, [cartographer_node-3] max_range = 50.000000, [cartographer_node-3] min_num_points = 200.000000, [cartographer_node-3] }, [cartographer_node-3] ceres_scan_matcher = { [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 20.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] occupied_space_weight = 1.000000, [cartographer_node-3] rotation_weight = 40.000000, [cartographer_node-3] translation_weight = 10.000000, [cartographer_node-3] }, [cartographer_node-3] imu_gravity_time_constant = 10.000000, [cartographer_node-3] loop_closure_adaptive_voxel_filter = { [cartographer_node-3] max_length = 0.900000, [cartographer_node-3] max_range = 50.000000, [cartographer_node-3] min_num_points = 100.000000, [cartographer_node-3] }, [cartographer_node-3] max_range = 12.000000, [cartographer_node-3] max_z = 2.000000, [cartographer_node-3] min_range = 0.100000, [cartographer_node-3] min_z = -0.800000, [cartographer_node-3] missing_data_ray_length = 5.000000, [cartographer_node-3] motion_filter = { [cartographer_node-3] max_angle_radians = 0.017453, [cartographer_node-3] max_distance_meters = 0.200000, [cartographer_node-3] max_time_seconds = 5.000000, [cartographer_node-3] }, [cartographer_node-3] num_accumulated_range_data = 1.000000, [cartographer_node-3] pose_extrapolator = { [cartographer_node-3] constant_velocity = { [cartographer_node-3] imu_gravity_time_constant = 10.000000, [cartographer_node-3] pose_queue_duration = 0.001000, [cartographer_node-3] }, [cartographer_node-3] imu_based = { [cartographer_node-3] gravity_constant = 9.806000, [cartographer_node-3] imu_acceleration_weight = 1.000000, [cartographer_node-3] imu_rotation_weight = 1.000000, [cartographer_node-3] odometry_rotation_weight = 1.000000, [cartographer_node-3] odometry_translation_weight = 1.000000, [cartographer_node-3] pose_queue_duration = 5.000000, [cartographer_node-3] pose_rotation_weight = 1.000000, [cartographer_node-3] pose_translation_weight = 1.000000, [cartographer_node-3] solver_options = { [cartographer_node-3] max_num_iterations = 10.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] use_imu_based = false, [cartographer_node-3] }, [cartographer_node-3] real_time_correlative_scan_matcher = { [cartographer_node-3] angular_search_window = 0.349066, [cartographer_node-3] linear_search_window = 0.100000, [cartographer_node-3] rotation_delta_cost_weight = 0.100000, [cartographer_node-3] translation_delta_cost_weight = 10.000000, [cartographer_node-3] }, [cartographer_node-3] submaps = { [cartographer_node-3] grid_options_2d = { [cartographer_node-3] grid_type = "PROBABILITY_GRID", [cartographer_node-3] resolution = 0.050000, [cartographer_node-3] }, [cartographer_node-3] num_range_data = 35.000000, [cartographer_node-3] range_data_inserter = { [cartographer_node-3] probability_grid_range_data_inserter = { [cartographer_node-3] hit_probability = 0.550000, [cartographer_node-3] insert_free_space = true, [cartographer_node-3] miss_probability = 0.490000, [cartographer_node-3] }, [cartographer_node-3] range_data_inserter_type = "PROBABILITY_GRID_INSERTER_2D", [cartographer_node-3] tsdf_range_data_inserter = { [cartographer_node-3] maximum_weight = 10.000000, [cartographer_node-3] normal_estimation_options = { [cartographer_node-3] num_normal_samples = 4.000000, [cartographer_node-3] sample_radius = 0.500000, [cartographer_node-3] }, [cartographer_node-3] project_sdf_distance_to_scan_normal = true, [cartographer_node-3] truncation_distance = 0.300000, [cartographer_node-3] update_free_space = false, [cartographer_node-3] update_weight_angle_scan_normal_to_ray_kernel_bandwidth = 0.500000, [cartographer_node-3] update_weight_distance_cell_to_hit_kernel_bandwidth = 0.500000, [cartographer_node-3] update_weight_range_exponent = 0.000000, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] use_imu_data = false, [cartographer_node-3] use_online_correlative_scan_matching = true, [cartographer_node-3] voxel_filter_size = 0.025000, [cartographer_node-3] }, [cartographer_node-3] trajectory_builder_3d = { [cartographer_node-3] ceres_scan_matcher = { [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 12.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] intensity_cost_function_options_0 = { [cartographer_node-3] huber_scale = 0.300000, [cartographer_node-3] intensity_threshold = 40.000000, [cartographer_node-3] weight = 0.500000, [cartographer_node-3] }, [cartographer_node-3] occupied_space_weight_0 = 1.000000, [cartographer_node-3] occupied_space_weight_1 = 6.000000, [cartographer_node-3] only_optimize_yaw = false, [cartographer_node-3] rotation_weight = 400.000000, [cartographer_node-3] translation_weight = 5.000000, [cartographer_node-3] }, [cartographer_node-3] high_resolution_adaptive_voxel_filter = { [cartographer_node-3] max_length = 2.000000, [cartographer_node-3] max_range = 15.000000, [cartographer_node-3] min_num_points = 150.000000, [cartographer_node-3] }, [cartographer_node-3] imu_gravity_time_constant = 10.000000, [cartographer_node-3] low_resolution_adaptive_voxel_filter = { [cartographer_node-3] max_length = 4.000000, [cartographer_node-3] max_range = 60.000000, [cartographer_node-3] min_num_points = 200.000000, [cartographer_node-3] }, [cartographer_node-3] max_range = 60.000000, [cartographer_node-3] min_range = 1.000000, [cartographer_node-3] motion_filter = { [cartographer_node-3] max_angle_radians = 0.004000, [cartographer_node-3] max_distance_meters = 0.100000, [cartographer_node-3] max_time_seconds = 0.500000, [cartographer_node-3] }, [cartographer_node-3] num_accumulated_range_data = 1.000000, [cartographer_node-3] pose_extrapolator = { [cartographer_node-3] constant_velocity = { [cartographer_node-3] imu_gravity_time_constant = 10.000000, [cartographer_node-3] pose_queue_duration = 0.001000, [cartographer_node-3] }, [cartographer_node-3] imu_based = { [cartographer_node-3] gravity_constant = 9.806000, [cartographer_node-3] imu_acceleration_weight = 1.000000, [cartographer_node-3] imu_rotation_weight = 1.000000, [cartographer_node-3] odometry_rotation_weight = 1.000000, [cartographer_node-3] odometry_translation_weight = 1.000000, [cartographer_node-3] pose_queue_duration = 5.000000, [cartographer_node-3] pose_rotation_weight = 1.000000, [cartographer_node-3] pose_translation_weight = 1.000000, [cartographer_node-3] solver_options = { [cartographer_node-3] max_num_iterations = 10.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] use_imu_based = false, [cartographer_node-3] }, [cartographer_node-3] real_time_correlative_scan_matcher = { [cartographer_node-3] angular_search_window = 0.017453, [cartographer_node-3] linear_search_window = 0.150000, [cartographer_node-3] rotation_delta_cost_weight = 0.100000, [cartographer_node-3] translation_delta_cost_weight = 0.100000, [cartographer_node-3] }, [cartographer_node-3] rotational_histogram_size = 120.000000, [cartographer_node-3] submaps = { [cartographer_node-3] high_resolution = 0.100000, [cartographer_node-3] high_resolution_max_range = 20.000000, [cartographer_node-3] low_resolution = 0.450000, [cartographer_node-3] num_range_data = 160.000000, [cartographer_node-3] range_data_inserter = { [cartographer_node-3] hit_probability = 0.550000, [cartographer_node-3] intensity_threshold = 40.000000, [cartographer_node-3] miss_probability = 0.490000, [cartographer_node-3] num_free_space_voxels = 2.000000, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] use_intensities = false, [cartographer_node-3] use_online_correlative_scan_matching = false, [cartographer_node-3] voxel_filter_size = 0.150000, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] trajectory_publish_period_sec = 0.030000, [cartographer_node-3] use_landmarks = false, [cartographer_node-3] use_nav_sat = false, [cartographer_node-3] use_odometry = false, [cartographer_node-3] use_pose_extrapolator = false, [cartographer_node-3] } [cartographer_node-3] [FATAL] [1763038681.867573928] [cartographer logger]: F1113 20:58:01.000000 19255 lua_parameter_dictionary.cc:399] Check failed: HasKey(key) Key 'rangefinder_sampling_ratio' not in dictionary: [cartographer_node-3] { [cartographer_node-3] lookup_transform_timeout_sec = 0.200000, [cartographer_node-3] map_builder = { [cartographer_node-3] collate_by_trajectory = false, [cartographer_node-3] num_background_threads = 4.000000, [cartographer_node-3] pose_graph = { [cartographer_node-3] constraint_builder = { [cartographer_node-3] ceres_scan_matcher = { [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 10.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = true, [cartographer_node-3] }, [cartographer_node-3] occupied_space_weight = 20.000000, [cartographer_node-3] rotation_weight = 1.000000, [cartographer_node-3] translation_weight = 10.000000, [cartographer_node-3] }, [cartographer_node-3] ceres_scan_matcher_3d = { [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 10.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] occupied_space_weight_0 = 5.000000, [cartographer_node-3] occupied_space_weight_1 = 30.000000, [cartographer_node-3] only_optimize_yaw = false, [cartographer_node-3] rotation_weight = 1.000000, [cartographer_node-3] translation_weight = 10.000000, [cartographer_node-3] }, [cartographer_node-3] fast_correlative_scan_matcher = { [cartographer_node-3] angular_search_window = 0.523599, [cartographer_node-3] branch_and_bound_depth = 7.000000, [cartographer_node-3] linear_search_window = 7.000000, [cartographer_node-3] }, [cartographer_node-3] fast_correlative_scan_matcher_3d = { [cartographer_node-3] angular_search_window = 0.261799, [cartographer_node-3] branch_and_bound_depth = 8.000000, [cartographer_node-3] full_resolution_depth = 3.000000, [cartographer_node-3] linear_xy_search_window = 5.000000, [cartographer_node-3] linear_z_search_window = 1.000000, [cartographer_node-3] min_low_resolution_score = 0.550000, [cartographer_node-3] min_rotational_score = 0.770000, [cartographer_node-3] }, [cartographer_node-3] global_localization_min_score = 0.600000, [cartographer_node-3] log_matches = true, [cartographer_node-3] loop_closure_rotation_weight = 100000.000000, [cartographer_node-3] loop_closure_translation_weight = 11000.000000, [cartographer_node-3] max_constraint_distance = 15.000000, [cartographer_node-3] min_score = 0.650000, [cartographer_node-3] sampling_ratio = 0.300000, [cartographer_node-3] }, [cartographer_node-3] global_constraint_search_after_n_seconds = 10.000000, [cartographer_node-3] global_sampling_ratio = 0.003000, [cartographer_node-3] log_residual_histograms = true, [cartographer_node-3] matcher_rotation_weight = 1600.000000, [cartographer_node-3] matcher_translation_weight = 500.000000, [cartographer_node-3] max_num_final_iterations = 200.000000, [cartographer_node-3] optimization_problem = { [cartographer_node-3] acceleration_weight = 110.000000, [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 50.000000, [cartographer_node-3] num_threads = 7.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] fix_z_in_3d = false, [cartographer_node-3] fixed_frame_pose_rotation_weight = 100.000000, [cartographer_node-3] fixed_frame_pose_tolerant_loss_param_a = 1.000000, [cartographer_node-3] fixed_frame_pose_tolerant_loss_param_b = 1.000000, [cartographer_node-3] fixed_frame_pose_translation_weight = 10.000000, [cartographer_node-3] fixed_frame_pose_use_tolerant_loss = false, [cartographer_node-3] huber_scale = 100.000000, [cartographer_node-3] local_slam_pose_rotation_weight = 100000.000000, [cartographer_node-3] local_slam_pose_translation_weight = 100000.000000, [cartographer_node-3] log_solver_summary = false, [cartographer_node-3] odometry_rotation_weight = 100000.000000, [cartographer_node-3] odometry_translation_weight = 100000.000000, [cartographer_node-3] rotation_weight = 16000.000000, [cartographer_node-3] use_online_imu_extrinsics_in_3d = true, [cartographer_node-3] }, [cartographer_node-3] optimize_every_n_nodes = 35.000000, [cartographer_node-3] }, [cartographer_node-3] use_trajectory_builder_2d = true, [cartographer_node-3] use_trajectory_builder_3d = false, [cartographer_node-3] }, [cartographer_node-3] map_frame = "map", [cartographer_node-3] num_laser_scans = 1.000000, [cartographer_node-3] num_multi_echo_laser_scans = 0.000000, [cartographer_node-3] num_point_clouds = 0.000000, [cartographer_node-3] num_subdivisions_per_laser_scan = 1.000000, [cartographer_node-3] odom_frame = "odom", [cartographer_node-3] pose_publish_period_sec = 0.005000, [cartographer_node-3] provide_odom_frame = false, [cartographer_node-3] publish_frame_projected_to_2d = false, [cartographer_node-3] published_frame = "laser", [cartographer_node-3] submap_publish_period_sec = 0.300000, [cartographer_node-3] tracking_frame = "laser", [cartographer_node-3] trajectory_builder = { [cartographer_node-3] collate_fixed_frame = true, [cartographer_node-3] collate_landmarks = false, [cartographer_node-3] trajectory_builder_2d = { [cartographer_node-3] adaptive_voxel_filter = { [cartographer_node-3] max_length = 0.500000, [cartographer_node-3] max_range = 50.000000, [cartographer_node-3] min_num_points = 200.000000, [cartographer_node-3] }, [cartographer_node-3] ceres_scan_matcher = { [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 20.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] occupied_space_weight = 1.000000, [cartographer_node-3] rotation_weight = 40.000000, [cartographer_node-3] translation_weight = 10.000000, [cartographer_node-3] }, [cartographer_node-3] imu_gravity_time_constant = 10.000000, [cartographer_node-3] loop_closure_adaptive_voxel_filter = { [cartographer_node-3] max_length = 0.900000, [cartographer_node-3] max_range = 50.000000, [cartographer_node-3] min_num_points = 100.000000, [cartographer_node-3] }, [cartographer_node-3] max_range = 12.000000, [cartographer_node-3] max_z = 2.000000, [cartographer_node-3] min_range = 0.100000, [cartographer_node-3] min_z = -0.800000, [cartographer_node-3] missing_data_ray_length = 5.000000, [cartographer_node-3] motion_filter = { [cartographer_node-3] max_angle_radians = 0.017453, [cartographer_node-3] max_distance_meters = 0.200000, [cartographer_node-3] max_time_seconds = 5.000000, [cartographer_node-3] }, [cartographer_node-3] num_accumulated_range_data = 1.000000, [cartographer_node-3] pose_extrapolator = { [cartographer_node-3] constant_velocity = { [cartographer_node-3] imu_gravity_time_constant = 10.000000, [cartographer_node-3] pose_queue_duration = 0.001000, [cartographer_node-3] }, [cartographer_node-3] imu_based = { [cartographer_node-3] gravity_constant = 9.806000, [cartographer_node-3] imu_acceleration_weight = 1.000000, [cartographer_node-3] imu_rotation_weight = 1.000000, [cartographer_node-3] odometry_rotation_weight = 1.000000, [cartographer_node-3] odometry_translation_weight = 1.000000, [cartographer_node-3] pose_queue_duration = 5.000000, [cartographer_node-3] pose_rotation_weight = 1.000000, [cartographer_node-3] pose_translation_weight = 1.000000, [cartographer_node-3] solver_options = { [cartographer_node-3] max_num_iterations = 10.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] use_imu_based = false, [cartographer_node-3] }, [cartographer_node-3] real_time_correlative_scan_matcher = { [cartographer_node-3] angular_search_window = 0.349066, [cartographer_node-3] linear_search_window = 0.100000, [cartographer_node-3] rotation_delta_cost_weight = 0.100000, [cartographer_node-3] translation_delta_cost_weight = 10.000000, [cartographer_node-3] }, [cartographer_node-3] submaps = { [cartographer_node-3] grid_options_2d = { [cartographer_node-3] grid_type = "PROBABILITY_GRID", [cartographer_node-3] resolution = 0.050000, [cartographer_node-3] }, [cartographer_node-3] num_range_data = 35.000000, [cartographer_node-3] range_data_inserter = { [cartographer_node-3] probability_grid_range_data_inserter = { [cartographer_node-3] hit_probability = 0.550000, [cartographer_node-3] insert_free_space = true, [cartographer_node-3] miss_probability = 0.490000, [cartographer_node-3] }, [cartographer_node-3] range_data_inserter_type = "PROBABILITY_GRID_INSERTER_2D", [cartographer_node-3] tsdf_range_data_inserter = { [cartographer_node-3] maximum_weight = 10.000000, [cartographer_node-3] normal_estimation_options = { [cartographer_node-3] num_normal_samples = 4.000000, [cartographer_node-3] sample_radius = 0.500000, [cartographer_node-3] }, [cartographer_node-3] project_sdf_distance_to_scan_normal = true, [cartographer_node-3] truncation_distance = 0.300000, [cartographer_node-3] update_free_space = false, [cartographer_node-3] update_weight_angle_scan_normal_to_ray_kernel_bandwidth = 0.500000, [cartographer_node-3] update_weight_distance_cell_to_hit_kernel_bandwidth = 0.500000, [cartographer_node-3] update_weight_range_exponent = 0.000000, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] use_imu_data = false, [cartographer_node-3] use_online_correlative_scan_matching = true, [cartographer_node-3] voxel_filter_size = 0.025000, [cartographer_node-3] }, [cartographer_node-3] trajectory_builder_3d = { [cartographer_node-3] ceres_scan_matcher = { [cartographer_node-3] ceres_solver_options = { [cartographer_node-3] max_num_iterations = 12.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] intensity_cost_function_options_0 = { [cartographer_node-3] huber_scale = 0.300000, [cartographer_node-3] intensity_threshold = 40.000000, [cartographer_node-3] weight = 0.500000, [cartographer_node-3] }, [cartographer_node-3] occupied_space_weight_0 = 1.000000, [cartographer_node-3] occupied_space_weight_1 = 6.000000, [cartographer_node-3] only_optimize_yaw = false, [cartographer_node-3] rotation_weight = 400.000000, [cartographer_node-3] translation_weight = 5.000000, [cartographer_node-3] }, [cartographer_node-3] high_resolution_adaptive_voxel_filter = { [cartographer_node-3] max_length = 2.000000, [cartographer_node-3] max_range = 15.000000, [cartographer_node-3] min_num_points = 150.000000, [cartographer_node-3] }, [cartographer_node-3] imu_gravity_time_constant = 10.000000, [cartographer_node-3] low_resolution_adaptive_voxel_filter = { [cartographer_node-3] max_length = 4.000000, [cartographer_node-3] max_range = 60.000000, [cartographer_node-3] min_num_points = 200.000000, [cartographer_node-3] }, [cartographer_node-3] max_range = 60.000000, [cartographer_node-3] min_range = 1.000000, [cartographer_node-3] motion_filter = { [cartographer_node-3] max_angle_radians = 0.004000, [cartographer_node-3] max_distance_meters = 0.100000, [cartographer_node-3] max_time_seconds = 0.500000, [cartographer_node-3] }, [cartographer_node-3] num_accumulated_range_data = 1.000000, [cartographer_node-3] pose_extrapolator = { [cartographer_node-3] constant_velocity = { [cartographer_node-3] imu_gravity_time_constant = 10.000000, [cartographer_node-3] pose_queue_duration = 0.001000, [cartographer_node-3] }, [cartographer_node-3] imu_based = { [cartographer_node-3] gravity_constant = 9.806000, [cartographer_node-3] imu_acceleration_weight = 1.000000, [cartographer_node-3] imu_rotation_weight = 1.000000, [cartographer_node-3] odometry_rotation_weight = 1.000000, [cartographer_node-3] odometry_translation_weight = 1.000000, [cartographer_node-3] pose_queue_duration = 5.000000, [cartographer_node-3] pose_rotation_weight = 1.000000, [cartographer_node-3] pose_translation_weight = 1.000000, [cartographer_node-3] solver_options = { [cartographer_node-3] max_num_iterations = 10.000000, [cartographer_node-3] num_threads = 1.000000, [cartographer_node-3] use_nonmonotonic_steps = false, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] use_imu_based = false, [cartographer_node-3] }, [cartographer_node-3] real_time_correlative_scan_matcher = { [cartographer_node-3] angular_search_window = 0.017453, [cartographer_node-3] linear_search_window = 0.150000, [cartographer_node-3] rotation_delta_cost_weight = 0.100000, [cartographer_node-3] translation_delta_cost_weight = 0.100000, [cartographer_node-3] }, [cartographer_node-3] rotational_histogram_size = 120.000000, [cartographer_node-3] submaps = { [cartographer_node-3] high_resolution = 0.100000, [cartographer_node-3] high_resolution_max_range = 20.000000, [cartographer_node-3] low_resolution = 0.450000, [cartographer_node-3] num_range_data = 160.000000, [cartographer_node-3] range_data_inserter = { [cartographer_node-3] hit_probability = 0.550000, [cartographer_node-3] intensity_threshold = 40.000000, [cartographer_node-3] miss_probability = 0.490000, [cartographer_node-3] num_free_space_voxels = 2.000000, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] use_intensities = false, [cartographer_node-3] use_online_correlative_scan_matching = false, [cartographer_node-3] voxel_filter_size = 0.150000, [cartographer_node-3] }, [cartographer_node-3] }, [cartographer_node-3] trajectory_publish_period_sec = 0.030000, [cartographer_node-3] use_landmarks = false, [cartographer_node-3] use_nav_sat = false, [cartographer_node-3] use_odometry = false, [cartographer_node-3] use_pose_extrapolator = false, [cartographer_node-3] } [cartographer_node-3] *** Check failure stack trace: *** [cartographer_node-3] @ 0x70013805eb03 google::LogMessage::Fail() [cartographer_node-3] @ 0x7001380669d1 google::LogMessage::SendToLog() [cartographer_node-3] @ 0x70013805e7c2 google::LogMessage::Flush() [cartographer_node-3] @ 0x70013806078f google::LogMessageFatal::~LogMessageFatal() [cartographer_node-3] @ 0x6244d3d20ce7 (unknown) [cartographer_node-3] @ 0x6244d3d20d66 (unknown) [cartographer_node-3] @ 0x6244d3d20ff3 (unknown) [cartographer_node-3] @ 0x6244d3d071d4 (unknown) [cartographer_node-3] @ 0x6244d3c6d7b3 (unknown) [cartographer_node-3] @ 0x700137029d90 (unknown) [cartographer_node-3] @ 0x700137029e40 __libc_start_main [cartographer_node-3] @ 0x6244d3c70d35 (unknown) [ERROR] [cartographer_node-3]: process has died [pid 19255, exit code -6, cmd '/opt/ros/humble/lib/cartographer_ros/cartographer_node -configuration_directory /home/michael/ros2_ws/install/ldlidar-ros2/share/ldlidar-ros2/configuration_files -configuration_basename mylaser.lua --ros-args --params-file /tmp/launch_params_5v_a720m -r scan:=scan'].
最新发布
11-14
`Key 'rangefinder_sampling_ratio' not in dictionary` 错误通常意味着在配置文件里尝试访问一个不存在的键。这个错误一般在运行 Cartographer 时,配置文件中的参数与 Cartographer 代码所期望的参数不匹配时出现。 解决该问题可参考以下方法: #### 1. 检查配置文件 确认配置文件里是否存在 `rangefinder_sampling_ratio` 这个参数。若没有,需要添加该参数。例如,在 Lua 配置文件中添加如下代码: ```lua TRAJECTORY_BUILDER_2D.rangefinder_sampling_ratio = 0.5 -- 可根据实际情况调整该值 ``` #### 2. 检查 Cartographer 版本 不同版本的 Cartographer 可能对配置文件的参数要求不同。确认使用的 Cartographer 版本,并且参考对应版本的文档来配置参数。 #### 3. 检查参数命名 确认参数名 `rangefinder_sampling_ratio` 拼写无误,因为参数名的大小写和拼写错误都会引发该错误。 #### 4. 更新 Cartographer 若使用的是较旧版本的 Cartographer,尝试更新到最新版本,因为新版本可能会修复一些参数相关的问题。 #### 5. 调试输出 在代码中添加调试输出,检查配置文件加载的参数,确保参数正确加载。 以下是一个示例代码片段,展示如何在 Cartographer 的 Lua 配置文件中添加 `rangefinder_sampling_ratio` 参数: ```lua -- 引入官方基础配置(保证参数结构完整) include "map_builder.lua" include "trajectory_builder.lua" -- 全局配置(适配你的雷达,坐标系与launch一致) options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, map_frame = "map", tracking_frame = "laser", -- 与launch里的lidar_frame一致 published_frame = "laser", -- 与launch里的lidar_frame一致 odom_frame = "odom", provide_odom_frame = false, publish_frame_projected_to_2d = false, use_pose_extrapolator = false, use_odometry = false, use_nav_sat = false, use_landmarks = false, num_laser_scans = 1, -- 匹配LD06的单激光扫描 num_multi_echo_laser_scans = 0, num_subdivisions_per_laser_scan = 1, num_point_clouds = 0, lookup_transform_timeout_sec = 0.2, submap_publish_period_sec = 0.3, pose_publish_period_sec = 5e-3, trajectory_publish_period_sec = 30e-3, } -- 启用2D轨迹构建器 MAP_BUILDER.use_trajectory_builder_2d = true -- 适配LD06的2D轨迹参数 TRAJECTORY_BUILDER_2D = TRAJECTORY_BUILDER.trajectory_builder_2d TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35 TRAJECTORY_BUILDER_2D.min_range = 0.1 -- 修正为LD06的最小测距 TRAJECTORY_BUILDER_2D.max_range = 12. -- 修正为LD06的最大测距 TRAJECTORY_BUILDER_2D.missing_data_ray_length = 5. TRAJECTORY_BUILDER_2D.use_imu_data = false -- LD06无IMU TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1 TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10. TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1 -- 添加 rangefinder_sampling_ratio 参数 TRAJECTORY_BUILDER_2D.rangefinder_sampling_ratio = 0.5 -- 位姿图优化参数 POSE_GRAPH = MAP_BUILDER.pose_graph POSE_GRAPH.optimization_problem.huber_scale = 1e2 POSE_GRAPH.optimize_every_n_nodes = 35 POSE_GRAPH.constraint_builder.min_score = 0.65 return options ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值