Cartographer
文章平均质量分 62
yaoyaoqiekenaoo
这个作者很懒,什么都没留下…
展开
-
[cartographer] 10. ShrinkToFit
该函数的核心目的就是缩小xy搜索框:因为如果对于某一个xy,该帧点云已经全部位于待匹配submap的外部,则该xy肯定不是正确解。该函数就是为了去除这些无效解的。这也可以理解,为啥全局搜索时,给定的初始xy搜索范围很大:1e6特地说明一点:cartographer中的栅格图的坐标是:原点在右上角,x 朝左,y朝下。而且对于某个cell,其在栅格中的坐标是行优先即:(row, col)第一个元素表示该cell在第几行。这与矩阵中某个元素的位置表示方法类似。主要参考该文章:这里...原创 2021-11-26 19:34:12 · 385 阅读 · 0 评论 -
[cartographer疑问系列] 8. lidar数据类型解析 + 多lidar数据时间对齐操作+运动畸变去除
一、lidar数据类型解析1. bag包发布的lidar数据数据的类型是:ros中激光雷达的消息类型 sensor_msgs/LaserScan Messageheader.timestamp : 该帧激光的time; 是获取第一束激光的时刻。但是cartographer中,设置为获取最后一束激光的时刻。然后转为所需的数据结构:{ time; // 该帧激光数据的时间; PointCloudWithIntensities;//点云数据}// 以下是类型..原创 2021-11-25 18:11:43 · 1615 阅读 · 1 评论 -
[cartographer疑问系列] 9. 如何利用3D 数据生层2D栅格地图
记轨迹系 为 L 系, 当前帧系 为 c 系, 重力系为 W 系我们想要做的是: 1. 估计的 3D pose Tlc 的投影,直接取 x y ----- 在 L系下进行投影 2. 当前帧的点云投影,直接取 x y --- 必须满足:当前帧系 与L系的 Z 轴重合如果机器人肯定是在平面上运动,那么很简单,直接取 x y 即可。如果机器人是一个3D空间的运动呢,如何达到上述要求呢?难点是第2点,地图系是固定的,但是当前帧系是变化的啊,如何保证两者的 Z 轴重合呢?...原创 2021-11-25 18:09:55 · 777 阅读 · 0 评论 -
[cartographer疑问系列] 3. 地图如何增长
通常,初始化一个Grid Map时,地图不会很大,而是随着移动而实时的扩大地图。cartographer中,地图增长函数是 gird_2d.cc文件中 GrowLimits。我们还是从地图增长的源头(即插入rangedata to 地图)开始:在文件 probability_grid_range_data_inserter_2d.cc 中,CastRays 函数内容如下:void CastRays(const sensor::RangeData& range_data,原创 2021-11-22 18:34:39 · 670 阅读 · 0 评论 -
[cartographer疑问系列] 1. 优化之后的recover
优化后的recover有两个目的:1. rviz显示2. for 下一次优化具体的recover操作在pose_graph_2d.cc 的 RunOptimization 函数://正式进行优化的函数.void PoseGraph2D::RunOptimization(){ if (optimization_problem_->submap_data().empty()) { return; } // No other thread is access.原创 2021-11-22 18:08:48 · 613 阅读 · 0 评论 -
[cartographer] 9. proto配置文件读取
目录1. proto文件2. .lua配置文件3. 代码1)读取lua文件2)赋值给proto options 获取proto参数值有两种方式:1)lua文件 2)通过service,例如如下代码中 InitialTrajectoryPose 的赋值3) 如何使用 proto options纯定位模式入口我们需要掌握的是什么?要知道在哪里改变参数,从而更深入的理解算法。系统的配置文件框架主要有三部分构成:1. proto文件 - 根据自己的需要,自定...原创 2021-11-20 16:04:24 · 1602 阅读 · 1 评论 -
[Cartographer] 8. 后端 BNB fast-CSM
1. 如何选择 BFS bnb or DFS bnb ? 由 什么时候可以确定 下界 来决定。 肯定是优先选择 BFS , 因为这样可以减少分支情况。 1)如果每个分支都可以作为可行解,那么每个分支都可以计算下界并更新全局下界。则采用广度优先。 例如:MF 曼哈顿求解时,在 Bpai 空间中 求解旋转矩阵。2)如果必须在叶子分支才可以计算下界,则必须采用深度优先。例如:cartographer中 ,多分辨率地图。中间的分支可以计算得到上界,因为每个分辨率地图中大栅格的值都是m...原创 2021-11-18 20:13:31 · 586 阅读 · 0 评论 -
[cartographer] 7. 传感器数据从ROS流到slam
我们知道了,GlobalTrajectoryBuilder 是 slam系统的顶层设计,该类中包含了两个成员变量:localTrajectoryBuilder 负责前端localslam ; PoseGraph 负责后端 (是从MapBuilder类中的posegraph传递过来的)。那么,传感器数据是如何流到GlobalTrajectoryBuilder从而被处理的呢?一、基础类 OrderedMultiQueue下面介绍 sensor::TrajectoryCollator 类absl::f原创 2021-11-17 10:46:34 · 421 阅读 · 0 评论