laser scan matcher 笔记
整体流程
-
LaserScanMatcher
类中,先initParams();
初始化参数,然后设定ros
的发布节点和接受节点 -
然后看雷达数据函数
LaserScanMatcher::scanCallback
,其中调用了两个函数
laserScanToLDP(scan_msg, curr_ldp_scan);
和processScan(curr_ldp_scan, scan_msg->header.stamp);
,我们一个一个看-
laserScanToLDP函数,把ros的laser_scan转换成本程序定义的雷达格式
struct laser_data
,typedef struct laser_data* LDP;
绕了个大弯,这个LDP
中包含了里程计信息odometry
和真是位置true_pose
estimate
-
processScan函数,把转换过的雷达格式传入
- 首先预测根据前后两帧的变化时间预测
getPrediction
位姿变化 - 然后
createTfFromXYTheta
得到tf转换,这里发现个好东西tf::Transform
可以直接运算pr_ch_l = laser_to_base_ * f2b_.inverse() * pr_ch * f2b_ * base_to_laser_ ;
,他们分别是上一个tf,<
- 首先预测根据前后两帧的变化时间预测
-