Cartographer早期的代码在进行3d制图的时候使用了UKF方法,查看现有的tag版本,可以转到0.1.0和0.2.0查看,包含kalman_filter文件夹. 文件夹中的pose_tracker类文件在mapping_3d的文件加下有kalman_local_trajectory_builder.目前这部分代码已经移除,整个代码的结构也发生了较大变动. 项目的主要逻辑结构:https://google-cartographer.readthedocs.io/en/latest/ 当前项…
带着几个思考问题: (1)IMU数据的使用,如何融合,Kalman滤波? (2)图优化的具体实现,闭环检测的策略? (3)3D激光的接入和闭环策略? 1. 安装Kdevelop工具: http://blog.csdn.net/p942005405/article/details/75715288 http://blog.csdn.net/wan_exe/article/details/56275108 yhexie@ubuntu:~$ sudo apt-get install kdevelop…
MapBuilder的成员变量sensor::Collator sensor_collator_; 再次阅读MapBuilder::AddTrajectoryBuilder方法.首先构造了mapping::GlobalTrajectoryBuilder实例,接着作为参数构造了CollatedTrajectoryBuilder实例. trajectory_builders_.push_back( common::make_unique<CollatedTrajectoryBuilder>( &a…
上文提到特别注意map_builder_bridge_.AddTrajectory(x,x),查看其中的代码.两点: 首先是map_builder_.AddTrajectoryBuilder(...),调用了map_builder_对象的方法.其次是sensor_bridges_键值对的赋值. int MapBuilderBridge::AddTrajectory(const std::unordered_set<std::string>& expected_sensor_ids, c…
IMU的输入为imu_linear_acceleration 和  imu_angular_velocity 线加速和角速度.最终作为属性输出的是方位四元数.  Eigen::Quaterniond orientation() const { return orientation_; } /* * Copyright 2016 The Cartographer Authors * * Licensed under the Apache License, Version 2.0 (the "Lic…
LocalTrajectoryBuilder意思是局部轨迹的构建,下面的类图中方法的参数没有画进去. 注意其中的三个类:PoseExtrapolator类,RealTimeCorrelativeScanMatcher类和CeresScanMatcher类. (1)PoseExtrapolator类(如下图),Node类和LocalTrajectoryBuilder类都有用到PoseExtrapolator对象,好像两者之间并没有什么关系? LocalTrajectoryBuilder中的Pose…
PoseGraph位姿图 mapping2D::PoseGraph类的注释: // Implements the loop closure method called Sparse Pose Adjustment (SPA) from// Konolige, Kurt, et al. "Efficient sparse pose adjustment for 2d mapping."// Intelligent Robots and Systems (IROS), 2010 IEEE/…
约束计算 闭环检测的策略:搜索闭环,通过匹配检测是否是闭环,采用了分支定界法. 前已经述及PoseGraph的内容,此处继续.位姿图类定义了pose_graph::ConstraintBuilder constraint_builder_对象. 1.ConstraintBuilder类图 定义了SubmapScanMatcher的键值对. // Map of already constructed scan matchers by 'submap_id'. std::map<mapping::S…
其实也就是包括两个方面的内容:类似于运动模型的位姿估计和扫描匹配,因为需要计算速度,所以时间就有必要了! 1. PoseExtrapolator解决了IMU数据.里程计和位姿信息进行融合的问题. 该类定义了三个队列. std::deque<TimedPose> timed_pose_queue_; std::deque<sensor::ImuData> imu_data_; std::deque<sensor::OdometryData> odometry_data_;…
  C家最近也有一篇关于如何阅读大型c项目源代码的文章,学习..融合.. -------------------- ref:http://www.csdn.net/article/2014-06-05/2820092-interview-with-pengxu   摘要:阅读源码是开源项目最好的学习方式,然而真正的执行起来却并不容易.这里我们为大家分享许鹏的源码阅读经验.C程序员的修养以及Spark和Storm源码走读博文. 对许鹏的第一印象来源于其Bolg的粗读,最早时候更准确说应该是博文的粗…