当前位置: 首页 > article >正文

【机器人手眼标定算法简介】

1. 引言

在工业自动化和机器人领域中,机械臂的精度和灵活性是其核心性能之一。为了实现高精度的操作,机械臂的“手眼系统”(即机械臂末端执行器与视觉传感器之间的几何关系)必须进行精确的标定。手眼标定是确定视觉传感器坐标系与机械臂末端执行器坐标系之间的转换关系的过程。本文将详细介绍手眼标定的基本概念、常用的标定算法以及实现步骤。

2. 手眼标定的基本概念

手眼标定通常分为两类:Eye-to-Hand和Eye-in-Hand。

  • Eye-in-Hand:视觉传感器安装在机械臂的末端执行器上,随机械臂一起运动,如图(a)所示。

  • Eye-to-Hand:视觉传感器固定在环境中,观察机械臂末端执行器的运动,如图(b)所示。

无论哪种配置,手眼标定的核心问题都是求解视觉传感器坐标系与机械臂末端执行器坐标系之间的转换矩阵。
在这里插入图片描述

3. 坐标系定义

{ W } \{W\} {W}: 世界坐标系 (World frame)
{ B } \{B\} {B}: 机械臂基座坐标系 (Base frame)
{ F } \{F\} {F}: 机械臂法兰坐标系 (Flange frame)
{ C } \{C\} {C}: 相机坐标系 (Cam frame)
{ P } \{P\} {P}: 棋盘格标定板或April Tag坐标系 (Chess frame)
T w b ∈ S E ( 3 ) T_{wb} \in SE(3) TwbSE(3): 基座坐标系 { B } \{B\} {B}在世界坐标系 { W } \{W\} {W}下的4x4空间变换矩阵
θ i ∈ R n \theta_i \in R^n θiRn: i i i时刻的机器人关节角, θ i = [ θ 1 i , θ 2 i , . . . , θ n i ] \theta_i = [\theta_{1i}, \theta_{2i}, ..., \theta_{ni} ] θi=[θ1i,θ2i,...,θni], n n n为关节数量
T b f ( θ i ) ∈ S E ( 3 ) T_{bf}(\theta_i) \in SE(3) Tbf(θi)SE(3): 关节角为 θ i \theta_i θi时,法兰坐标系 { F } \{F\} {F} { B } \{B\} {B}系下的空间变换矩阵,可简写成 T b f i T_{bf}^i Tbfi
T c p i ∈ S E ( 3 ) T_{cp}^i \in SE(3) TcpiSE(3): 关节角为 θ i \theta_i θi时,棋盘格坐标系 { P } \{P\} {P}在相机坐标系 { C } \{C\} {C}的空间变换矩阵,由相机测量得到
T f c ∈ S E ( 3 ) T_{fc} \in SE(3) TfcSE(3): 相机坐标系 { C } \{C\} {C}在法兰坐标系 { F } \{F\} {F}的空间变换矩阵,对Eye-in-Hand类型来说,是需要标定的参数
T f p ∈ S E ( 3 ) T_{fp} \in SE(3) TfpSE(3): 棋盘格坐标系 { P } \{P\} {P}在法兰坐标系 { F } \{F\} {F}的空间变换矩阵
T b c ∈ S E ( 3 ) T_{bc} \in SE(3) TbcSE(3): 相机坐标系 { C } \{C\} {C}在基座坐标系 { B } \{B\} {B}的空间变换矩阵,对Eye-to-Hand类型来说,是需要标定的参数

4. 系统建模

4.1 Eye-in-Hand建模

如图(a)所示,Eye-in-Hand模式下,棋盘格或April Tag标签的位置固定(即 T w p T_{wp} Twp是定值),机械臂带着相机在不同姿态下进行拍照,需要标定的参数是相机相对法兰的固定坐标系 T f c T_{fc} Tfc。考虑 i i i j j j两个时刻,可得:
T w p = T w b ⋅ T b f ( θ i ) ⋅ T f c ⋅ T c p i , T w p = T w b ⋅ T b f ( θ j ) ⋅ T f c ⋅ T c p j , \begin{align} T_{wp} &= T_{wb} \cdot T_{bf}(\theta_i) \cdot T_{fc} \cdot T_{cp}^i, \tag{1} \\ T_{wp} &= T_{wb} \cdot T_{bf}(\theta_j) \cdot T_{fc} \cdot T_{cp}^j, \tag{2} \end{align} TwpTwp=TwbTbf(θi)TfcTcpi,=TwbTbf(θj)TfcTcpj,(1)(2)
联立方程后可得:
T b f ( θ i ) ⋅ T f c ⋅ T c p i = T b f ( θ j ) ⋅ T f c ⋅ T c p j , (3) T_{bf}(\theta_i) \cdot T_{fc} \cdot T_{cp}^i = T_{bf}(\theta_j) \cdot T_{fc} \cdot T_{cp}^j, \tag{3} Tbf(θi)TfcTcpi=Tbf(θj)TfcTcpj,(3)
即:
T b f − 1 ( θ i ) ⋅ T b f ( θ j ) ⋅ T f c = T f c ⋅ T c p i ⋅ T c p j − 1 . (4) T_{bf}^{-1}(\theta_i) \cdot T_{bf}(\theta_j) \cdot T_{fc} = T_{fc} \cdot T_{cp}^i \cdot {T_{cp}^j}^{-1}. \tag{4} Tbf1(θi)Tbf(θj)Tfc=TfcTcpiTcpj1.(4)

T a i j = T b f − 1 ( θ i ) ⋅ T b f ( θ j ) T_{a_{ij}}=T_{bf}^{-1}(\theta_i) \cdot T_{bf}(\theta_j) Taij=Tbf1(θi)Tbf(θj) T c i j = T c p i ⋅ T c p j − 1 T_{c_{ij}}=T_{cp}^i \cdot {T_{cp}^j}^{-1} Tcij=TcpiTcpj1 T b = T f c T_b = T_{fc} Tb=Tfc,则Eq(4)可简化为:
T a i j ⋅ T b = T b ⋅ T c i j . (5) T_{a_{ij}} \cdot T_b = T_b \cdot T_{c_{ij}}. \tag{5} TaijTb=TbTcij.(5)

4.2 Eye-to-Hand建模

如图(b)所示,Eye-to-Hand模式下,标定板固定在机械臂法兰(即 T f p T_{fp} Tfp是定值),相机在固定位置上对不同位置的标定板进行拍照,需要标定的参数是相机相对基座的固定坐标系 T b c T_{bc} Tbc。同样地,考虑 i i i j j j两个时刻,可得:
T b f ( θ i ) ⋅ T f p = T b c ⋅ T c p i , T b f ( θ j ) ⋅ T f p = T b c ⋅ T c p j , \begin{align} T_{bf}(\theta_i) \cdot T_{fp} &= T_{bc} \cdot T_{cp}^i, \tag{6} \\ T_{bf}(\theta_j) \cdot T_{fp} &= T_{bc} \cdot T_{cp}^j, \tag{7} \end{align} Tbf(θi)TfpTbf(θj)Tfp=TbcTcpi,=TbcTcpj,(6)(7)

由Eq(7)求逆再右乘到Eq(6),可得:
T b f ( θ i ) ⋅ T b f − 1 ( θ j ) ⋅ T b c = T b c ⋅ T c p i ⋅ T c p j − 1 . (8) T_{bf}(\theta_i) \cdot T_{bf}^{-1}(\theta_j) \cdot T_{bc} = T_{bc} \cdot T_{cp}^i \cdot {T_{cp}^j}^{-1}. \tag{8} Tbf(θi)Tbf1(θj)Tbc=TbcTcpiTcpj1.(8)

T ~ a i j = T b f ( θ i ) ⋅ T b f − 1 ( θ j ) \tilde{T}_{a_{ij}}=T_{bf}(\theta_i) \cdot T_{bf}^{-1}(\theta_j) T~aij=Tbf(θi)Tbf1(θj) T ~ c i j = T c p i ⋅ T c p j − 1 \tilde{T}_{c_{ij}}=T_{cp}^i \cdot {T_{cp}^j}^{-1} T~cij=TcpiTcpj1 T ~ b = T b c \tilde{T}_b = T_{bc} T~b=Tbc, 则Eq(8)可简化为:
T ~ a i j ⋅ T ~ b = T ~ b ⋅ T ~ c i j . (9) \tilde{T}_{a_{ij}} \cdot \tilde{T}_b = \tilde{T}_b \cdot \tilde{T}_{c_{ij}}. \tag{9} T~aijT~b=T~bT~cij.(9)

4.3 模型统一

可以看出,Eq(5)和Eq(9)具有相同的形式。因此,Eye-in-Hand模式和Eye-to-Hand模式的手眼标定具有相同形式的求解方程,即机械臂移动 N N N个关节角,构造 N − 1 N-1 N1组方程,求解最优化问题:
arg min ⁡ T b Σ i = 1 , j = i + 1 N − 1 ∥ L o g ( T a i j ⋅ T b ⋅ ( T b ⋅ T c i j ) − 1 ) ∥ , (10) \argmin_{T_b} \Sigma_{i=1,j=i+1}^{N-1} {\| Log(T_{a_{ij}} \cdot T_b \cdot (T_b \cdot T_{c_{ij}})^{-1}) \|}, \tag{10} TbargminΣi=1,j=i+1N1Log(TaijTb(TbTcij)1),(10)
其中, L o g ( ⋅ ) Log(\cdot) Log() 表示李代数。

5. 两步法求解 T a ⋅ T b = T b ⋅ T c T_a \cdot T_b = T_b \cdot T_c TaTb=TbTc

由于 T a T_a Ta T b T_b Tb T c T_c Tc都是4x4的空间变换矩阵,可展开为旋转与平移形式,即 T a ⋅ T b = T b ⋅ T c T_a \cdot T_b = T_b \cdot T_c TaTb=TbTc可展开为:
[ R a t a 0 1 ] ⋅ [ R b t b 0 1 ] = [ R b t b 0 1 ] ⋅ [ R c t c 0 1 ] , \left[ \begin{array}{cc} R_a & t_a \\ \bold{0} & 1 \end{array} \right] \cdot \left[ \begin{array}{cc} R_b & t_b \\ \bold{0} & 1 \end{array} \right] = \left[ \begin{array}{cc} R_b & t_b \\ \bold{0} & 1 \end{array} \right] \cdot \left[ \begin{array}{cc} R_c & t_c \\ \bold{0} & 1 \end{array} \right], [Ra0ta1][Rb0tb1]=[Rb0tb1][Rc0tc1],
即:
R a ⋅ R b = R b ⋅ R c , R a ⋅ t b + t a = R b ⋅ t c + t b . \begin{align} R_a \cdot R_b &= R_b \cdot R_c, \tag{11} \\ R_a \cdot t_b + t_a &= R_b \cdot t_c + t_b. \tag{12} \\ \end{align} RaRbRatb+ta=RbRc,=Rbtc+tb.(11)(12)
因此,可先求解 T b T_b Tb的旋转分量 R b R_b Rb,再求解 T b T_b Tb的平移分量 t b t_b tb

5.1 求解 T b T_b Tb的旋转分量

5.1.1 先验知识: 反对称矩阵

向量 a = [ a x , a y , a z ] T ∈ R 3 \bold{a} = [a_x, a_y, a_z]^T \in \R^3 a=[ax,ay,az]TR3的反对称矩阵(skew-symmetric matrix)定义为 a ∧ \bold{a}^\wedge a
a ∧ = [ 0 − a z a y a z 0 − a x − a y a x 0 ] . \bold{a}^\wedge = \left[ \begin{array}{ccc} 0 & -a_z & a_y \\ a_z & 0 & -a_x \\ -a_y & a_x & 0 \end{array} \right]. a= 0azayaz0axayax0 .

5.1.2 四元数乘法算子

设有四元数 q \bold{q} q
q = q w + q x i + q y j + q z k = [ q w q v ] , \bold{q} = q_w + q_x \bold{i} + q_y \bold{j} + q_z \bold{k} = \left[ \begin{array}{c} q_w \\ \bold{q}_v \end{array} \right], q=qw+qxi+qyj+qzk=[qwqv],
其中, q w , q x , q y , q z ∈ R q_w, q_x, q_y, q_z \in \R qw,qx,qy,qzR, q v = [ q x , q y , q z ] T ∈ R 3 x 1 \bold{q}_v = [q_x, q_y, q_z]^T \in \R^{3\mathbf{x}1} qv=[qx,qy,qz]TR3x1。旋转矩阵乘法可等效于四元数乘法,即
R a c = R a b ⋅ R b c    ⟺    q a c = q a b ⨂ q b c , = [ q a b ] L ⋅ q b c = [ q b c ] R ⋅ q a b , (13) R_{ac} = R_{ab} \cdot R_{bc} \iff \begin{align*} \bold{q}_{ac} &= \bold{q}_{ab} \bigotimes \bold{q}_{bc}, \\ &= [\bold{q}_{ab}]_L \cdot \bold{q}_{bc} = [\bold{q}_{bc}]_R \cdot \bold{q}_{ab}, \\ \end{align*} \tag{13} Rac=RabRbcqac=qabqbc,=[qab]Lqbc=[qbc]Rqab,(13)
其中, ⨂ \bigotimes 是四元数乘法运算符, [ q ] L [\bold{q}]_L [q]L [ q ] R [\bold{q}]_R [q]R分别是四元数左乘算子和右乘算子:
[ q ] L = [ q w − q v T q v q w I 3 × 3 + q v ∧ ] [ q ] R = [ q w − q v T q v q w I 3 × 3 − q v ∧ ] , (14) \begin{array}{cc} [\bold{q}]_L &= \left[ \begin{array}{cc} q_w & -\bold{q}_v^T \\ \bold{q}_v & q_w \bold{I}_{3\times3} + {\bold{q}_v}^\wedge \end{array} \right] \\ [\bold{q}]_R &= \left[ \begin{array}{cc} q_w & -\bold{q}_v^T \\ \bold{q}_v & q_w \bold{I}_{3\times3} - {\bold{q}_v}^\wedge \end{array} \right] \end{array}, \tag{14} [q]L[q]R=[qwqvqvTqwI3×3+qv]=[qwqvqvTqwI3×3qv],(14)
其中, I 3 × 3 \bold{I}_{3\times3} I3×3是3x3的单位矩阵, q v ∧ \bold{q}_v^\wedge qv q v \bold{q}_v qv的反对称矩阵。

5.1.3 求解 R b R_b Rb

利用公式(13)和(14),可将公式(11)重写为:
            q a ⨂ q b = q b ⨂ q c ,    ⟺    ( [ q a ] L − [ q c ] R ) ⋅ q b = 0 4 × 1 \begin{align} & \ \ \ \ \ \ \ \ \ \ \ \bold{q}_a \bigotimes \bold{q}_b = \bold{q}_b \bigotimes \bold{q}_c, \\ &\iff \left( [\bold{q}_a]_L - [\bold{q}_c]_R \right) \cdot \bold{q}_b = \bold{0}_{4\times 1} \end{align}            qaqb=qbqc,([qa]L[qc]R)qb=04×1
未完待续…


http://www.kler.cn/a/570277.html

相关文章:

  • 【算法】acwing算法基础875. 快速幂
  • Tauri跨端笔记实战(4) - 如何实现系统级截图
  • 通过电脑怎么安装和删除ios手机上的app
  • 究竟什么是AI提示词?深入解析与实战应用
  • STL——list的介绍和模拟实现
  • 【三.大模型实战应用篇】【5.自然语言转SQL:AI与数据库的无缝对接】
  • 【Python】基础知识四
  • Qt开发:如何使用QThread
  • springboot相关随记-2025
  • 批量设置 Word 样式,如字体信息、段落距离、行距、页边距等信息
  • 详解LSM树
  • DeepSeek与数据分析:现状、挑战与未来展望
  • LeetCode 11 - 盛最多水的容器
  • YOLOv12:目标检测新时代的破局者
  • C语言输入函数终极指南:深入解析scanf、fgets、getchar和sscanf
  • 《白帽子讲 Web 安全》之深入同源策略(万字详解)
  • UNION 和 UNION ALL 的区别:深入解析 SQL 中的合并操作
  • nlp第八节——序列标注任务
  • Spring Security + OAuth2.0
  • C++运算符重载的学习笔记