ICP 转换精度随初始转换而变化 [英] ICP Transformation Accuracy Varying With Initial Translation

查看:98
本文介绍了ICP 转换精度随初始转换而变化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我一直在使用点云库 (PCL) 尤其是迭代最近点 (ICP) 模块为我的机器人构建点云感知管道.我很难从 PCL ICP 获得正确的变换矩阵.我最初认为这与我的特定点云或我的代码有关,但使用教程代码和点云也会发生同样的情况.

I've been building a point cloud perception pipeline for my robot in simulation using Point Cloud Library (PCL) and specifically the Iterative Closest Point (ICP) module. I'm having difficulty getting the correct transformation matrix from PCL ICP. I initially thought it was something with my particular point clouds or my code, but the same happens using the tutorial code and point cloud.

对于最小工作示例,我复制了交互式 ICP 代码,编译并使用了 monkey.ply 文件,它作为预期的.但是,当我仅从 t = < 教程中的初始值更改转换的平移分量时.0.0, 0.0, 0.4 >t = <1.0, 1.0, 0.0 >,ICP输出变换矩阵在包括未平移的Z轴在内的每个轴上至少偏移0.2.

For a minimum working example, I copied the Interactive ICP code, compiled and used the monkey.ply file and it works as expected. However, when I change only the translational component of the transformation from the initial value in the tutorial of t = < 0.0, 0.0, 0.4 > to t = < 1.0, 1.0, 0.0 >, the ICP output transformation matrix is off by at least 0.2 in each axis including the untranslated Z axis.

在云之间的初始翻译方面,我是否遗漏了什么?是否有云之间的最小转换以使 ICP 工作?

Is there something I'm missing when it comes to the initial translation between the clouds? Is there a minimum translation between clouds for ICP to work?

使用 monkey.ply 文件查看下面的输出,我缩短了输出以使其更具可读性:

See the output below using the monkey.ply file, I shortened the output so its more readable:

从interactive_icp.cpp复制的代码

Applying this rigid transformation to: cloud_in -> cloud_icp
Rotation matrix :
     |  0.924 -0.383  0.000 | 
R =  |  0.383  0.924  0.000 | 
     |  0.000  0.000  1.000 | 
Translation vector :
t = <  0.000,  0.000,  0.400 >

Applied 1 ICP iteration(s) in 11 ms

ICP has converged, score is 0.0256485
ICP has converged, score is +2e-02
~
~
ICP has converged, score is +8e-06-> cloud_in
ICP has converged, score is +3e-12-> cloud_in
ICP transformation 14 : cloud_icp -> cloud_in
ICP transformation 15 : cloud_icp -> cloud_in
Rotation matrix :81 -0.036 |
     |  0.924  0.381 -0.036 |
R =  | -0.381  0.924  0.012 |
     |  0.037  0.003  0.999 |
Translation vector :, -0.402
t = <  0.016, -0.006, -0.402 >

t = < 更改翻译0.0, 0.0, 0.4 >t = <1.0, 1.0, 0.0 >

Rotation matrix :
     |  0.924 -0.383  0.000 | 
R =  |  0.383  0.924  0.000 | 
     |  0.000  0.000  1.000 | 
Translation vector :
t = <  1.000,  1.000,  0.000 >

Applied 1 ICP iteration(s) in 11 ms

ICP has converged, score is 0.157621
ICP has converged, score is +2e-01
~
~
ICP has converged, score is +8e-09-> cloud_in
ICP has converged, score is +5e-12-> cloud_in
ICP transformation 24 : cloud_icp -> cloud_in
ICP transformation 25 : cloud_icp -> cloud_in
Rotation matrix :75 -0.025 |
     |  0.927  0.375 -0.025 |
R =  | -0.375  0.927  0.029 |
     |  0.034 -0.017  0.999 |
Translation vector :,  0.265
t = < -1.391, -0.471,  0.265 >

任何帮助都将不胜感激!

Any help at all would be appreciated!

马哈罗,

克里斯·罗

推荐答案

如果你刚接触ICP和点云注册,建议你阅读siggraph教程的第一章现代技术和应用实时非刚性注册.它很短,但包含了很好的信息.

If you're new to ICP and point cloud registration, I recommend you to read the first chapter of the siggraph tutorial Modern Techniques and Applications for Real-Time Non-rigid Registration. It's very short but contains good information.

回到你的问题.

在云之间的初始翻译方面,我是否遗漏了什么?

Is there something I'm missing when it comes to the initial translation between the clouds?

是的,ICP 需要良好的初始转换才能开始.转换我指的是平移和旋转.

Yes, ICP needs a good initial transformation to start with. And by transformation I mean both translation and rotation.

ICP(迭代最近点)算法做出的基本假设是:
表面(或点云)处于粗略的初始对齐状态.因此,最近点对应近似于地面实况对应.

The fundamental assumption made by ICP (Iterative Closest Point) algorithm is:
The surfaces (or point clouds) are in rough initial alignment. Therefore closest point correspondences approximate ground truth correspondences.

是否有云之间的最小转换以使 ICP 工作?

Is there a minimum translation between clouds for ICP to work?

我想没有直接的答案.越近越好.

I suppose there isn't a straight answer. The closer, the better.

AFAIK 它还取决于数据关联方法.(原始 ICP 有许多变体.如论文 Efficient Variants ofICP算法).

AFAIK it also depends on the data association method. (There are many variants to the original ICP. As described in the paper Efficient Variants of the ICP Algorithm ).

ICP 通常用作点云配准的最后一步.要获得良好的初始转换,您可以使用一些基于特征的注册方法,例如 this.

ICP is usually used as a last step in point cloud registration. To obtain a good initial transformation, you can use some feature based registration method such as this.

这篇关于ICP 转换精度随初始转换而变化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆