[原創]九點標定工具之機械手頭部相機標定

2022-07-25 15:00:23

1、機械手頭部相機與龍門架頭部相機的區別?

  • 上篇文字講解了機械手頭部相機標定原理及方法,中間有提到只適用於龍門架,那為什麼呢?
  • 答:龍門架在運動過程中,固定在龍門架上的移動相機相對與龍門架本身只有平移關係,而架在機械手上的相機存在角度旋轉;機械手在運動過程中機械臂J1與機械臂J2兩個的角度一直在變化,而龍門架的X,Y並沒有旋轉

2、原理分析

  • 如上圖所示,J2上面掛載一個相機, 怎麼計算旋轉關係呢?
  • 換個角度看問題,相機相對於P1點的相對位置從來就沒有改變,也就是說影象座標點相對於P1座標點從來沒有改變。
  • 假如新建一個座標系W2,W2以P1為座標系原點,J2臂延長方向為X軸,J2垂直方向為Y軸。那麼相機的影象座標系與W2存在固定的仿射變換關係(和固定相機一樣了)
  • 而W2與機械手座標系存在旋轉與平移的關係,平移關係可以通過P1的點位來確定,旋轉關係可以通過J1,J2的角度來確定。
  • 通過這樣分解機械手頭部相機就變成了座標系(平移+旋轉)+仿射變換了。

3、詳細步驟

4、原始碼

      private void updatePoiMatrix(Position pcbPoi,Position poi1, Position poi2,Position takePhotoPoi)
        {
            //更新對應的陣列
            imagePoiList.Add(new Position() { X = (poi1.X + poi2.X) / 2, Y = (poi1.Y + poi2.Y) / 2 });
            //dstPoi- takePhotoPoi,獲取takePhoto的J1與J2,
            System.Windows.Point p1=new System.Windows.Point();
            p1.X = pcbPoi.X - takePhotoPoi.X;
            p1.Y = pcbPoi.Y - takePhotoPoi.Y;
            var jAngles=this.currentRobot.GetJAngle();
            double angleJ = -jAngles[0] - jAngles[1];
            System.Windows.Point p2= MatrixHelper.GetRotatePoint(p1, angleJ, new System.Windows.Point() { X = 0, Y = 0 });

            Position newDstPoi = new Position();
            newDstPoi.X = p2.X;
            newDstPoi.Y = p2.Y;
            robotPoiList.Add(newDstPoi);
        }
        
         /// <summary>
        /// 逆時針旋轉,獲取旋轉後的點位
        /// </summary>
        /// <param name="p1">待旋轉的點</param>
        /// <param name="angle">旋轉角度</param>
        /// <param name="center">旋轉中心</param>
        /// <returns></returns>
        public static Point GetRotatePoint(Point p1, double angle, Point center)
        {
            //使用旋轉矩陣求值
            RotateTransform rotateTransform = new RotateTransform(angle, center.X, center.Y);
            Point p = new Point(p1.X, p1.Y);
            System.Windows.Point p2 = rotateTransform.Transform(p);
            return p2;
        }

5. 後續計劃[敬請期待],如需完整程式碼請微信聯絡

  • 下相機定位演演算法
  • 基於頭部相機的載具定位演演算法
  • 基於頂部相機的塑盤取料演演算法
  • 基於頭部相機的檢測演演算法實現
  • 一種面向介面介面、依賴注入的運控框架的總體介紹及分層實現