基于图优化的多相机手眼标定框架

文章:A Graph-based Optimization Framework for Hand-Eye Calibration for Multi-Camera Setups

作者:Daniele Evangelista*, Emilio Olivastri*, Davide Allegro, Emanuele Menegatti and Alberto Pretto

编辑:点云PCL

代码:https://bitbucket.org/freelist/gm_handeye.git

欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。

公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com。未经作者允许请勿转载,欢迎各位同学积极分享和交流。

摘要

手眼标定是估计参考坐标系(通常是机械臂或其夹持器的基座)与一个或多个摄像机的参考坐标系之间的空间变换的问题。通常这种标定被解决为非线性优化问题,但很少利用问题本身的潜在图结构。实际上手眼标定问题可以看作是同时定位与建图(SLAM)问题的一个实例。受到这一事实的启发,在这项工作中,我们提出了一种位姿图方法来解决手眼标定问题,该方法扩展了最近的一种先进解决方案,有两种不同的方式:

i)通过将解决方案应用于眼在手外的情况;

ii)通过涵盖多摄像头机器人设置,所提出的方法在模拟环境中针对标准手眼标定方法进行了验证。此外,还展示了一个真实应用。在这两种情景下,所提出的方法都优于其他替代方法。并且在本文中发布了一个用于多摄像头设置的基于图优化的开源实现框架。

主要贡献

稳健地感知周围环境对于工业中智能机器人工作单元的开发和部署至关重要。在工业机器人应用中,感知设备(例如摄像头)被广泛用于执行涉及机器人臂的复杂任务,如视觉检查]和抓取物体。然而,摄像头提供的信息通常是相对于它们自己的坐标系表示的。为了能够基于这种视觉信息控制机器人臂,首先需要精确计算摄像头相对于机器人夹持器、机器人基座或工作单元的位置。这个过程被称为手眼标定,被定义为确定机器人参考坐标系(例如机器人基座或末端执行器坐标系)与摄像头参考坐标系之间的空间变换的过程。手眼标定问题可以分为两类: 

• 眼在手上(Eye-in-hand):摄像头被刚性安装在机器人手腕上;

• 眼在手外(Eye-on-base):一个或多个摄像头固定,而机械臂在移动(例如,图1)。

0412dcfe183d01fbaba4b0795a7eb4d3.png

图1. 多摄像头眼到基座标定配置示意图。所提出的手眼标定的目标是计算每个摄像头在参考坐标系𝑊中的位置,即图中的变换𝑊𝑇𝐶1...𝐶3。

有各种各样的方法可以解决这个问题,其中许多基于全局优化,以最小化特定数量,例如几何量(如平移和旋转误差)或视觉误差(如重新投影误差)。然而,很少有人利用图优化结构。

7718330cff1218709a1ba8339485381b.png

图2. 眼在手外标定设置。在这里,手眼标定的目标是计算摄像头在参考坐标系𝑊中的位置,即图中的变换𝑊𝑇𝐶。

本工作的主要贡献如下: 

(i)所提出的方法通过实现一个基于图优化的解决方案来扩展最近的一种先进方法,以解决眼在手外的配置(图2); 

(ii)我们的方法还涵盖了多摄像头设置(图1);因此,实现了一个通用和统一的基于图优化的手眼标定框架;(iii)对所提出方法进行了详尽的评估。评估主要在模拟环境中进行,可以测试对视觉和几何噪声的稳健性。

所提出的方法优于几种常用的标定方法,证明在标定数据中高噪声水平下具有鲁棒性。我们还在实际设置中测试了我们的方法,确认了在模拟中获得的令人信服的结果; 

(iv)本文提供了所提出的手眼标定方法的开源实现,可以在以下网址找到:https://bitbucket.org/freelist/gm_handeye

内容概述

这里介绍了所提出方法的细节概述。如前所述,本工作在两个主要方向上扩展了[8],这两个方向将在下文中进行解释:单摄像头和多摄像头的眼在手外的标定。通过这种方式,我们能够提供一个完整的框架,拥有必要的工具来满足机器人工业应用中出现的所有标定需求。

单摄像头眼在手外标定

 在这里介绍符号表示:

 • 𝑊:世界参考坐标系,通常位于机器人的基座上; 

• 𝐻:手参考坐标系,位于机器人的末端执行器上; 

• 𝐵:棋盘格参考坐标系; 

• 𝐶:摄像头参考坐标系; 

而变换为: 

• 𝑊𝑇𝐻:表示末端执行器在世界参考坐标系中的位姿的等距变换; 

• 𝐻𝑇𝐵:表示棋盘格在末端执行器参考坐标系中的位姿的等距变换; 

• 𝐶𝑇𝐵:表示棋盘格在摄像头参考坐标系中的位姿的等距变换; 

• 𝑊𝑇𝐶:表示摄像头在世界参考坐标系中的位姿的等距变换。 

图3显示了基于图的基中之眼标定的结构。使用[8]中的符号表示:圆圈表示需要估计的状态变量,而六边形表示固定参数,如𝐾和𝑃1..𝑍,分别表示相机矩阵和棋盘格的角点在它们的参考坐标系中的表示。𝑀表示用于标定的观测次数,即用于标定的图像和机器人姿势。

854373257d974e2a10ea6bfff2f67f20.png

图2:系统结构,有两个子模块:局部里程计(蓝色方框),与前一图像进行比较;闭环检测(黄色方框),与几乎所有前一图像进行比较,并通过阈值设定进行筛选(由黑色菱形表示)

多摄像头眼在手外标定 

如果机器人被多个静态摄像头观察到,可以多次重复上述算法。另一方面,运行一个执行单摄像头标定的算法𝑁次,其中𝑁是工作区域中存在的摄像头数量,是一个次优解,因为在优化中,不同摄像头之间的交叉观察并没有被因式分解。考虑到工作区域中有𝑁个摄像头,如图1所示,需要引入一些更多的符号表示: 

• 𝐶𝑑𝑇𝐶𝑎:表示第𝑎个摄像头在第𝑑个摄像头参考坐标系中的位姿的等距变换; 

• 𝐶𝑎𝑇𝐵:表示棋盘格在第𝑎个摄像头参考坐标系中的位姿的等距变换; 

• 𝑊𝑇𝐶𝑎:表示第𝑎个摄像头在世界参考坐标系中的位姿的等距变换。 

多摄像头模型的起点仅仅是将单摄像头模型𝑁次堆叠,以表示摄像头的数量。在图4中,为了便于图形表示,一些顶点和边已经被分组在一起。

ceaa2d558f8a59830cd1d92a87cfcf75.png

实验

我们通过在视觉和几何扰动下对提出的方法进行测试,展示了其健壮性和估计精度。特别是,我们对棋盘格角点的检测添加了噪声,从而模拟了标定图案的错误检测(例如,使用低分辨率摄像头时的情况),并且还对用于标定的机器人位姿添加了噪声。提出的方法已经与以下方法进行了对比。在图表中,我们通过报告每种方法的第一作者来命名它们。这些替代方法是通过分别对每个摄像头进行标定,然后对误差进行平均来进行测试的。采用这种实验方法是因为这些替代方法不能直接用于多摄像头标定。评估还重点关注了我们的多摄像头标定方法与将提出的单摄像头标定重复应用于各个摄像头的对比,这是为了证明多摄像头标定框架的健壮性和提高的准确性。

A. 人工合成数据的实验 

我们采用了与[8]中提出的相同评估方法,在模拟条件下测试了我们的方法,使用了三种不同的噪声源:视觉、平移和旋转。这个评估协议旨在测试在受干扰的视觉条件下标定的健壮性(即,在标定图案的角点检测中引入噪声),并且还用于测试在机器人姿势中添加附加几何噪声时的优化准确性和收敛能力。使用了Gazebo2模拟器收集了模拟数据,在其中实现了一个模拟工作单元。所提出的工作单元由一个工业机器人组成,装载标定图案,并被五个外部摄像头包围,就像典型的多摄像头眼标定设置一样。通过随机采样机器人工作空间,选择了一组150个机器人姿势,以均匀地覆盖每个摄像头的视场。

5644cc5fc8c1aff2bf756ececa32592e.png

这次评估的结果报告在图5和图6中。特别是在图5中,绘制了所有标定方法的性能,而在图6中仅报告了我们的单摄像头和多摄像头基于图形的标定方法的结果。结果显示,我们提出的方法在平移和旋转误差方面在强扰动条件下也能取得良好的结果,证明它与其他方法相比更为稳健。提出的基于图形的单摄像头眼标定(即图5和图6中的GRAPH SINGLE)通常优于所有其他测试方法。此外,我们的多摄像头标定手眼算法(即图5和图6中的GRAPH MULTI)是表现最佳的方法,特别是在标定数据中存在高水平的噪声时。

7ced54ca9e9e9a60400725be5a3729bd.png

B. 实际环境的实验 

我们还在真实的机器人环境中验证了所提出的算法。设置包括一个Franka Emika Panda3机器人机械手和三个Kinect2摄像头(仅使用RGB图像),如图7和图8所示。与模拟评估不同,模拟评估中有地面真实值可用,而在实际环境中,每个摄像头的绝对位姿事先是未知的。因此,在实际设置中进行测试时,采用了重新投影误差作为度量标准。

81666c7b6519e1de0cab28a85524b80e.png

在表I中报告了所有方法的结果。我们的方法能够正确标定设置中的所有摄像头,甚至在具有挑战性的光照条件下,例如摄像头#1和#3(参见图7)。大多数经过测试的方法无法收敛到低的重新投影误差解,而我们的方法提供了明显更低的误差。

e0cebcb9fdae55cd03d15c4090f5e617.png

总结

本文提出了一种基于姿态图的解决方案来解决手眼标定问题,扩展了先前的最新工作[8],在两个不同的方向上进行了扩展:

  • 通过对具有一个摄像头的基于眼到基座的设置的解决方案进行了构建;

  • 通过将基于眼到基座的标定扩展到多摄像头设置。为了验证所提出的系统,我们采用了与[8]和[29]中提出的相同的实验协议。

所提出的方法在标定数据受到视觉和几何误差影响时表现出鲁棒性。与传统解决方案相比,实现的姿态图优化在几何误差方面(即平移和旋转)的精度更高。当在实际的手眼标定基准测试中进行测试时,所提出的方法也在鲁棒性和准确性方面表现出色,其中绝对的真实地面真值是不可用的,准确性是通过重新投影误差来衡量的。值得注意的是,所提出的方法,就像用于实验的其他手眼标定方法一样,没有考虑由重力、关节和连接部分的灵活性引起的动态效应的影响。这可能会影响机器人机械手的精度和精确性,并且必须采用适当的动态标定技术进行考虑。作者认为,这种类型的标定可以与所提出的手眼标定方法相同的基于图形的结构进行构建,而且可以作为未来工作的一部分,在这个领域中提出更通用的标定过程。此外,所提出的基于图形的形式化方法可以在未来的研究中进一步扩展,以解决更复杂的问题,如多机器人多摄像头设置的标定。

资源

自动驾驶及定位相关分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

自动驾驶中基于光流的运动物体检测

基于语义分割的相机外参标定

综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍

高速场景下自动驾驶车辆定位方法综述

Patchwork++:基于点云的快速、稳健的地面分割方法

PaGO-LOAM:基于地面优化的激光雷达里程计

多模态路沿检测与滤波方法

多个激光雷达同时校准、定位和建图的框架

动态的城市环境中杆状物的提取建图与长期定位

非重复型扫描激光雷达的运动畸变矫正

快速紧耦合的稀疏直接雷达-惯性-视觉里程计

基于相机和低分辨率激光雷达的三维车辆检测

用于三维点云语义分割的标注工具和城市数据集

ROS2入门之基本介绍

固态激光雷达和相机系统的自动标定

激光雷达+GPS+IMU+轮速计的传感器融合定位方案

基于稀疏语义视觉特征的道路场景的建图与定位

自动驾驶中基于激光雷达的车辆道路和人行道实时检测(代码开源)

用于三维点云语义分割的标注工具和城市数据集

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

TOF相机原理介绍

TOF飞行时间深度相机介绍

结构化PLP-SLAM:单目、RGB-D和双目相机使用点线面的高效稀疏建图与定位方案

开源又优化的F-LOAM方案:基于优化的SC-F-LOAM

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

基于鱼眼相机的SLAM方法介绍

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

3495e7c3b85bf0e85b700396f964a185.png

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入知识星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享与合作方式:微信“cloudpoint9527”(备注:姓名+学校/公司+研究方向) 联系邮箱:dianyunpcl@163.com。

为分享的伙伴们点赞吧!

296d3bdff215d4816e53be15a30b79b6.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
双目相机手眼标定是指通过已知的相机内参,以及相机与机械臂末端之间的变换关系,来计算相机与机械臂末端之间的外参。下面提供一个基于OpenCV的双目相机手眼标定代码: ``` #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { // 定义相机内参 Mat cameraMatrix1 = (Mat_<double>(3, 3) << fx1, 0, cx1, 0, fy1, cy1, 0, 0, 1); Mat cameraMatrix2 = (Mat_<double>(3, 3) << fx2, 0, cx2, 0, fy2, cy2, 0, 0, 1); // 定义相机畸变参数 Mat distCoeffs1 = (Mat_<double>(1, 5) << k1, k2, p1, p2, k3); Mat distCoeffs2 = (Mat_<double>(1, 5) << k1, k2, p1, p2, k3); // 定义3D点对和2D点对 vector<Point3f> objectPoints; vector<Point2f> imagePoints1, imagePoints2; // 填充3D点对和2D点对 // ... // 进行手眼标定 Mat R, T; solveHandEye(objectPoints, imagePoints1, imagePoints2, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T); // 输出相机与机械臂末端之间的外参 Mat extrinsic = (Mat_<double>(4, 4) << R.at<double>(0, 0), R.at<double>(0, 1), R.at<double>(0, 2), T.at<double>(0), R.at<double>(1, 0), R.at<double>(1, 1), R.at<double>(1, 2), T.at<double>(1), R.at<double>(2, 0), R.at<double>(2, 1), R.at<double>(2, 2), T.at<double>(2), 0, 0, 0, 1); cout << extrinsic << endl; return 0; } ``` 其中,`solveHandEye()`函数是OpenCV中提供的双目相机手眼标定函数,可以直接调用使用。需要注意的是,填充3D点对和2D点对时需要保证点对数量相同,并且点对之间的对应关系需要正确匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云PCL公众号博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值