关于手眼标定的误差计算
??之前做的眼在手上的手眼標(biāo)定,流程結(jié)束后,會(huì)得到相機(jī)坐標(biāo)系到機(jī)械臂末端坐標(biāo)系的變換關(guān)系T_cam2end。我一般直接量取機(jī)械臂末端到相機(jī)的直線距離來校對(duì)z軸方向的距離,但只是做個(gè)估算,并未進(jìn)行精確測(cè)量。
??我認(rèn)為手眼標(biāo)定的誤差計(jì)算流程:
??以眼在手上為例,標(biāo)定結(jié)束后得到T_cam2end,再根據(jù)公式計(jì)算得到目標(biāo)和機(jī)械臂基底的位姿關(guān)系,讓相機(jī)識(shí)別到某一點(diǎn),然后在機(jī)械臂末端加裝一個(gè)錐形的尖端,通過計(jì)算得到的位姿輸入到機(jī)械臂中,控制機(jī)械臂移動(dòng)到目標(biāo)上方,用尖端去戳目標(biāo),以此來計(jì)算精度。
??但有個(gè)疑問?這么做人工去量取的話,是怎么做到很精確如0.0幾個(gè)毫米的數(shù)量級(jí)的,而且量取的只是x、y、z方向的誤差,那rx、ry、rz該怎么測(cè)量呢?
(PS:如有大佬知道望告知,非常感謝)
思路:
??根據(jù)標(biāo)準(zhǔn)差的概念,使用樣本標(biāo)準(zhǔn)差進(jìn)行計(jì)算。
??我的做法:完成手眼標(biāo)定后,得到T_cam2end,將目標(biāo)圖這里以Aruco碼為例固定在一處,控制機(jī)械臂在不同的角度對(duì)目標(biāo)圖進(jìn)行拍照,我拍了5張,根據(jù)下面的公式得到5組目標(biāo)和機(jī)械臂基底之間的位姿關(guān)系,因?yàn)槟繕?biāo)圖固定不動(dòng),所以目標(biāo)和機(jī)械臂基底之間的位姿關(guān)系為固定值,T_cam2end也是固定值,T_end2base和T_target2cam每次的值都不一樣,根據(jù)樣本標(biāo)準(zhǔn)差,計(jì)算位姿(X, Y, Z, RX, RY, RZ)的誤差值。
代碼
// 計(jì)算手眼標(biāo)定的樣本標(biāo)準(zhǔn)偏差 std::vector<double> stdev_err_res; int num = stdev_err[0].size(); int len = stdev_err.size(); for (int i = 0; i < num; i++) {double mean = 0.0, sum = 0.0;for (int j = 0; j < len; j++) {sum += stdev_err[j][i];}mean = sum / len;double square_diff_sum = 0.0;for (int k = 0; k < len; k++) {square_diff_sum += std::pow(stdev_err[k][i] - mean, 2);}double variance;variance = (square_diff_sum / (len - 1));stdev_err_res.push_back(std::sqrt(variance)); }總覺得這么計(jì)算的話,萬一樣本中有一個(gè)值偏差很大或者是錯(cuò)誤的,不就增加了整體的誤差,暫時(shí)還沒想到好的方法。。。
總結(jié)
以上是生活随笔為你收集整理的关于手眼标定的误差计算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matpower学习笔记
- 下一篇: 大二学生web期末大作业 在线电影网站