链接:
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 版权协议,转载请附上原文出处链接和本声明。