【AutowareAuto】ndt

目的/用例

该软件包包含允许使用正态分布变换匹配通过 3D 激光雷达扫描进行定位的结构和功能。 有关实现的更多详细信息,请参阅本文。

设计

ndt architecture

地图

算法设计

NDTMap 类似于 voxel_grid,基于 std::unordered_map 并允许快速查找给定点。

NDT 体素图有 2 种主要类型:DynamicNDTMapStaticNDTMap

DynamicNDTMap 通过将点传递到相应的体素,将原始点云消息转换为 NDT 地图表示。每个体素的质心和协方差都是相对于落入其中的点计算的。协方差和质心计算是根据 Welford 算法在线完成的。

一旦 DynamicNDTMap 将密集点云转换为体素,每个体素的质心和协方差就可以序列化为 PointCloud2 消息,其中生成的点云是稀疏的,并且只是转换后的地图的中间表示。然后可以通过 StaticNDTMap 将该点云转换回 NDT 地图表示,其中不计算质心/协方差,但仅将点插入到其相应的体素中进行查找。输入点云由 point_cloud_msg_wrapper::PointCloudMsgWrapper<> 验证,其中每个点都表示为 PointWithCovariances 类。

输入/输出/API

输入:

  • 点云

输出:

  • 给定点的一组体素。

Scan

NDT 扫描是一种表示激光雷达扫描的数据结构。 实现取决于优化问题。 所有的实现都必须提供基本的迭代能力,这是所有 ndt 优化问题所必需的。

P2DNDTScan

算法设计

P2DNDTScan 是点向量(Eigen::Vector3d)的包装器。 该类允许通过公开其向量的迭代器来迭代内部容器。

优化问题

P2D优化问题

算法设计

该算法在论文“The Three-Dimensional Normal-Distributions Transform”[Magnusson 2009] 中有详细定义。 实际实现基于 PCLautoware.ai 实现。

CachedExpression 用于表示优化问题。 因此,分数、雅可比和海瑟矩阵可以选择一起计算,以利用源自计算中共享项的协同作用。

输入/输出/API

输入:

  • Scan
  • 地图输出:
  • 分数
  • 雅可比
  • 海瑟矩阵

NDT 定位器

NDTLocalizerBase 实现了由 LocalizerConstraint 强制执行的接口。 它以扫描、地图和优化问题类型为模板,允许使用不同的 ndt 方法注册测量值。 NDTLocalizerBase 的实现可以选择覆盖消息和猜测验证以及协方差计算步骤。

P2DNDTLocalizer 是 P2D NDT 目标的 NDTLocalizerBase 实现。

输入/输出/API

输入:

  • Scan
  • 地图
  • 初步估计
  • 优化器输出
  • 带协方差的位姿。

相关问题

  • #137: NDT Map format validation
  • #138: Implement NDTMapRepresentation
  • #136: Implement NDT Map Publisher
  • #166: Implement P2D NDT scan
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值