• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

Cartographer 源码解析1.2 —— 代码结构

人工智能 梦凝小筑 2148次浏览 0个评论

 *转载请注明出处 @梦凝小筑

1.2 Cartographer 源码软件结构

    Cartographer 的源码中,主要有两大部分:

    1,Cartographer 算法核心代码,在Cartographer文件夹中,

    2,Cartographer 在 ros 平台的接口,在Cartographer_ros文件夹中

    *    还有一个ceres-solver google 的开源 优化库 ,用来求解各种优化问题 ,这里不介绍。

    软件结构如图所示:

Cartographer 源码解析1.2 —— 代码结构

解析

(1)Cartographer_ros

作用:Cartographer 在 ros 平台的接口 , 启动rosj节点、读取来自传感器数据、处理并将数据上传给核心Cartographer核心算法部分、载入外部参数、初始化Extrapolator等

模块:Options、node、MapBuilderBridge、SensorBridge、TfBridge

Options:

主要代码文件:node_option.cc 、node_option.h 、trajectory_options.cc 、trajectory_options.h 

    功能:

  NodeOptions node_options;//!定义Cartographer最初级选项
  TrajectoryOptions trajectory_options;//!定义建图的一些设置参数
 
  //!LoadOptions从外部载入参数,并赋值给 node_options和 trajectory_options
  //!输入参数 有launch文件中导入,分别是参数文件的路径和文件名
  std::tie(node_options, trajectory_options) =
      LoadOptions(FLAGS_configuration_directory, FLAGS_configuration_basename);

node:

  主要代码文件:node.cc 、node.h

    功能:

    Node::LoadState  cartographer参数载入的入口

  //!调用MapBuilderBridge.LoadState
  map_builder_bridge_.LoadState(state_filename, load_frozen_state);

 Node::StartTrajectoryWithDefaultTopics 建图前的设置

  CHECK(ValidateTrajectoryOptions(options));
  //!建图前的设置
  AddTrajectory(options, DefaultSensorTopics());

    Node::AddTrajectory

int Node::AddTrajectory(const TrajectoryOptions& options,
                        const cartographer_ros_msgs::SensorTopics& topics) {
  const std::set<cartographer::mapping::TrajectoryBuilderInterface::SensorId>
      expected_sensor_ids = ComputeExpectedSensorIds(options, topics);//!预期id
 
  //!根据参数初始化MapBuilderBridge
  //!MapBuilderBridge map_builder_bridge_ GUARDED_BY(mutex_);
  const int trajectory_id =
      map_builder_bridge_.AddTrajectory(expected_sensor_ids, options);
  AddExtrapolator(trajectory_id, options);//!设置外推器的参数
  AddSensorSamplers(trajectory_id, options);
  LaunchSubscribers(options, topics, trajectory_id);//!消息订阅
  wall_timers_.push_back(node_handle_.createWallTimer( //! ros 计时器
      ::ros::WallDuration(kTopicMismatchCheckDelaySec),
      &Node::MaybeWarnAboutTopicMismatch, this, /*oneshot=*/true));
  for (const auto& sensor_id : expected_sensor_ids) {
    subscribed_topics_.insert(sensor_id.id);
  }
  return trajectory_id;
}

   Node::ComputeExpectedSensorIds

    Node::AddExtrapolator

    Node::AddSensorSamplers

    Node::LaunchSubscribers  (*重要) 定义topic订阅器,订阅各个传感器信息

 

MapBuilderBridge:

—-持续更新—-


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明Cartographer 源码解析1.2 —— 代码结构
喜欢 (0)

您必须 登录 才能发表评论!

加载中……