女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何完成機(jī)械臂的運(yùn)動(dòng)控制模塊

大象機(jī)器人科技 ? 來(lái)源:大象機(jī)器人科技 ? 作者:大象機(jī)器人科技 ? 2023-02-10 16:07 ? 次閱讀

使用一個(gè)桌面型的六軸機(jī)械臂,在機(jī)械臂的末端安裝一個(gè)攝像頭,來(lái)進(jìn)行人臉識(shí)別和跟蹤的一個(gè)功能。該功能分為兩個(gè)模塊,一個(gè)是人臉識(shí)別模塊,另一個(gè)是機(jī)械臂的運(yùn)動(dòng)控制模塊

在前文有介紹到怎么控制機(jī)械臂的基本運(yùn)動(dòng)和人臉識(shí)別是如何實(shí)現(xiàn)的,在這里就不再?gòu)?fù)述了,本篇的內(nèi)容主要是介紹是如何完成運(yùn)動(dòng)控制模塊的。

使用到的設(shè)備

mechArm 270 -Pi ,適配的攝像頭

poYBAGPl-0GABAlBAAFYH_5d57w716.jpg

設(shè)備的詳情可以了解前文

機(jī)械臂的運(yùn)動(dòng)控制模塊

接下來(lái)介紹運(yùn)動(dòng)控制的模塊。

控制模塊,常見(jiàn)的運(yùn)動(dòng)控制輸入的是笛卡爾空間的絕對(duì)位置,想要獲得絕對(duì)位置需要做相機(jī)和手臂的手眼標(biāo)定算法,這個(gè)涉及的未知參數(shù)就有十幾個(gè)了,我們略過(guò)了這個(gè)步驟,選擇使用相對(duì)位移做運(yùn)動(dòng)控制,這就需要設(shè)計(jì)一套采樣運(yùn)動(dòng)機(jī)制,確保一次控制周期能完整地獲得人臉的偏移并實(shí)施跟蹤。

所以我想要整個(gè)功能能夠快速呈現(xiàn)出來(lái),就沒(méi)有選擇用手眼標(biāo)定的算法來(lái)處理相機(jī)和手臂的關(guān)系。因?yàn)槭盅蹣?biāo)定的工作量是相當(dāng)龐大的。

下面的代碼是:從人臉識(shí)別算法中得到的信息來(lái)獲取參數(shù)。

code


_, img = cap.read()
# Converted to grey scale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Detecting faces
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
# Drawing the outline
for (x, y, w, h) in faces:
if w > 200 or w < 80:?
#Limit the recognition width to between 80 and 200 pixels
continue
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 3)
center_x = (x+w-x)//2+x
center_y = (y+h-y)//2+y
size_face = w


將獲取到的 center_x,center_y ,size_face這幾個(gè)變量用來(lái)計(jì)算位置。

下面是處理數(shù)據(jù)來(lái)控制運(yùn)動(dòng)的算法的代碼


run_num = 20 #Control cycle of 20 frames
if save_state == False:
# Save a start point (save_x, save_y)
save_x = center_x
save_y = center_y
save_z = size_face
origin_angles = mc.get_angles()
print("origin point = ", save_x, save_y, origin_angles)
time.sleep(2);
current_coords = mc.get_coords()
save_state = TRUE
else:
if run_count > run_num: # Limit the control period to 20 frames
run_count = 0
# Recording relative offsets
error_x = center_x - save_x
error_y = center_y - save_y
error_z = size_face - save_z

# Pixel differences are converted into actual offsets, which can be scaled and oriented
trace_1 = -error_x * 0.15
trace_z = -error_y * 0.5
trace_x = -error_z * 2.0

# x/z axis offset, note that this is open loop control
current_coords[2] += trace_z
current_coords[0] += trace_x

#Restricting the Cartesian space xz range
if current_coords[0] < 70:
current_coords[0] = 70

if current_coords[0] > 150:
current_coords[0] = 150

if current_coords[2] < 220:
current_coords[2] = 220

if current_coords[2] > 280:
current_coords[2] = 280

# Inverse kinematic solutions
x = current_coords[0]
z = current_coords[2]
# print(x, z)

L1 = 100;
L3 = 96.5194;
x = x - 56.5;
z = z - 114;

cos_af = (L1*L1 + L3*L3 - (x*x + z*z))/(2*L1*L3);
cos_beta = (L1*L1 - L3*L3 + (x*x + z*z))/(2*L1*math.sqrt((x*x + z*z)));
reset = False
# The solution is only applicable to some poses, so there may be no solution
if abs(cos_af) > 1:
reset = True
if reset == True:
current_coords[2] -= trace_z
current_coords[0] -= trace_x
print("err = ",cos_af)
continue

af = math.acos(cos_af);
beta = math.acos(cos_beta);

theta2 = -(beta + math.atan(z/x) - math.pi/2);
theta3 = math.pi/2 - (af - math.atan(10/96));
theta5 = -theta3 - theta2;
cof = 57.295 #Curvature to angle

move_juge = False
# Limits the distance travelled, where trace_1 joint is in ° and trace_x/z is in mm
if abs(trace_1) > 1 and abs(trace_1) < 15:
move_juge = True
if abs(trace_z) > 10 and abs(trace_z) < 50:
move_juge = True
if abs(trace_x) > 25 and abs(trace_x) < 80:
move_juge = True

if (move_juge == True):
print("trace = ", trace_1, trace_z, trace_x)
origin_angles[0] += trace_1
origin_angles[1] = theta2*cof
origin_angles[2] = theta3*cof
origin_angles[4] = theta5*cof
mc.send_angles(origin_angles, 70)
else:
#Due to the open-loop control, if no displacement occurs the current coordinate value needs to be restored
current_coords[2] -= trace_z
current_coords[0] -= trace_x
else:
# 10 frames set aside for updating the camera coordinates at the end of the motion
if run_count < 10:
save_x = center_x
save_y = center_y
save_z = size_face
run_count += 1

在算法模塊中,獲得相對(duì)位移后如何進(jìn)行手臂移動(dòng),為了確保運(yùn)動(dòng)效果我們并沒(méi)有直接采用mecharm提供的坐標(biāo)運(yùn)動(dòng)接口,而是在python中添加了逆運(yùn)動(dòng)學(xué)部分,針對(duì)應(yīng)用場(chǎng)景計(jì)算了特定姿態(tài)下的機(jī)械臂逆解,將坐標(biāo)運(yùn)動(dòng)轉(zhuǎn)化成了角度運(yùn)動(dòng),避免了奇異點(diǎn)等影響笛卡爾空間運(yùn)動(dòng)的因素。結(jié)合上人臉識(shí)別部分的代碼,整個(gè)項(xiàng)目就算是完成了。

正常來(lái)說(shuō)人臉識(shí)別會(huì)對(duì)算力有比較高的要求,它的算法機(jī)制是針對(duì)相鄰像素做重復(fù)計(jì)算從而增加識(shí)別精度,我們使用的mechArm 270-Pi它的主控是以樹(shù)莓派4B 為處理器,來(lái)進(jìn)行人臉識(shí)別的算力處理。

樹(shù)莓派的算力是400MHZ。我們用的樹(shù)莓派算力不足所以簡(jiǎn)化了這個(gè)過(guò)程,把識(shí)別機(jī)制改成了只算幾次的模糊識(shí)別,在我們應(yīng)用的時(shí)候就需要背景簡(jiǎn)單一些。

總結(jié)

這個(gè)人臉識(shí)別和機(jī)械臂跟蹤項(xiàng)目到目前就算是做完了。

總結(jié)項(xiàng)目一些關(guān)鍵信息:

1 在對(duì)于低算力的情況下,設(shè)定簡(jiǎn)單的使用場(chǎng)景,實(shí)現(xiàn)流暢的效果

2 將復(fù)雜的手眼標(biāo)定算法換成選擇相對(duì)位置移動(dòng),使用采樣運(yùn)動(dòng)機(jī)制,確保每一控制周期能完整的獲得人臉的偏移并跟蹤

3 在python中添加了逆運(yùn)動(dòng)學(xué)部分,針對(duì)應(yīng)用場(chǎng)景計(jì)算了特定姿態(tài)下的機(jī)械臂逆解,將坐標(biāo)運(yùn)動(dòng)轉(zhuǎn)化成了角度運(yùn)動(dòng),避免了奇異點(diǎn)等影響笛卡爾空間運(yùn)動(dòng)。

項(xiàng)目一些不足的地方:

在使用的場(chǎng)景有一定的要求,需要干凈的背景才能運(yùn)行成功。(通過(guò)固定的場(chǎng)景,簡(jiǎn)化了很多參數(shù))

前面也有提到,樹(shù)莓派的算力是不足的,更換其他控制主板的,運(yùn)行起來(lái)會(huì)更加流暢,例如用jetsonnano (600MHZ),高性能圖像處理的電腦

另外就是運(yùn)動(dòng)控制模塊,因?yàn)闆](méi)有做手眼標(biāo)定所以只能用相對(duì)位移,控制分為“采樣階段”“移動(dòng)階段”,目前盡量要求采樣的時(shí)候鏡頭是靜止的,但實(shí)際上比較難保證鏡頭靜止,就會(huì)出現(xiàn)在采樣的時(shí)候鏡頭同時(shí)還在運(yùn)動(dòng),導(dǎo)致讀到的坐標(biāo)會(huì)有偏差。

最后,在這里特別感謝大象機(jī)器人在項(xiàng)目的開(kāi)發(fā)時(shí)提供的幫助,能夠讓項(xiàng)目完成。這次使用的mechArm是一款中心對(duì)稱結(jié)構(gòu)的機(jī)械臂,在關(guān)節(jié)運(yùn)動(dòng)上有所限制,如果將程序運(yùn)用在活動(dòng)范圍更加靈活的mycobot上可能是不一樣情況。

如果你對(duì)項(xiàng)目有啥想要了解更多的地方請(qǐng)?jiān)谙路浇o我留言。

審核編輯黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    212

    文章

    29421

    瀏覽量

    211318
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4823

    瀏覽量

    86079
  • 機(jī)械臂
    +關(guān)注

    關(guān)注

    13

    文章

    542

    瀏覽量

    25203
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    通過(guò)檢測(cè)手臂運(yùn)動(dòng)來(lái)控制機(jī)械

    /id_XNTkxNjgwMDg=.html這里有一個(gè)我搜到的 做得挺好的,但是我不知道怎么實(shí)現(xiàn)。首先要求是用PIC單片機(jī)來(lái)做檢測(cè)手臂運(yùn)動(dòng)來(lái)控制機(jī)械。就是手臂
    發(fā)表于 12-23 11:48

    基于LabVIEW和SolidWorks改進(jìn)機(jī)械的設(shè)計(jì)流程

    和移動(dòng)殘骸、檢查車輛車盤(pán)和完成大部分現(xiàn)在使用的機(jī)器人所無(wú)法完成的其他任務(wù)。這就是約束區(qū)域機(jī)器人手臂(CARMA)開(kāi)發(fā)。 CARMA機(jī)械成品  將這個(gè)項(xiàng)目作為提高設(shè)計(jì)流程效率并大幅擴(kuò)展
    發(fā)表于 02-12 15:56

    基于LabVIEW的四自由度機(jī)械運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)

    實(shí)行位置伺服和編碼器反饋,對(duì)直流電機(jī)利用線性電位器反饋電壓的方式實(shí)現(xiàn)了角度的反饋控制。借助LabVIEW8.2 的強(qiáng)大功能,我們得以在短時(shí)間內(nèi)完成控制系統(tǒng)的開(kāi)發(fā),同時(shí)保證了機(jī)械
    發(fā)表于 02-12 16:10

    采用LabVIEW實(shí)現(xiàn)四自由度機(jī)械運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)

    LabVIEW8.2的強(qiáng)大功能,我們得以在短時(shí)間內(nèi)完成控制系統(tǒng)的開(kāi)發(fā),同時(shí)保證了機(jī)械運(yùn)動(dòng)精度與負(fù)載能力。四自由度
    發(fā)表于 05-06 09:26

    STM32與樹(shù)莓派交互控制機(jī)械

    (并不)常見(jiàn)的五自由度機(jī)械。盡管商家稱它為六自由度。這里使用STM32F407VGT6的6路PWM輸出通道來(lái)控制6個(gè)舵機(jī)的運(yùn)動(dòng),樹(shù)莓派(上位機(jī))通過(guò)USB轉(zhuǎn)TTL
    發(fā)表于 07-01 10:24

    基于單片機(jī)的三軸機(jī)械控制怎么實(shí)現(xiàn)

    文章目錄三軸機(jī)械控制原理三軸機(jī)械接線三軸機(jī)械
    發(fā)表于 12-13 07:14

    機(jī)械的相關(guān)資料分享

    [四]機(jī)械手臂的逆運(yùn)動(dòng)學(xué)解正運(yùn)動(dòng)學(xué)分析是已知每個(gè)關(guān)節(jié)的姿態(tài)的前提下,解算出末端執(zhí)行器的姿態(tài)。而逆運(yùn)動(dòng)學(xué)研究的問(wèn)題是,要求控制末端執(zhí)行器到達(dá)某
    發(fā)表于 01-20 06:46

    基于STC8H1K28雙軸機(jī)械驅(qū)動(dòng)模塊設(shè)計(jì)

    、肩關(guān)節(jié)以及上下移動(dòng)關(guān)節(jié)的機(jī)械平臺(tái)可以完成這項(xiàng)設(shè)計(jì)。在基于STC8H1K28雙軸機(jī)械驅(qū)動(dòng)模塊 給出了對(duì)肩關(guān)節(jié)、肘關(guān)節(jié)上的步進(jìn)電機(jī)、角度傳感
    發(fā)表于 02-18 06:01

    機(jī)械控制學(xué)習(xí)

    機(jī)械向前運(yùn)動(dòng)1cm,就是運(yùn)動(dòng)1cm)。這種控制在涉及到接觸作業(yè)時(shí)就會(huì)產(chǎn)生麻煩,因?yàn)楝F(xiàn)實(shí)環(huán)境是充滿各種誤差的,位置上很小的誤差,經(jīng)過(guò)大剛度的
    發(fā)表于 02-23 07:49

    六自由度機(jī)械運(yùn)動(dòng)規(guī)劃

    為了使六自由度機(jī)械完成特定的動(dòng)作, 需要設(shè)計(jì)計(jì)算相應(yīng)的指令序列. 首先計(jì)算了機(jī)械位姿與指尖位置之間的關(guān)系公式, 然后針對(duì)
    發(fā)表于 02-17 16:55 ?193次下載
    六自由度<b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>的<b class='flag-5'>運(yùn)動(dòng)</b>規(guī)劃

    機(jī)械運(yùn)動(dòng)軌跡優(yōu)化方法

    機(jī)械運(yùn)動(dòng)軌跡是指通過(guò)給定的路徑的起點(diǎn)與終點(diǎn),以及機(jī)構(gòu)本身或者機(jī)構(gòu)運(yùn)行所存在的約束條件,求出每個(gè)關(guān)節(jié)的位移S,速度v,加速a的完整過(guò)程。 文中采用笛卡爾空間的網(wǎng)弧插值法使得機(jī)械
    發(fā)表于 11-03 10:26 ?10次下載
    雙<b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b><b class='flag-5'>運(yùn)動(dòng)</b>軌跡優(yōu)化方法

    DSP的機(jī)械預(yù)測(cè)控制

    針對(duì)機(jī)械的實(shí)時(shí)控制問(wèn)題,基于約束預(yù)測(cè)控制,提出了一種機(jī)械實(shí)時(shí)
    發(fā)表于 03-26 09:33 ?1次下載
    DSP的<b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>預(yù)測(cè)<b class='flag-5'>控制</b>

    使用Zio模塊控制機(jī)械(第4部分)

    電子發(fā)燒友網(wǎng)站提供《使用Zio模塊控制機(jī)械(第4部分).zip》資料免費(fèi)下載
    發(fā)表于 12-30 10:15 ?0次下載
    使用Zio<b class='flag-5'>模塊</b><b class='flag-5'>控制</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>(第4部分)

    實(shí)現(xiàn)使用語(yǔ)音控制機(jī)械運(yùn)動(dòng)

    使用語(yǔ)音控制myCobot機(jī)械運(yùn)動(dòng)
    的頭像 發(fā)表于 03-17 18:13 ?1527次閱讀
    實(shí)現(xiàn)使用語(yǔ)音<b class='flag-5'>控制</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b><b class='flag-5'>運(yùn)動(dòng)</b>

    【開(kāi)源獲獎(jiǎng)案例】四軸機(jī)械控制系統(tǒng)

    ——來(lái)自迪文開(kāi)發(fā)者論壇本期為大家推送迪文開(kāi)發(fā)者論壇獲獎(jiǎng)開(kāi)源案例——四軸機(jī)械控制系統(tǒng)。工程師采用T5L智能屏,基于DGUS軟件“旋轉(zhuǎn)指示”控件實(shí)現(xiàn)機(jī)械
    的頭像 發(fā)表于 12-23 08:13 ?1664次閱讀
    【開(kāi)源獲獎(jiǎng)案例】四軸<b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b><b class='flag-5'>控制</b>系統(tǒng)