cartographer 前端两种匹配

本文深入解析了SLAM技术中两种核心算法:相关性扫描匹配与ceres优化。详细阐述了这两种算法的输入、输出及执行步骤,包括如何通过点云数据和概率栅格地图进行位姿估计与优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.相关性扫描匹配:

1.1 输入 : 

1.2 步骤:

2.ceres 优化:

2.1 输入 :   

2.2 步骤:

3.输入数据的坐标关系


cartographer 前端  相关性扫描匹配  和  ceres 优化两种

1.相关性扫描匹配:

double RealTimeCorrelativeScanMatcher2D::Match(
    const transform::Rigid2d& initial_pose_estimate,
    const sensor::PointCloud& point_cloud, const Grid2D& grid,
    transform::Rigid2d* pose_estimate)

1.1 输入 : 

  1. 预计位姿(推算位子)    
  2. 点云数据 
  3. 概率栅格地图   
  4. 估计位姿(引用输出)

返回:   最佳得分

1.2 步骤:

  1. // 初始位姿的角度
  2. /将激光转到初始位姿的角度  (x,y)0 点云开始为:baselink坐标系
  3. //确定查询窗口  角度+空间平面
  4. //得到旋转的点云     查询角度范围 ×2 /角度分辨率    点云 对各个角度旋转
  5. //将点云转到当前位姿下  平移
  6. /生成平移的候选值, 只记录 x,y的偏移,未进行 实际点云平移
  7. //求取得分  遍历候选值,  再遍历激光点,遍历激光点时将xy的偏移量传入
  8.  //取得分最大的候选值的 偏移量
  9. //输入的初始位子 + 偏移量

2.ceres 优化:

void CeresScanMatcher2D::Match(const Eigen::Vector2d& target_translation,
                               const transform::Rigid2d& initial_pose_estimate,
                               const sensor::PointCloud& point_cloud,
                               const Grid2D& grid,
                               transform::Rigid2d* const pose_estimate,
                               ceres::Solver::Summary* const summary) 

2.1 输入 :   

  1. 预计位姿(推算位子)   
  2. scanMatch匹配后位姿
  3. 点云数据 
  4. 概率栅格地图
  5. 优化后位姿(输出引用)
  6. ceres 优化器

2.2 步骤:

  1. 构建观测残差     栅格不连续,三次卷积插值 使其连续可导
  2. 构建平移变化量残差
  3. 构建旋转变化量残差
  4. ceres 求解,得pose+cost

3.输入数据的坐标关系

                     

 

返回:   最佳得分

预计位姿    点云数据  在重力坐标系下

 

 

### Cartographer前端集成概述 Cartographer是一个用于机器人SLAM(同步定位与映射)的地图构建库,支持2D和3D环境下的高效地图创建。为了实现前端传感器数据处理并将其融合到全局地图中,通常会涉及到多种传感器输入的预处理模块[^1]。 对于Cartographer前端部分而言,主要负责接收来自不同类型的传感器(如激光测距仪、惯性测量单元IMU等)的数据流,并执行初步过滤和特征提取操作。这些经过优化后的观测结果会被传递给后端算法来更新位姿估计及增量式地扩展地图结构[^2]。 具体来说,在实际应用过程中可以采用如下方式完成前端集成: #### 集成步骤说明 安装依赖项之后进入工作空源码目录下克隆官方仓库中的`cartographer`及其ROS配套包`cartographer_ros`。这一步骤确保了所使用的软件组件之具有兼容性和一致性。 ```bash cd ~/catkin_ws/src && \ git clone https://github.com/cartographer-project/cartographer.git && \ git clone https://github.com/cartographer-project/cartographer_ros.git ``` 编译整个项目以生成必要的可执行文件和支持库。推荐使用Ninja作为构建工具加快速度,通过命令行选项指定安装路径简化后续部署流程。 ```bash cd ~/catkin_ws && \ catkin_make_isolated --install --use-ninja ``` 配置启动参数文件以便于自定义节点行为或调整性能表现。例如修改`.lua`脚本内的扫描匹配器设置、子图分辨率等相关参数来适应特定应用场景需求。 #### 示例代码展示 下面给出一段简单的Python客户端程序片段,展示了如何订阅话题获取LaserScan消息并将之转发至Cartographer进行实时建图处理。 ```python import rospy from sensor_msgs.msg import LaserScan from cartographer_ros_msgs.msg import TrajectoryOptions, SensorTopics def laser_callback(msg): # 创建一个新的SensorData对象填充必要字段... if __name__ == '__main__': rospy.init_node('laser_to_carto') sub = rospy.Subscriber('/scan', LaserScan, laser_callback) pub = rospy.Publisher('/sensor_data', SensorTopics, queue_size=10) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): # 发布转换后的数据供内部节点消费 rate.sleep() ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值