介紹
今天,我將向大家展示一個(gè)我獨(dú)立設(shè)計(jì)并實(shí)現(xiàn)的機(jī)械臂模型。這個(gè)模型的核心功能是實(shí)現(xiàn)實(shí)時(shí)的手勢(shì)追蹤——只需用手輕輕拖拽,機(jī)械臂就能立即跟隨你的動(dòng)作進(jìn)行移動(dòng)。
我之所以想要?jiǎng)?chuàng)造這樣一個(gè)模型,是因?yàn)樵谝恍┪kU(xiǎn)環(huán)境中,我們可以用機(jī)械臂來(lái)代替人工進(jìn)行作業(yè),從而避免人員的生命安全受到威脅。
你可能會(huì)問(wèn),為什么不直接使用遠(yuǎn)程的鍵盤(pán)控制、手柄控制或者APP控制,而要選擇手動(dòng)拖拽的方式呢?我覺(jué)得只有手動(dòng)操作,才能最大程度上滿足我們對(duì)動(dòng)作精準(zhǔn)度的需求。因此,我決定開(kāi)始嘗試制作這個(gè)模型,并初步完成了整個(gè)demo。
我希望,通過(guò)這個(gè)demo,我能向大家展示出機(jī)械臂的無(wú)限可能性,同時(shí)也希望能激發(fā)出大家對(duì)未來(lái)科技的無(wú)限憧憬。
機(jī)械臂設(shè)備
mechArm 270 M5
mechArm 270 是一款六自由度的機(jī)械臂,它精巧的結(jié)構(gòu)設(shè)計(jì),能夠放入一個(gè)書(shū)包里,攜帶和方便。較為重要的一點(diǎn)是開(kāi)放了很多控制的API,用python能夠快速開(kāi)始對(duì)機(jī)械臂的控制。沒(méi)有很復(fù)雜的操作,甚至還有圖形編程,這對(duì)一些不是很懂代碼的人也能夠快速上手控制機(jī)械臂。
mechArm是一款桌面型的仿工業(yè)結(jié)構(gòu)的機(jī)械臂,工作最大半徑在270mm,負(fù)載250g,重復(fù)定位精度控制在±0.5mm。
Project
介紹完基礎(chǔ)的設(shè)備,我們就開(kāi)始介紹我時(shí)如何制作這個(gè)demo過(guò)程的記錄。
使用的環(huán)境
操作系統(tǒng):windows11
編程語(yǔ)言:python3.9+
python lib:pymycobot,time
pymycobot是大象機(jī)器人的一個(gè)開(kāi)源庫(kù),專門(mén)用來(lái)控制大象機(jī)器人的機(jī)械臂。一段簡(jiǎn)單的控制代碼例子。
Code:
#Main methods used
#Create objects to communicate with the robotic arm.
MyCobot(serial,baud)
# angles control robot,
send_angles([list_angles],speed)
# coords control robot
send_coords([list_coords],speed,mode)
Example:
import time
from pymycobot.mycobot import MyCobot
# create a object
mc = MyCobot("com7",115200)
# angles control
mc.send_angles([0,0,0,0,0,0],100)
time.sleep(1)
mc.send_angles([90,90,90,90,90,90],100)
time.sleep(1)
簡(jiǎn)單介紹了下如何使用python來(lái)控制mechArm,是不是很容易呢。
分析問(wèn)題
開(kāi)始項(xiàng)目之前要搭建框架,了解我們具體需要解決什么問(wèn)題才能夠?qū)崿F(xiàn)。對(duì)此我做了一個(gè)項(xiàng)目的流程圖。下面我將手動(dòng)施教的機(jī)械臂簡(jiǎn)稱為R1,跟隨運(yùn)動(dòng)的機(jī)械臂簡(jiǎn)稱為R2。
Control robotic arm:上邊已經(jīng)提到了如何控制機(jī)械臂,使用pymycobot庫(kù)提供的方法就可以實(shí)現(xiàn)了。
Motion Control methods:R1機(jī)械臂可以用手拖動(dòng),時(shí)時(shí)刻刻返回當(dāng)前機(jī)械臂的角度信息,R2機(jī)械臂接收R1的機(jī)械臂角度信息進(jìn)行控制。
Communication between robotic arms:整個(gè)項(xiàng)目中這一步驟是比較重要的一步。建立好之后,機(jī)械臂能夠發(fā)送信息就能夠很輕易的實(shí)現(xiàn)了。
接下來(lái)主要講解Motion Control methods和communication between robotic arms。
Motion Control methods
獲取實(shí)時(shí)角度信息
pymycobot提供了”get_angles()"方法可以過(guò)去當(dāng)前機(jī)械臂的角度信息。
# Can obtain the current angle information of the robotic arm in real time
get_angles()
# example
print("real-time angles:",mc.get_anlges())
result: real-time angles:[0,0,0,0,0,0]
# Continuously obtain the current angle
while True:
angels = mc.get_angles()
print(angles)
time.sleep(0.1) #Go to the next step every 0.1s
機(jī)械臂的刷新模式設(shè)置
機(jī)械臂的刷新模式:主要分為兩種插補(bǔ)模式和非插補(bǔ)模式,是指在運(yùn)動(dòng)軌跡規(guī)劃中,控制機(jī)械臂末端執(zhí)行器的移動(dòng)方式。如果沒(méi)有設(shè)置任何模式,機(jī)械臂可能無(wú)法正確執(zhí)行預(yù)期的運(yùn)動(dòng),并且可能導(dǎo)致以下后果:
運(yùn)動(dòng)不平滑
運(yùn)動(dòng)不準(zhǔn)確
運(yùn)動(dòng)不連續(xù)
插補(bǔ)模式:插補(bǔ)模式可以實(shí)現(xiàn)平滑連續(xù)的軌跡規(guī)劃,確保機(jī)械臂末端執(zhí)行器的位置和姿態(tài)在運(yùn)動(dòng)過(guò)程中平滑過(guò)渡。
非插補(bǔ)模式:非插補(bǔ)模式是指機(jī)械臂在運(yùn)動(dòng)過(guò)程中只關(guān)注特定的目標(biāo)點(diǎn),而不進(jìn)行插值計(jì)算。在非插補(bǔ)模式下,機(jī)械臂的位置和姿態(tài)會(huì)在關(guān)鍵點(diǎn)之間直接跳躍,而不會(huì)經(jīng)過(guò)平滑的過(guò)渡。
在進(jìn)行多個(gè)機(jī)械臂同時(shí)使用插補(bǔ)模式進(jìn)行運(yùn)動(dòng)時(shí),可能會(huì)出現(xiàn)等待或排隊(duì)的情況,所以我們選擇使用非插補(bǔ)模式。
#Set refresh mode
set_fresh_mode(1/0)
1:no interpolation
0:interpolation
mc.set_fresh_mode(1)
我們將前面的整合在一起的代碼如下
Code:
import time
from pymycobot.mycobot import MyCobot
mc = MyCobot("COM7", 115200) #release arm
mb = MyCobot("COM11", 115200) #move arm
mb.set_fresh_mode(1) #no interpolation
time.sleep(1)
mc.release_all_servos() #release robot
time.sleep(1)
speed = 100
while True:
angles = mc.get_angles() #get release arm angles
mb.send_angles(angles, speed) #send angles to move arm
time.sleep(0.1)
Communication between robotic arms:
我們的方案是兩臺(tái)機(jī)械臂接入同一個(gè)PC,用串口連接的方式.
# build connection
from pymycobot.mycobot import MyCobot
mc = MyCobot("COM7", 115200)
mb = MyCobot("COM11", 115200)
用最基礎(chǔ)的usb數(shù)據(jù)線進(jìn)行連接,我們電腦上就有兩個(gè)機(jī)械臂的串口號(hào),可以對(duì)他們分別發(fā)送指令任務(wù)。
讓我們一起來(lái)看看效果如何
總結(jié)
根據(jù)內(nèi)容可以看出來(lái)雖然說(shuō)是能夠做到百分之七八十的同步。也會(huì)因?yàn)橐恍┢渌囊蛩厮绊?,造成了不小的延遲。造成延遲的原因可能有幾個(gè)方面,比如說(shuō)數(shù)據(jù)處理和傳輸?shù)乃俣龋瑱C(jī)械臂的反應(yīng)速度,軟件的優(yōu)化,硬件的性能等等,這些都是可能 產(chǎn)生延遲的因素。
除此之外,還有一個(gè)很大的局限性就是,它們的通信通過(guò)串口進(jìn)行連接的,如果距離稍微遠(yuǎn)一點(diǎn)的話就沒(méi)辦法在用這種方法去使用,實(shí)用性不強(qiáng),后期我會(huì)嘗試使用藍(lán)牙,WiFi等無(wú)限連接的方式來(lái)嘗試控制。
本次記錄就更新到這里,如果你有更好的想法,無(wú)論是優(yōu)化的功能或者說(shuō)是其他的建議歡迎在下方留言。
審核編輯 黃宇
-
AI
+關(guān)注
關(guān)注
87文章
30137瀏覽量
268411 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3249瀏覽量
42402 -
機(jī)械臂
+關(guān)注
關(guān)注
12文章
509瀏覽量
24493
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論