cartographer学习记录
文章平均质量分 92
cartographer源码学习笔记
小z小z
小猪佩不齐
展开
-
cartographer_ros数据加载与处理
里程计与IMU数据的走向里程计数据从Node类的回调函数进来, 有两个走向, 一个是Node类中的位姿估计器, 一个是SensorBridge::HandleOdometryMessage, 再从SensorBridge传递给cartographer.IMU数据的走向同理.GPS与Landmark数据的走向GPS数据从Node类的回调函数进来只有1个走向, 就是传入到SensorBridge::HandleNavSatFixMessage()函数中,原创 2023-10-14 18:17:58 · 1374 阅读 · 0 评论 -
cartographer中的扫描匹配
cartographer中使用了两种扫描匹配方法:CSM(相关性扫描匹配方法(暴力匹配))、ceres优化匹配方法CSM可以简单地理解为暴力搜索,即每一个激光数据与子图里的每一个位姿进行匹配,直到找到最优位姿,进行三层for循环,不过谷歌采用多分辨率搜索的方式,来降低计算量。基于优化的方法是谷歌的ceres库来实现,原理就是构造误差函数,使其对最小化,其精度高,但是对初始值敏感。原创 2023-10-14 18:16:49 · 748 阅读 · 1 评论 -
cartographer中创建轨迹
根据has_pure_localization_trimmer参数配置,决定保存多少submap,参数在trajectory_builder。local_slam_result_callback 需要传入的回调函数,实际上是map_builder_bridge.cc 中的OnLocalSlamResult() 函数。map_builder_bridge_是由MapBuilderBridge这个类创建,这个类里面有一个AddTrajectory成员函数。(之前有一个老参数,已经弃用,会报警告,但不影响使用)原创 2023-09-17 22:35:00 · 199 阅读 · 0 评论 -
cartographer中传感器数据的处理
这个函数是订阅LaserScan的topic绑定的回调函数,这个函数执行的是map_builder_bridge里的sensor_bridge里的HandleLaserScanMessage这个函数。前面()里的0代表的是trajectory_id是0,第0条轨迹,后面是各个传感器,{}里面是对应的时间戳,可以看出imu是最快的,数据对应的时间戳是1,3,5;这个函数也没有对数据进行实际的处理,而是调用trajectory_builder_->AddSensorData这个函数,对点云的坐标进行坐标变换。原创 2023-09-17 22:29:53 · 189 阅读 · 0 评论