一种带电作业机器人作业环境3D重构方法与流程

文档序号:11145191阅读:来源:国知局

技术特征:

1.一种带电作业机器人作业环境3D重构方法,其特征在于,利用双目摄像头确定单个元器件和机械手工具的位姿参数,将获得的位姿参数导入带电作业场景的模型中,生成带电作业现场实时监控场景并显示在监控设备上。

2.如权利要求1所述带电作业机器人作业环境3D重构方法,其特征在于,利用双目摄像头,从两个视点同时观察同一场景获取的目标图像,通过三角测量原理,计算图像像素间的视差来解算特征点在测量坐标系下的三维坐标,根据物体上对应特征点在测量坐标系下空间坐标以及物体坐标系下空间坐标,求解目标的位置姿态参数。

3.如权利要求2所述带电作业机器人作业环境3D重构方法,其特征在于,求解目标的位置姿态参数的具体过程为:

第一步:建立坐标系:

建立物体坐标系OO-xoyozo,设目标上第i个特征点在物体坐标系上的坐标为qi=(xwi,ywi,zwi)T

建立测量坐标系,将第一个摄像头的摄像头坐标系为测量坐标系,目标上第i个特征点在测量坐标系上的坐标为pi=(xci,yci,zci)T

建立两个摄像机所采集的像素坐标系o-uv和o′-u′v′,o-uv为左摄像机像素坐标,o′-u′v′为右摄像机像素坐标,以成像平面左上角为原点,u、v轴分别平行于像平面坐标系的x轴和y轴。目标第i个特征点在两双目图像上的投影在其像素坐标系下的坐标分别为(u,v)T和(u′,v′)T

第二步:计算特征点在测量坐标系中的坐标:

双目摄像机中两摄像机的投影矩阵分别为M1和M2

M1=K[I 0]

M2=K[RC TC]

其中,K为摄像机的内参数矩阵,RC和TC为右摄像头相对于左摄像头的旋转矩阵和平移向量。

所求该特征点在测量坐标系下的齐次坐标用下式解出,

<mrow> <mfenced open = "[" close = "]"> <mtable> <mtr> <mtd> <msub> <mi>M</mi> <mn>13</mn> </msub> <msub> <mi>u</mi> <mi>i</mi> </msub> <mo>-</mo> <msub> <mi>M</mi> <mn>11</mn> </msub> </mtd> </mtr> <mtr> <mtd> <mrow> <msub> <mi>M</mi> <mn>13</mn> </msub> <msub> <mi>v</mi> <mi>i</mi> </msub> <mo>-</mo> <msub> <mi>M</mi> <mn>12</mn> </msub> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <msub> <mi>M</mi> <mn>23</mn> </msub> <msub> <mi>u</mi> <mi>i</mi> </msub> <mo>-</mo> <msub> <mi>M</mi> <mn>21</mn> </msub> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <msub> <mi>M</mi> <mn>23</mn> </msub> <msub> <mi>v</mi> <mi>i</mi> </msub> <mo>-</mo> <msub> <mi>M</mi> <mn>22</mn> </msub> </mrow> </mtd> </mtr> </mtable> </mfenced> <msub> <mover> <mi>P</mi> <mo>~</mo> </mover> <mi>i</mi> </msub> <mo>=</mo> <mn>0</mn> </mrow>

M11、M12、M13为投影矩阵M1的行向量,M21、M22、M23为投影矩阵M2的行向量,设左摄像头采集图像上第i个特征点在像素坐标系下的齐次坐标为(u1,v1,1)T

第三步:求解旋转矩阵N:一个四元数包含一个标量分量和一个3D向量分量,的最大值是旋转矩阵N的最大特征值,为其对应的特征向量,N的求解公式如下,式中的S为M的分块矩阵;p为特征点在测量坐标系下的三维坐标,q为特征点在物体坐标系下的三维坐标;

假设n个特征点的质心在测量坐标系和物体坐标系中的坐标分别为

<mfenced open = "" close = ""> <mtable> <mtr> <mtd> <mrow> <mover> <mi>p</mi> <mo>&OverBar;</mo> </mover> <mo>=</mo> <mfrac> <mn>1</mn> <mi>n</mi> </mfrac> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>p</mi> <mi>i</mi> </msub> </mrow> </mtd> <mtd> <mrow> <mover> <mi>q</mi> <mo>&OverBar;</mo> </mover> <mo>=</mo> <mfrac> <mn>1</mn> <mi>n</mi> </mfrac> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>q</mi> <mi>i</mi> </msub> </mrow> </mtd> </mtr> </mtable> </mfenced>

则可以得到分别以质心为原点的坐标系下的新坐标

<mfenced open = "" close = ""> <mtable> <mtr> <mtd> <mrow> <msubsup> <mi>p</mi> <mi>i</mi> <mo>&prime;</mo> </msubsup> <mo>=</mo> <msub> <mi>p</mi> <mi>i</mi> </msub> <mo>-</mo> <mover> <mi>p</mi> <mo>&OverBar;</mo> </mover> </mrow> </mtd> <mtd> <mrow> <msubsup> <mi>q</mi> <mi>i</mi> <mo>&prime;</mo> </msubsup> <mo>=</mo> <msub> <mi>q</mi> <mi>i</mi> </msub> <mo>-</mo> <mover> <mi>q</mi> <mo>&OverBar;</mo> </mover> </mrow> </mtd> </mtr> </mtable> </mfenced>

<mrow> <mi>N</mi> <mo>=</mo> <mfenced open = "[" close = "]"> <mtable> <mtr> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>x</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>y</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>z</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>y</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>x</mi> </mrow> </msub> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>z</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>x</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>y</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>y</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>x</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>y</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>x</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>x</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>y</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>z</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>y</mi> </mrow> </msub> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>y</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>x</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>x</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>z</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>y</mi> </mrow> </msub> </mrow> </mtd> <mtd> <mrow> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>y</mi> </mrow> </msub> <mo>+</mo> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>z</mi> </mrow> </msub> </mrow> </mtd> </mtr> </mtable> </mfenced> </mrow>

<mfenced open = "" close = ""> <mtable> <mtr> <mtd> <mrow> <mi>M</mi> <mo>=</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msubsup> <mi>p</mi> <mi>i</mi> <mo>&prime;</mo> </msubsup> <msubsup> <mi>q</mi> <mi>i</mi> <mrow> <mo>&prime;</mo> <mi>T</mi> </mrow> </msubsup> <mo>=</mo> <msup> <mi>p</mi> <mrow> <mo>&prime;</mo> <mi>T</mi> </mrow> </msup> <msup> <mi>q</mi> <mo>&prime;</mo> </msup> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>=</mo> <mfenced open = "[" close = "]"> <mtable> <mtr> <mtd> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>x</mi> </mrow> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>y</mi> </mrow> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mrow> <mi>x</mi> <mi>z</mi> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>x</mi> </mrow> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>y</mi> </mrow> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mrow> <mi>y</mi> <mi>z</mi> </mrow> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>x</mi> </mrow> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>y</mi> </mrow> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mrow> <mi>z</mi> <mi>z</mi> </mrow> </msub> </mtd> </mtr> </mtable> </mfenced> </mrow> </mtd> </mtr> </mtable> </mfenced>

第四步:计算出目标对象的位移向量:

通过公式计算出位移向量由,位移向量即确定了相关的位姿参数。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1