cartographer 代码分析

5.1激光数据处理流程

1.入口文件:node_main.cc

入口函数main,如下图:

      ::ros::init(argc, argv, "cartographer_node");

      ::ros::start();

     

      cartographer_ros::ScopedRosLogSink ros_log_sink;

      cartographer_ros::Run();

 

  1. void Run()  

//加载配置文件,并返回给(node_options, trajectory_options)

  std::tie(node_options, trajectory_options) =

      LoadOptions(FLAGS_configuration_directory, FLAGS_configuration_basename);

  //根据参数订阅相对应的主题消息

  Node node(node_options, std::move(map_builder), &tf_buffer,

            FLAGS_collect_metrics);

  if (!FLAGS_load_state_filename.empty()) {

    node.LoadState(FLAGS_load_state_filename, FLAGS_load_frozen_state);

  }

  //启动轨迹处

  if (FLAGS_start_trajectory_with_default_topics) {

    node.StartTrajectoryWithDefaultTopics(trajectory_options);

  }
  1. 其中LoadOptions 转到node_options.cc 中,Node 就转到node.cc 定义发布器和订阅器

入口文件:node.cc
 

Node::Node(const NodeOptions& node_options, tf2_ros::Buffer* const tf_buffer): node_options_(node_options),
            map_builder_bridge_(node_options_, tf_buffer)
{
    //submap发布器,往kSubmapListTopic 发布
    //::cartographer_ros_msgs::SubmapList 消息
    submap_list_publisher_
    
    //路径发布器,向kTrajectoryNodeListTopic这个Topic上发布了
    //一个::visualization_msgs::MarkerArray型的message
    trajectory_node_list_publisher_
    
    //请求子图submap服务
    kSubmapQueryServiceName
    
    //定时器,发布获取子图
      wall_timers_.push_back(node_handle_.createWallTimer(
      ::ros::WallDuration(node_options_.submap_publish_period_sec),
      &Node::PublishSubmapList, this));
    
}
//启动轨迹
StartTrajectoryWithDefaultTopics
{
    AddTrajectory(options, DefaultSensorTopics());
}  

 
int Node::AddTrajectory(const TrajectoryOptions& options,
             const cart
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值