cartographer_ros node_options和trajectory_options参数

  • Post author:
  • Post category:其他


链接:

cartographer_ros node_options和trajectory_options_Teamo1996的博客-CSDN博客

在cartographer_ros/cartographer_ros/node_options.h 添加lua控制参数

struct NodeOptions {
  ::cartographer::mapping::proto::MapBuilderOptions map_builder_options;
........................
  bool submap_pure_wish;//通过这个参数初始化sensor_bridge
...................
}

在cartographer_ros/cartographer_ros/node_options.cc 实现读取

NodeOptions CreateNodeOptions(
    ::cartographer::common::LuaParameterDictionary* const
        lua_parameter_dictionary)
{
  NodeOptions options;
  options.map_builder_options =
      ::cartographer::mapping::CreateMapBuilderOptions(
          lua_parameter_dictionary->GetDictionary("map_builder").get() );
  options.map_frame = lua_parameter_dictionary->GetString("map_frame");
  options.lookup_transform_timeout_sec =
      lua_parameter_dictionary->GetDouble("lookup_transform_timeout_sec");
.....................................
      //wishchin
        options.submap_pure_wish =
      lua_parameter_dictionary->GetBool("submap_pure_wish");
............................
  return options;
}

初始化在 node_main.cc中完成的

//添加trajectory,初始化C++端
TrajectoryOptions trajectory_options;
std::cout << "LoadOptions.........................开始.........." << std::endl;
std::tie(node_options, trajectory_options) =
LoadOptions(FLAGS_configuration_directory, FLAGS_configuration_basename );

在lua配置文本里面添加submap_pure_wish =false,

include "map_builder.lua"                   --包含的cartographer里的lua文件
--include "trajectory_builder.lua"
include "trajectory_builder_pure.lua"

options = {
  map_builder = MAP_BUILDER,                -- map_builder.lua的配置信息
  trajectory_builder = TRAJECTORY_BUILDER,  -- trajectory_builder.lua的配置信息
  
  map_frame = "map",                        -- 地图坐标系的名字
  tracking_frame = "laser_link",              -- imu_link 将所有传感器数据转换到这个坐标系下,如果有imu的,就写imu的link,如果没有,就写base_link或者footprint,
  --因为cartographer会将所有传感器进行坐标变换到tracking_fram坐标系下,每个传感器的频率不一样,imu频率远高于雷达的频率,这样做可以减少计算量
  published_frame = "base_link",            -- base_footprint tf: map -> footprint 自己bag的tf最上面的坐标系的名字
  odom_frame = "odom",                      -- 里程计的坐标系名字
  provide_odom_frame = true,               -- 是否提供odom的tf, 如果为true,则tf树为map->odom->footprint
                                            -- 如果为false tf树为map->footprint
  publish_frame_projected_to_2d = false,    -- 是否将坐标系投影到平面上,没啥用
  --use_pose_extrapolator = false,            -- 发布tf时是使用pose_extrapolator的位姿还是前端计算出来的位姿,前端计算的位姿更准

  use_odometry = false,                     -- 是否使用里程计,如果使用要求一定要有odom的tf *
  use_nav_sat = false,                      -- 是否使用gps *topic形式订阅,不可订阅多个里程计/gps/landmark,要注意做重映射
  use_landmarks = false,                    -- 是否使用landmark *
  num_laser_scans = 1,                      -- 是否使用单线激光数据,可订阅多个
  num_multi_echo_laser_scans = 0,           -- 是否使用multi_echo_laser_scans数据
  num_subdivisions_per_laser_scan = 10,      -- 1帧数据被分成几次处理,一般为1
  num_point_clouds = 0,                     -- 是否使用点云数据
  
  lookup_transform_timeout_sec = 0.2,       -- 查找tf时的超时时间
  submap_publish_period_sec = 0.3,          -- 发布数据的时间间隔
  pose_publish_period_sec = 10e-3,
  trajectory_publish_period_sec = 30e-3,

  rangefinder_sampling_ratio = 1.,          -- 传感器数据的采样频率
  odometry_sampling_ratio = 1.,             --设成0.1即来10帧用1帧
  fixed_frame_pose_sampling_ratio = 1.,     --某个传感器不准,可以降低其使用频率
  imu_sampling_ratio = 1.,                  --如若不准,一般直接弃用即可
  landmarks_sampling_ratio = 1.,
  is_in_slam_mode = false,  --是否在slam模式,如果在slam模式,则解除全部限制
  submap_pure_wish =false, 
}

则可以直接使用了



版权声明:本文为wishchin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。