概述
hector slam论文
A Flexible and Scalable SLAM System with Full 3D Motion Estimation
1.系统总揽
系统有两大部分组成
A navigation filter fuses information from the inertial measurement unit and other available sensors to form a consistent 3D solution,while a 2D SLAM system is used to provide position and heading information within the ground plane. Both estimates are updated individually and only loosely coupled so that they remain synchronized over time.
导航滤波器融合惯性测量单元和其他可用传感器的信息,形成一致的三维解决方案,而二维SLAM系统用于提供地面平面内的位置和航向信息。这两个评估都是单独更新的,并且只是松散耦合的,以便随着时间的推移保持同步。
首先,6D位置是利用卡尔曼滤波融合IMU,里程计信息。然后由6D投影转3D,得到优化的3D位姿初始值。
使用lidar匹配,通过优化得到新的位姿。再更新地图,更新滤波器。
2.hector slam ros节点关系图
使用仿真运行hector参考博客
https://blog.csdn.net/ktigerhero3/article/details/80630393
ros节点关系图如下
可以发现,hector的输入为激光数据/scan和3D位姿,输出为/map
3.程序函数调用流程
(1)主函数hector_map/main.cpp调用HectorMappingRos构造函数
HectorMappingRos sm;
(2)HectorMappingRos构造函数中等待
激光数据
scanSubscriber_ = node_.subscribe(p_scan_topic_, p_scan_subscriber_queue_size_, &HectorMappingRos::scanCallback, this);
tf数据
tfB_ = new tf::TransformBroadcaster();
初始化数据
initial_pose_filter_->registerCallback(boost::bind(&HectorMappingRos::initialPoseCallback, this, _1));
并调用回调函数
4.二维SLAM系统激光更新地图流程
激光数据回调函数为
void HectorMappingRos::scanCallback(const sensor_msgs::LaserScan& scan)
(1)等待tf数据
tf_.waitForTransform(p_base_frame_,scan.header.frame_id, scan.header.stamp,dur)
(2) 转换数据为点云
projector_.projectLaser(scan, laser_point_cloud_,30.0);
(3)更新 位姿
slamProcessor->update(laserScanContainer, startEstimate);
其中update包括很多层调用按顺序如下
1)newPoseEstimateWorld = (mapRep->matchData(poseHintWorld, dataContainer, lastScanMatchCov));
2)estimateTransformationLogLh
3)getCompleteHessianDerivs
这些调用主要是由激光观测数据重新更新位姿。
对应解论文中的公式(7)
这个最小化函数的解对应求下面公式
对应代码中的
gridMapUtil.getCompleteHessianDerivs(estimate, dataPoints, H, dTr);
Eigen::Vector3f searchDir (H.inverse() * dTr);
updateEstimatedPose(estimate, searchDir);
void updateEstimatedPose(Eigen::Vector3f& estimate, const Eigen::Vector3f& change)
{
estimate += change;
}
(4)更新地图
由更新的位姿更新概率地图,最终调用OccGridMapBase类中的
void updateByScan(const DataContainer& dataContainer, const Eigen::Vector3f& robotPoseWorld)
最后
以上就是活力刺猬为你收集整理的hector slam论文笔记的全部内容,希望文章能够帮你解决hector slam论文笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复