国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab

這篇具有很好參考價值的文章主要介紹了機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.眼在手外原理

2.附上眼在手外求得手眼矩陣的python代碼

3.眼在手外標(biāo)定步驟

1)打印棋盤格

2)得到hand數(shù)據(jù)

3)得到camera數(shù)據(jù)

4.運(yùn)行python得到手眼矩陣



1.眼在手外原理

機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab,機(jī)械臂,數(shù)碼相機(jī)

?機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab,機(jī)械臂,數(shù)碼相機(jī)

眼在手外所求的手眼矩陣是基坐標(biāo)到相機(jī)的轉(zhuǎn)換矩陣

2.附上眼在手外求得手眼矩陣的python代碼

#!/usr/bin/env python
# coding: utf-8
import transforms3d as tfs
import numpy as np
import math


def get_matrix_eular_radu(x, y, z, rx, ry, rz):
    rmat = tfs.euler.euler2mat(math.radians(rx), math.radians(ry), math.radians(rz))
    rmat = tfs.affines.compose(np.squeeze(np.asarray((x, y, z))), rmat, [1, 1, 1])
    return rmat


def skew(v):
    return np.array([[0, -v[2], v[1]],
                     [v[2], 0, -v[0]],
                     [-v[1], v[0], 0]])


def rot2quat_minimal(m):
    quat = tfs.quaternions.mat2quat(m[0:3, 0:3])
    return quat[1:]


def quatMinimal2rot(q):
    p = np.dot(q.T, q)
    w = np.sqrt(np.subtract(1, p[0][0]))
    return tfs.quaternions.quat2mat([w, q[0], q[1], q[2]])


# hand = [1.1988093940033604, -0.42405585264804424, 0.18828251788562061, 151.3390418721659, -18.612399542280507,
#         153.05074895025035,
#         1.1684831621733476, -0.183273375514656, 0.12744868246620855, -161.57083804238462, 9.07159838346732,
#         89.1641128844487,
#         1.1508343174145468, -0.22694301453461405, 0.26625166858469146, 177.8815855486261, 0.8991159570568988,
#         77.67286224959672]
hand = [

    # -0.05448,-0.15018,0.06552,89.61059916,-2.119943842,-1.031324031,
    #     -0.10149,-0.23025,0.04023,96.7725716,6.187944187,5.328507495,
    #     -0.10114,-0.2207,0.04853,97.00175472,5.729577951,1.375098708    毫米單位

# -54.48,	-150.18,	65.52,  89.61059916,    -2.119943842,   -1.031324031,
# -101.49,-230.25,    40.23,  96.7725716,      6.187944187,    5.328507495,
# -101.14,-220.7	,   48.53,  97.00175472,    5.729577951,    1.375098708

# -122.12,	-323.09,	-206.86,	82.62051406,	-7.161972439	,1.948056503,
# -96.54,	-324.53,	-215.59,	83.70913387,	-7.734930234	,7.276563998,
# -116.41,	-325.50,	-202.05,	81.18811957,	-7.505747116	,6.187944187

        # zed
-54.29,	-95.24,	199.74,	80.45,	-5.88,	8.8,
-54.28,	-95.25,	199.73,	80.66,	-6.62,	18.13,
-54.3,	-95.27,	199.75,	81.57,	-0.76,	13.05


 ]

# camera = [-0.16249272227287292, -0.047310635447502136, 0.4077761471271515, -56.98037030812389, -6.16739631361851,
#           -115.84333735802369,
#           0.03955405578017235, -0.013497642241418362, 0.33975949883461, -100.87129330834215, -17.192685528625265,
#           -173.07354634882094,
#           -0.08517949283123016, 0.00957852229475975, 0.46546608209609985, -90.85270962096058, 0.9315977976503153,
#           175.2059707654342]

camera = [

    # -0.0794887,-0.0812433,0.0246,0.0008,0.0033,0.0182,
    #       -0.078034,-0.0879632,0.4881494,-0.1085,0.0925,-0.1569,
    #       -0.1086702,-0.0881681,0.4240367,-0.1052,0.1251,-0.1124,

# -79.4887,	-81.2433,	24.6,        0.0008,     0.0033,     0.0182,
# -78.034,	-87.9632,	488.1494,    -0.1085,    0.0925,     -0.1569,
# -108.6702,	-88.1681,	424.0367,    -0.1052,    0.1251,     -0.1124,

#     23.22020448 ,-69.45610195    ,370.5620915    ,0.2530 ,-0.0707, -1.5724,
#     46.8704669 ,-60.19912413    ,263.9729574    ,0.1473 ,-0.1117 ,-1.6090,
#     53.92881454 ,-39.52795178    ,453.4331562     ,0.2702 ,-0.1256, -1.6270,
-174.01022,	1797.687613,	2425.313638,	    1.2710,    0.1238,    0.0033,
-175.3384083,	260.4775862,	1349.136325,	    1.5191,    0.0664,    0.0058,
123.6753385,	-109.6917624,	695.5448714	,    0.4651,   -0.1328,   -0.2488



]

Hgs, Hcs = [], []
for i in range(0, len(hand), 6):
    Hgs.append(get_matrix_eular_radu(hand[i], hand[i + 1], hand[i + 2], hand[i + 3], hand[i + 4], hand[i + 5],))
    Hcs.append(
        get_matrix_eular_radu(camera[i], camera[i + 1], camera[i + 2], camera[i + 3], camera[i + 4], camera[i + 5]))

Hgijs = []
Hcijs = []
A = []
B = []
size = 0
for i in range(len(Hgs)):
    for j in range(i + 1, len(Hgs)):
        size += 1
        Hgij = np.dot(np.linalg.inv(Hgs[j]), Hgs[i])
        Hgijs.append(Hgij)
        Pgij = np.dot(2, rot2quat_minimal(Hgij))

        Hcij = np.dot(Hcs[j], np.linalg.inv(Hcs[i]))
        Hcijs.append(Hcij)
        Pcij = np.dot(2, rot2quat_minimal(Hcij))

        A.append(skew(np.add(Pgij, Pcij)))
        B.append(np.subtract(Pcij, Pgij))
MA = np.asarray(A).reshape(size * 3, 3)
MB = np.asarray(B).reshape(size * 3, 1)
Pcg_ = np.dot(np.linalg.pinv(MA), MB)
pcg_norm = np.dot(np.conjugate(Pcg_).T, Pcg_)
Pcg = np.sqrt(np.add(1, np.dot(Pcg_.T, Pcg_)))
Pcg = np.dot(np.dot(2, Pcg_), np.linalg.inv(Pcg))
Rcg = quatMinimal2rot(np.divide(Pcg, 2)).reshape(3, 3)

A = []
B = []
id = 0
for i in range(len(Hgs)):
    for j in range(i + 1, len(Hgs)):
        Hgij = Hgijs[id]
        Hcij = Hcijs[id]
        A.append(np.subtract(Hgij[0:3, 0:3], np.eye(3, 3)))
        B.append(np.subtract(np.dot(Rcg, Hcij[0:3, 3:4]), Hgij[0:3, 3:4]))
        id += 1

MA = np.asarray(A).reshape(size * 3, 3)
MB = np.asarray(B).reshape(size * 3, 1)
Tcg = np.dot(np.linalg.pinv(MA), MB).reshape(3, )
print(tfs.affines.compose(Tcg, np.squeeze(Rcg), [1, 1, 1]))

其中:

????????hand為基坐標(biāo)系下抓夾的位姿,一般從示教器上獲取,我用的是ur5機(jī)械臂,注意單位mm和rad,三行為三組數(shù)據(jù),hand=(x,y,z,rx,ry,rz),同時應(yīng)將弧度制rad轉(zhuǎn)為角度制°

????????camera為相機(jī)中標(biāo)定板的位姿,為相機(jī)的外參(平移矩陣、旋轉(zhuǎn)矩陣),三行為三組數(shù)據(jù),camera=(x,y,z,rx,ry,rz),同時應(yīng)將弧度制轉(zhuǎn)為角度制

3.眼在手外標(biāo)定步驟

1)打印棋盤格

為了使標(biāo)定精度更加準(zhǔn)確,棋盤格精度越高越好;角點數(shù)越多越好;盡量減少相機(jī)中心到標(biāo)定板的距離(適當(dāng)小的標(biāo)定板)等

參考資料:

手眼標(biāo)定,我的結(jié)果顯示手和眼相距上千米!手眼標(biāo)定結(jié)果準(zhǔn)確率如何提高?_提高手眼標(biāo)定精度_魚香ROS的博客-CSDN博客

這里我選擇4*4的棋盤格

2)得到hand數(shù)據(jù)

示教器右側(cè)為hand數(shù)據(jù),記錄五組,并轉(zhuǎn)化為角度制

機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab,機(jī)械臂,數(shù)碼相機(jī)

機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab,機(jī)械臂,數(shù)碼相機(jī)

3)得到camera數(shù)據(jù)

將相機(jī)固定在距離機(jī)械臂基坐標(biāo)的一定距離的地方,固定相機(jī),記住距離

將棋盤格粘貼在機(jī)械臂末端執(zhí)行器上,用相機(jī)拍攝五組棋盤格圖片,使用matlab計算相機(jī)外參TR,將得到的TR轉(zhuǎn)換為歐拉角

(matlab工具箱使用單目標(biāo)定,其中得到的T為translationvectors,R為rotationvectors)

機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab,機(jī)械臂,數(shù)碼相機(jī)

?(不知道這個棋盤格不正會不會有影響)

matlab標(biāo)定得到的是旋轉(zhuǎn)向量/旋轉(zhuǎn)矩陣,得到的數(shù)據(jù)轉(zhuǎn)化為歐拉角,參考下面的鏈接手眼標(biāo)定必備——旋轉(zhuǎn)向量轉(zhuǎn)換為旋轉(zhuǎn)矩陣python——羅德里格斯公式Rodrigues_python rodrigues_邸笠佘司的博客-CSDN博客

手眼標(biāo)定中旋轉(zhuǎn)矩陣轉(zhuǎn)歐拉角——matlab_邸笠佘司的博客-CSDN博客

?機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab,機(jī)械臂,數(shù)碼相機(jī)

4.運(yùn)行python得到手眼矩陣

?文章來源地址http://www.zghlxwxcb.cn/news/detail-673179.html

到了這里,關(guān)于機(jī)械臂手眼標(biāo)定ZED相機(jī)——眼在手外python、matlab的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • JAKA+aruco+realsense+眼在手外的手眼標(biāo)定

    JAKA+aruco+realsense+眼在手外的手眼標(biāo)定

    (機(jī)械臂的運(yùn)行節(jié)點商家一般會給,注意看使用說明里面的信息,容易踩雷) ??? 用戶使用說明里面會告訴你表示機(jī)器人位姿的(我的是toolpoint,這里有個大雷,后面說) (老師的驅(qū)動我用不了,就略過了,只是用aruco和calibrate兩部分,眼在手外和手上的都能用,老師的是

    2024年02月21日
    瀏覽(16)
  • 機(jī)械臂 手眼標(biāo)定 手眼矩陣 eye-in-hand 原理、實踐及代碼

    機(jī)械臂 手眼標(biāo)定 手眼矩陣 eye-in-hand 原理、實踐及代碼

    所謂 手眼系統(tǒng) ,就是人眼睛看到一個東西的時候要讓手去抓取,就需要大腦知道眼睛和手的坐標(biāo)關(guān)系。而相機(jī)知道的是像素坐標(biāo),機(jī)械手是空間坐標(biāo)系,所以手眼標(biāo)定就是得到像素坐標(biāo)系和空間機(jī)械手坐標(biāo)系的坐標(biāo)轉(zhuǎn)化關(guān)系。 目前工業(yè)上通常使用兩種方法進(jìn)行機(jī)械臂的手眼

    2024年02月03日
    瀏覽(24)
  • zed2i相機(jī)內(nèi)參標(biāo)定

    zed2i相機(jī)內(nèi)參標(biāo)定

    參考: https://blog.csdn.net/yanpeng_love/article/details/107166922 https://blog.csdn.net/weixin_41954990/article/details/127928852 參考以上連接先安裝 kalibr 。 注意: python包裝不上,換成:pip install 出現(xiàn)pyx找不到的錯誤:sudo apt-get install python3-pyx 1. 生成標(biāo)定板 可以自己定制特定尺寸的標(biāo)定板: 其中,

    2024年02月04日
    瀏覽(29)
  • 【ZED&SLAM】Ubuntu18.04系統(tǒng)ZED 2i雙目相機(jī)SDK安裝、聯(lián)合標(biāo)定、SLAM測試

    【ZED&SLAM】Ubuntu18.04系統(tǒng)ZED 2i雙目相機(jī)SDK安裝、聯(lián)合標(biāo)定、SLAM測試

    筆記本電腦i5-8300H、GTX 1060、32G RAM 后續(xù)一些工作轉(zhuǎn)移到了PC上:i7-12700 因為后面要測試Vins-Fusion和ORB-SLAM3,所以推薦安裝 Ubuntu 18.04(或者Ubuntu 20.04) + ROS 1 (不建議用比Ubuntu18更低的版本) ROS一鍵安裝命令: ZED 2i:雙目相機(jī)配有9軸IMU 此前電腦已經(jīng)配置好:Ubuntu 18.04,ROS 1,

    2024年01月18日
    瀏覽(19)
  • 使用Kalibr標(biāo)定相機(jī)和IMU(ZED+px4)外參

    使用Kalibr標(biāo)定相機(jī)和IMU(ZED+px4)外參

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 本文僅使用kalibr中cam-imu的聯(lián)合標(biāo)定,關(guān)于camera內(nèi)參默認(rèn)已經(jīng)知道了。主要會總結(jié)一些標(biāo)定上的小經(jīng)驗,有不對的地方,希望網(wǎng)友可以指出。文章最后將使用標(biāo)定的cam-imu外參在VINS-Fusion中進(jìn)行驗證 Kalibr是

    2023年04月19日
    瀏覽(62)
  • python 手眼標(biāo)定OpenCV手眼標(biāo)定(calibrateHandeye())一

    python 手眼標(biāo)定OpenCV手眼標(biāo)定(calibrateHandeye())一

    以下代碼來源 本篇博客通過該代碼,附上記錄的公式與查找連接,方面以后調(diào)用能弄懂各個參數(shù)的意思 本篇看完看第二篇代碼踩坑部分python 手眼標(biāo)定OpenCV手眼標(biāo)定(calibrateHandeye())二 相機(jī)標(biāo)定原理視頻介紹 calibrateHandeye() 參數(shù)描述如下:R_gripper2base,t_gripper2base是機(jī)械臂抓手

    2024年02月15日
    瀏覽(24)
  • python 手眼標(biāo)定OpenCV手眼標(biāo)定(calibrateHandeye())二

    python 手眼標(biāo)定OpenCV手眼標(biāo)定(calibrateHandeye())二

    這一章我們來根據(jù)上一章的分析,為手眼標(biāo)定函數(shù)calibrateHandEye 準(zhǔn)備他那些麻煩的參數(shù) 更詳細(xì)的參數(shù)參考鏈接 即R_all_end_to_base_1,T_all_end_to_base_1, 我們可用通過輸入的機(jī)械臂提供的6組參數(shù)得到,3個位姿與3個歐拉角 示例代碼 這里是關(guān)系是 通過 cv2.findChessboardCorners 角點查找函數(shù)

    2024年02月01日
    瀏覽(18)
  • (已修正精度 1mm左右)Realsense d435i深度相機(jī)+Aruco+棋盤格+OpenCV手眼標(biāo)定全過程記錄

    (已修正精度 1mm左右)Realsense d435i深度相機(jī)+Aruco+棋盤格+OpenCV手眼標(biāo)定全過程記錄

    最近幫別人做了個手眼標(biāo)定,然后我標(biāo)定完了大概精度能到1mm左右。所以原文中誤差10mm可能是當(dāng)時那個臂本身的坐標(biāo)系有問題。然后用的代碼改成了基于python的,放在下面。 新來的小伙伴可以只參考前面的代碼就可以完成標(biāo)定了。 有問題的話可以留言,一起交流~ 手眼標(biāo)定

    2024年02月04日
    瀏覽(48)
  • 機(jī)器人手眼標(biāo)定原理與python實現(xiàn)

    機(jī)器人手眼標(biāo)定原理與python實現(xiàn)

    機(jī)器人手眼標(biāo)定分為eye in hand與eye to hand兩種。介紹之前進(jìn)行變量定義說明: : base基坐標(biāo)系 {g}: gripper夾具坐標(biāo)系 {t}: target標(biāo)定板坐標(biāo)系 {c}: camera相機(jī)坐標(biāo)系 1、眼在手上(eye in hand) 眼在手上,相機(jī)固定在機(jī)器人上。 圖1. eye in hand示意圖 由以上兩公式得: 經(jīng)變換得: 可得:

    2024年02月02日
    瀏覽(19)
  • Python-opencv 手眼標(biāo)定(九點定位)

    ?Python-opencv 手眼標(biāo)定(九點定位) 本文主要解決相機(jī)像素坐標(biāo)轉(zhuǎn)換機(jī)械臂坐標(biāo)的問題,用到的opencv版本為4.5.5.64 一、手眼定位原理? 以下可以參考 基于OpenCv的機(jī)器人手眼標(biāo)定(九點標(biāo)定法) 主要思路就是將九點標(biāo)定圖放在機(jī)械臂獲取范圍內(nèi),得到九個圓心坐標(biāo)(像素坐標(biāo)

    2024年02月09日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包