工业现场相机坐标系和机械手坐标系的标定(2)-相机和机械手绑定的情况

本文介绍了一种利用标定助手完成相机与机械手绑定情况下的标定方法。通过移动机械手使靶标处于图像特定位置并记录图像点与机械点,最终建立整个工作区域内的坐标系对应关系。

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

        之前,我写过一篇标定文章,但是只说明了相机和机械手分离的情况的标定方法,为了提供完整的标定方案,这边介绍一下怎么利用我做的标定助手完成相机和机械手绑定的情况的标定方法。

        由文章“工业现场相机坐标系和机械手坐标系的标定(1)-相机和机械手分离的情况”我们知道只要找到两组对应点即可完成相机坐标系和机械手坐标系的关系转换。那么,现在相机跟随着机械手运动(它们绑定在一起了),如果还将标定靶标也固定在机械手上的话,三个对象都相对运动,就无法标定了!那要怎么利用标定助手完成标定呢?经过思考,我给出了以下标定思路:

整个标定系统的初始状态

        相机和机械手绑定在一起并且机械手旋转中心处于机械原点,这时候相机中心和机械手中心有一个相对的偏移并且是固定的(相机中心和机械手旋转中心的相对距离设为(detX,detY)),将标定靶标放置在工作区域(实际机械手的工作区域)中的合适位置。

第一步:求取第一组图像点坐标C1

        移动机械手(相机会跟着移动)到相机能够清晰拍摄到标定靶标的位置(设该位置的机械坐标为(x0,y0))。然后调整标定靶标的识别参数,使得能够实时的识别标定靶标的中心位置,手动移动靶标最好让它远离图像中心,越远越好(精度越高)但是不能超出相机的视野范围,我就把靶标放在相机视野的左上角的区域吧,然后我们识别当前靶标的图像位置C1,就是第一组数据的图像点。

第二步:求取第一组机械点坐标M1

        进入“标定”选项卡,勾选“显示十字标”,这时候会在实时图像中间显示一个蓝色的十字光标,然后,慢速移动机械手,直到C1点和十字光标的交点重合(也就是说移动机械手让实时识别到的靶标中心坐标处于图像的中心,比如采集的图像为2048*1536大小的,你需要缓慢移动机械手(靶标保持不动)直到靶标的中心处于(1024,768)的这个位置),然后记下当前的机械手坐标也就是第一组数据的机械点M1(注意:此时实际是让相机中心和靶标中心重合,并非机械手旋转中心和靶标中心重合,它们之间差了一个detX,detY的距离,具体怎么换算,等下再说)。

第三步:求取第二组图像点坐标C2

        将机械手移动回到初始的工作坐标点(x0,y0),将靶标放在相机视野的右下角的区域,识别当前的靶标图像坐标C2,就是第二组数据的图像点。

第四步:求取第二组机械点坐标M2

        同理,慢速移动机械手,直到C2点和十字光标的交点重合(就是移动机械手让实时识别到的靶标中心坐标处于图像的中心),然后记下当前的机械手坐标也就是第二组数据的机械点M2。

第五步:求取整个机械手工作区域坐标系和相机坐标系的对应关系

        不知道你有没有发现,上面求得工作区域只对工作区域(x0,y0)开始到相机视野结束的位置有效(比如你在机械手移动到工作区域(x0,y0)为起点的位置识别靶标的图像位置坐标为(100,100),但是你将机械手移动到工作区域(x1,y1)为起点的位置识别靶标的图像位置坐标也可能为(100,100))。这样换算过来的机械坐标就是错误的,其实我们上面求得是小区域的转换关系,那我们要怎么扩展到整个机械手的工作区域呢?我们只需要这样做:在机械手工作的时候是可以知道自己在哪里的,比如:现在机械手移动到工作区域(x1,y1)为起点的位置识别靶标的图像位置坐标为(100,100),我们将(100,100)代入转换关系trans得出来的机械坐标是对应(x0,y0)的,要转换到对应(x1,y1)的只需要将换算处理的坐标加上(x1 - x0,y1 - y0)即可!抽象的公式如下:

current_machine.x = trans(current_image.x,current_image.y) + (x1 - x0);
current_machine.y = trans(current_image.x,current_image.y) + (y1 - y0);
其中trans函数就是将图像坐标转换为相对于(x0,y0)工作区域的机械坐标,再加上坐标(x1 - x0,y1 - y0)就是当前正确的机械坐标。到此,我们得到了图像坐标和整个机械手工作区域的坐标的关系,但是此时的机械坐标指的是相机的中心,并不是机械手的旋转中心。

第六步:将相机中心转换为机械手的旋转中心
        首先,你可以利用目测法,游标卡尺法等等粗略的算出detX,detY的值,然后,进行实时识别和移动测试进行细调,因为粗略的估算有误差,你可以经过多次微调直到精确到机械手的旋转中心移动到产品的上方就成功了。记下此时的detX,detY,代入以下公式就可以算出了最终的机械手应该去的地方了。最终的换算公式如下:

current_machine.x = trans(current_image.x,current_image.y) + (x1 - x0) + detX;
current_machine.y = trans(current_image.x,current_image.y) + (y1 - y0) + detY;
        整个过程的伪代码运算过程如下:

[a,b,c,d] = f([C1,M1],[C2,M2])
trans(double xImage,double yImage){
	double xMachine = xImage * a - yImage * b + c;
	double yMachine = xImage * b + yImage * a + d;
	return xMachine,yMachine;
}
current_machine.x = trans(current_image.x,current_image.y) + (x1 - x0) + detX;
current_machine.y = trans(current_image.x,current_image.y) + (y1 - y0) + detY;
        利用标定助手求取[a,b,c,d]外参矩阵的输入参数[C1,M1]和[C2,M2]的操作方法如下图所示:


        可能说的比较抽象,请见谅,后期有时间画几张过度图解释!

<think>首先,用户的问题是关于“九点标定 抓取 旋转中心 计算方法 实现原理”。我需要基于系统级指令来构建我的回答。系统指令包括:使用$...$格式的行内数学表达式,$$...$$格式的独立公式,正确LaTeX语法,中文回答,生成相关问题,并在引用段落末尾添加引用标识如[^1]。 回顾用户提供的引用:[^1]是关于九点标定抓取旋转中心的,内容涉及机械手轴线、法兰轴线、拍照、坐标旋转等。这似乎是用户意图的核心参考。 我的回答需要结构清晰,逐步解决问题,保证真实可靠。结构应该包括: 1. 解释九点标定的基本概念。 2. 描述九点标定流程,包括旋转中心的计算。 3. 讨论实现原理计算方法。 4. 生成相关问题。 关键点: - 九点标定是一种用于机器人视觉系统的手眼标定方法,通过9个点来建立图像坐标与机器人坐标之间的映射关系。 - 旋转中心是机器人法兰盘或工具坐标系的原点,在抓取操作中需要准确知道以处理旋转- 计算方法涉及坐标变换、矩阵运算等。 实现原理: - 使用9个点(通常是3x3网格)来标定相机坐标系与机器人坐标系的关系。 - 通过采集这些点的图像坐标机器人坐标,求解变换矩阵。 - 旋转中心的计算可能需要额外的步骤,如旋转法兰盘并观察点位置变化。 从引用[^1]中提取信息: - 机械手轴线与法兰轴线重合或不重合的情况- 关键代码涉及坐标计算。 - 旋转中心标定方法:两次拍照避免标定旋转中心,或直接标定旋转中心- 点坐标旋转计算:涉及旋转矩阵。 数学公式: - 行内数学表达式:如点坐标$ (x, y) $,旋转角度$ \theta $。 - 独立公式:如旋转矩阵 $$ R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} $$。 - 坐标变换公式。 生成相关问题:基于内容,提出3个相关问题,如优化方法、应用场景等。 回答结构: 1. **引言**:简要介绍九点标定及其在抓取中的应用。 2. **九点标定原理**:解释基本概念目的。 3. **旋转中心计算方法**: -机械手轴线与法兰轴线重合时。 - 当不重合时,包括两次拍照法直接标定法。 - 涉及数学公式实现步骤。 4. **实现原理**:讨论背后的数学算法。 5. **相关问题**:列出3个相关问题。 确保使用中文。</think>### 九点标定抓取旋转中心计算方法及实现原理 九点标定是一种广泛应用于机器人视觉系统的标定技术,主要用于建立相机坐标系与机器人坐标系之间的映射关系,特别是在抓取任务中精确计算旋转中心(即机器人法兰盘或工具坐标系旋转原点)。旋转中心的准确计算对于处理工件旋转、避免抓取误差至关重要[^1]。下面我将逐步解释其计算方法、实现原理及相关细节。 --- #### 1. **九点标定基本概念** 九点标定通过采集9个点(通常排列为3×3网格)的图像坐标对应的机器人坐标,求解两个坐标系之间的变换关系。其核心目标是解决手眼标定问题,即当相机固定在机器人末端或外部时,如何将图像中的位置转换为机器人可执行的位姿。在抓取任务中,旋转中心标定是九点标定的延伸,用于处理工件在抓取过程中的旋转运动。基本流程包括: - 在机器人工作区域内放置一个标定板(如棋盘格)。 - 机器人移动到9个预定点位,记录每个点的机器人坐标 $ (x_r, y_r, z_r) $。 - 相机拍摄每个点位,获取图像坐标 $ (u, v) $。 - 通过最小二乘法或矩阵运算求解变换矩阵。 --- #### 2. **旋转中心计算方法** 旋转中心是机器人法兰盘旋转时的固定点,其计算依赖于九点标定得到的变换关系。根据机械手轴线与法兰轴线是否重合(引用[^1]中提到的两种情况),计算方法有所不同。以下分步骤说明: ##### **2.1 机械手轴线与法兰轴线重合** 当两者重合时,旋转中心可直接通过九点标定求解,简化了计算过程。 - **关键步骤**: 1. 执行九点标定,得到图像坐标到机器人坐标的变换矩阵 $ H $(通常是一个3×3齐次矩阵)。 2. 机器人绕法兰轴线旋转一定角度(如$ \theta = 0^\circ, 90^\circ $),并在每个角度下采集一个参考点(如标定中心)的图像坐标。 3. 利用变换矩阵 $ H $ 将图像坐标转换为机器人坐标,得到旋转后的点集。 4. 旋转中心 $ (x_c, y_c) $ 可通过解算圆心公式计算:假设旋转路径为圆弧,圆心即为旋转中心。公式为: $$ (x - x_c)^2 + (y - y_c)^2 = r^2 $$ 其中 $ r $ 是旋转半径,$ (x, y) $ 是旋转点坐标。使用最小二乘法拟合圆心。 - **优点**:计算简单,实时性好,适用于轴线对齐的机器人系统。 ##### **2.2 机械手轴线与法兰轴线不重合** 当两者不重合时(常见于复杂夹具),旋转中心计算需额外处理,引用[^1]提到了两种方法:**两次拍照避免标定****直接标定旋转中心**。 - **方法1: 两次拍照避免标定(简化法)** 通过两次拍照消除旋转中心误差,适用于旋转角度小的场景。 - **步骤**: 1. 工件放置后,相机拍摄一次获取初始位置。 2. 机器人轻微旋转工件(如$ \Delta \theta = 5^\circ $),再次拍照。 3. 比较两次图像中特征点的位移,计算平移补偿,间接避免显式计算旋转中心- **关键公式(点坐标旋转计算)**: 设点 $ P(x_1, y_1) $ 旋转后为 $ P'(x_2, y_2) $,旋转矩阵为: $$ R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} $$ 则 $ P' = R(\theta) \cdot P + T $,其中 $ T $ 是平移向量。通过解算 $ T $ 来补偿抓取位置。 - **适用场景**:高精度要求不高或旋转角度小的应用。 - **方法2: 直接标定旋转中心** 更精确的方法,需额外采集数据。 - **步骤**: 1. 执行九点标定,得到基础变换矩阵 $ H $。 2. 机器人绕法兰轴旋转多个角度(如$ \theta_i = 0^\circ, 45^\circ, 90^\circ $),在每个角度下采集同一个物理点的图像坐标。 3. 将图像坐标通过 $ H $ 转换为机器人坐标,得到点集 $ \{ (x_i, y_i) \} $。 4. 求解旋转中心:这些点应位于以旋转中心为圆心的圆弧上。使用最小二乘拟合圆心: $$ \min_{x_c, y_c} \sum_{i=1}^{n} \left( (x_i - x_c)^2 + (y_i - y_c)^2 - r^2 \right)^2 $$ 其中 $ r $ 是平均半径。 5. 最终旋转中心坐标 $ (x_c, y_c) $ 存储在机器人控制系统中。 - **优点**:精度高,可处理任意旋转角度。 - **关键代码参考(简化伪代码)**: ```python # 输入:旋转角度列表 angles, 对应点坐标 points def calibrate_rotation_center(angles, points): # 通过最小二乘拟合圆心 A = np.array([[2*x, 2*y, 1] for (x, y) in points]) b = np.array([x**2 + y**2 for (x, y) in points]) center = np.linalg.lstsq(A, b, rcond=None)[0] x_c, y_c = center[0], center[1] return (x_c, y_c) ``` - **非标定中心方法**:引用[^1]还提到一种替代方案,即通过工件本身的特征点计算旋转平移,而不依赖预标定中心,但需实时计算坐标变换。 --- #### 3. **实现原理** 九点标定旋转中心的实现原理基于坐标变换几何优化: - **数学基础**:使用齐次坐标表示变换,图像坐标 $ (u, v) $ 到机器人坐标 $ (x_r, y_r) $ 的映射为: $$ \begin{bmatrix} x_r \\ y_r \\ 1 \end{bmatrix} = H \cdot \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} $$ 其中 $ H $ 是单应性矩阵,通过最小二乘从9个点求解。 - **旋转中心原理**:旋转中心是刚体运动的固定点,在机器人坐标系中保持不变。计算时,利用旋转不变性(点在旋转中距离圆心恒定)进行拟合。 - **误差处理**:实际中需考虑相机畸变、机器人重复性误差等。通常通过多次采集平均或加入非线性优化(如Levenberg-Marquardt算法)提高精度。 - **系统集成**:在机器人抓取系统中,标定结果用于路径规划。例如,抓取时先计算工件旋转角度 $ \theta $,再应用旋转矩阵 $ R(\theta) $ 平移补偿,确保吸盘或夹具对准旋转中心[^1]。 --- #### 4. **应用与注意事项** - **应用场景**:广泛应用于工业自动化,如PCB板抓取、零件装配等需旋转工件的任务。 - **优点**:提高抓取精度(可达±0.1 mm),支持动态旋转补偿。 - **注意事项**: - 标定点需覆盖工作区域,避免局部误差。 - 旋转角度步长不宜过大(推荐≤30°),以减小拟合误差。 - 定期重新标定以补偿机械磨损。 通过以上方法,九点标定能高效解决旋转中心计算问题,提升机器人抓取的鲁棒性。如果您有具体代码或硬件细节需求,我可以进一步提供示例。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值