引言
今天我們將展示一個(gè)高度自動(dòng)化的模擬場(chǎng)景,展示多個(gè)機(jī)械臂與傳送帶協(xié)同工作的高效分揀系統(tǒng)。在這個(gè)場(chǎng)景中,機(jī)械臂通過(guò)視覺(jué)識(shí)別技術(shù)對(duì)物體進(jìn)行分類,并通過(guò)精確的機(jī)械操作將它們放置在指定的位置。這一系統(tǒng)不僅提高了分揀的速度和準(zhǔn)確性,還展示了現(xiàn)代自動(dòng)化技術(shù)在工業(yè)領(lǐng)域的巨大潛力。無(wú)論是處理大量的日常物品,還是在復(fù)雜的工業(yè)流程中應(yīng)用,這種自動(dòng)化分揀解決方案都體現(xiàn)出了極高的靈活性和效率。
場(chǎng)景描述
在這個(gè)高度自動(dòng)化的分揀場(chǎng)景中,主要設(shè)備包括兩個(gè)機(jī)械臂和一條800mm的傳送帶。右側(cè)的上料機(jī)器人負(fù)責(zé)識(shí)別和抓取標(biāo)記物,并將它們放置到傳送帶上。傳送帶將標(biāo)記物運(yùn)輸?shù)阶髠?cè)的下料機(jī)器人工作范圍內(nèi)。下料機(jī)器人則根據(jù)分類要求識(shí)別標(biāo)記物,并將它們有序地放置在指定區(qū)域。
放個(gè)視頻gif
接下來(lái)我們簡(jiǎn)要介紹產(chǎn)品的相關(guān)參數(shù)
產(chǎn)品
列表中是幾個(gè)主要的產(chǎn)品。
UltraArm P340
ultraArm 是4自由度的機(jī)械臂,全身采用經(jīng)典金屬設(shè)計(jì)結(jié)構(gòu),本體占用體積只有A4紙張的一半,搭載高性能的步進(jìn)電機(jī),能夠?qū)崿F(xiàn)±0.1mm重復(fù)定位精度和高穩(wěn)定性。
高性能的步進(jìn)電機(jī)能夠進(jìn)行7*24的工作時(shí)長(zhǎng),且保持性能良好,也是比較適合高度自動(dòng)化這一場(chǎng)景的選擇。
Conveyor belt
這個(gè)也是步進(jìn)電機(jī)來(lái)進(jìn)行驅(qū)動(dòng)的傳送帶,需要用到Arduino mega 2560開(kāi)發(fā)板來(lái)作為控制器,給物體提供運(yùn)輸?shù)囊粋€(gè)設(shè)備。
USB Camera 2D
攝像頭作為機(jī)器視覺(jué)必不可少的一部分,是獲取標(biāo)記物的重要設(shè)備,usb 攝像頭,能夠提供畫面,通過(guò)各種機(jī)器視覺(jué)的算法來(lái)確定標(biāo)記物的具體位置,坐標(biāo)來(lái)反饋給機(jī)械臂去執(zhí)行抓取。
工作原理
整個(gè)項(xiàng)目的被分為以下幾個(gè)功能模塊,以實(shí)現(xiàn)整個(gè)自動(dòng)化分揀場(chǎng)景。
我們具體看看各個(gè)功能模塊的功能是如何在代碼當(dāng)中實(shí)現(xiàn)的。
Visual recognition module
本次項(xiàng)目用的標(biāo)記物是Aruco碼,是一種廣泛使用的二進(jìn)制方形標(biāo)記,主要用于增強(qiáng)現(xiàn)實(shí)和機(jī)器人導(dǎo)航等場(chǎng)景中,Aruco碼的設(shè)計(jì)使得它們?cè)趫D像中易于檢測(cè)和識(shí)別,有以下幾個(gè)特點(diǎn)。
1易于檢測(cè)和識(shí)別:Aruco碼的設(shè)計(jì)使得它們?cè)趫D像中易于檢測(cè)和識(shí)別
2 唯一性和抗誤識(shí)別:每個(gè)Aruco碼都有一個(gè)唯一的ID,具有一定的糾錯(cuò)能力
3姿態(tài)估計(jì):Aruco碼不僅可以用于識(shí)別和定位,還可以用于估計(jì)相機(jī)相對(duì)于標(biāo)記的姿態(tài)(位置和方向)。
4開(kāi)源和易于使用:OpenCV庫(kù)提供了對(duì)Aruco碼的完整支持,包括生成、檢測(cè)和解碼。
5靈活性和多樣性:Aruco碼可以生成各種尺寸和復(fù)雜度的碼,以適應(yīng)不同的應(yīng)用需求。
6低成本:生成和使用Aruco碼的成本非常低。它們可以簡(jiǎn)單地打印在紙上,或者制作在物體表面,不需要昂貴的硬件設(shè)備。
#導(dǎo)入庫(kù) import cv2.aruco as aruco #加載字典 aruco_dict = aruco.Dictionary_get(aruco.DICT_6X6_250) parameters = aruco.DetectorParameters_create() #灰度處理并且識(shí)別 gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) corners, ids, rejectImaPoint = cv.aruco.detectMarkers( gray, self.aruco_dict, parameters=self.aruco_params ) #檢測(cè)Aruco碼 if len(corners) > 0: if ids is not None: id = int(ids[0][0])
姿態(tài)估計(jì),確定Aruco碼的姿態(tài)位置,對(duì)于抓取是非常重要的,為控制算法提供反饋,調(diào)整機(jī)器人的動(dòng)作。姿態(tài)估計(jì)后再進(jìn)行數(shù)據(jù)的轉(zhuǎn)換和補(bǔ)償,計(jì)算和調(diào)整角度最終反饋位置和姿態(tài)角度。
#姿態(tài)估計(jì) ret = cv.aruco.estimatePoseSingleMarkers( corners, 0.022, self.camera_matrix, self.dist_coeffs ) (rvec, tvec) = (ret[0], ret[1]) #位置計(jì)算 xyz = tvec[0, 0, :] xyz = [round(xyz[0]*1000 + self.pump_x, 2), round(xyz[1]*1000 + self.pump_y, 2), round(xyz[2]*1000, 2)] #旋轉(zhuǎn)向量處理 try: rvec = np.reshape(rvec, (3, 1)) except ValueError as e: print("reshape錯(cuò)誤:", e) print("rvec1=", rvec) rvec = np.array([[[-2.86279729, -0.00687534, -0.05316529]]]) print("rvec2=", rvec) #計(jì)算旋轉(zhuǎn)矩陣和歐拉角 rotation_matrix, _ = cv.Rodrigues(rvec) euler_angles = cv.RQDecomp3x3(rotation_matrix)[0] yaw_angle = int(euler_angles[2]) #返回結(jié)果 for i in range(rvec.shape[0]): cv.aruco.drawDetectedMarkers(img, corners, ids) if num < 100: num += 1 elif num == 100: cv.destroyAllWindows() print("final_x:", xyz[0]) print("final_y:", xyz[1]) print("final_yaw_angle=", -yaw_angle) return xyz[0], xyz[1], -yaw_angle, id
在此之前需要進(jìn)行手眼標(biāo)定,標(biāo)定的目前是確定相機(jī)與機(jī)器人末端執(zhí)行器的相對(duì)位置和姿態(tài)關(guān)系。
Robotic arm control module
ultraArm有一個(gè)python的控制庫(kù)pymycobot,安裝好環(huán)境之后即可使用,一下是簡(jiǎn)單控制的使用
from pymycobot.ultraArm import ultraArm #創(chuàng)建實(shí)例,com為機(jī)械臂的串口號(hào) ua = ultraArm(COM) # 角度控制 ua.send_angles([angle_list],speed) # 坐標(biāo)控制mode,控制走直線還是非直線 ua.send_coords([coords_list),speed,mode) #吸泵的使用1-open ;0-close def pub_pump(self, flag): if flag: self.ua.set_gpio_state(0) else: self.ua.set_gpio_state(1) ua.pub_pump(state)
機(jī)械臂的運(yùn)動(dòng)控制很簡(jiǎn)單,只需要簡(jiǎn)單的調(diào)用就好了,但是需要注意的是,在機(jī)械臂運(yùn)動(dòng)的過(guò)程中需要設(shè)計(jì)運(yùn)動(dòng)軌跡,不能撞到一些物體,以及根據(jù)獲取到標(biāo)記嗎的坐標(biāo)后的點(diǎn)位,比如說(shuō)起始點(diǎn)位,待抓取點(diǎn)位等等。
Conveyor control module
傳送帶配備的步進(jìn)電機(jī)通常需要通過(guò)微控制器(Arduino Mega 2560)來(lái)進(jìn)行輸出控制,mega為此提供了足夠的I/O引腳和處理能力,能夠精確控制步進(jìn)電機(jī)的步進(jìn)和方向,從而實(shí)現(xiàn)傳送帶的啟動(dòng)、停止、速度調(diào)節(jié)和方向控制。
#初始化設(shè)置 self.serial = serial.Serial(port, baudrate, timeout=1) #寫入命令 def write_command(self, command): self.serial.write(command.encode()) #設(shè)置傳送帶的方向 def set_direction(self, direction): command = f'DIR {direction}n' self.write_command(command) #設(shè)置速度 def set_speed(self, speed): command = f'SPD {speed}n' self.write_command(command) #啟動(dòng)和停止 def start(self): self.write_command('STARTn') def stop(self): self.write_command('STOPn')
Data processing and communication module
在這個(gè)自動(dòng)化分揀系統(tǒng)項(xiàng)目中,數(shù)據(jù)處理和通信是關(guān)鍵部分,為了讓他們互相知道彼此在干什么,將整體連貫起來(lái),只要有一個(gè)地方出錯(cuò)就會(huì)停止程序。
第一步-上料機(jī)器人的視覺(jué)檢測(cè),如果發(fā)現(xiàn)檢測(cè)的物體不復(fù)合要求(擺滿),將不會(huì)執(zhí)行后續(xù)的程序。
第二步-上下料機(jī)器人協(xié)作好,上料機(jī)器人先進(jìn)行拆碼垛工作,搬運(yùn)到傳送帶上。
第三步-傳送帶將物體運(yùn)輸?shù)较铝蠙C(jī)器人的攝像頭識(shí)別范圍和機(jī)械臂工作半徑內(nèi)。
第四步-下料機(jī)器人將物體的姿態(tài)進(jìn)行識(shí)別,下料機(jī)器人得到反饋的姿態(tài)進(jìn)行調(diào)整后抓去物體放置在指定區(qū)域。第五步-每當(dāng)完成六次物體的抓取后,會(huì)重新再進(jìn)行一次上料機(jī)器人的視覺(jué)檢測(cè),如果在此期間上料機(jī)器人的物體有所變化會(huì)導(dǎo)致抓取失敗。(這是邏輯上的設(shè)定,可自行更改)
while robot2.count18: data=obj.detect() while len(data)6: print("二維碼檢測(cè)數(shù)目不對(duì),請(qǐng)確保二維碼在相機(jī)范圍內(nèi)并且能正確識(shí)別") time.sleep(1) data=obj.detect() for i in range(len(data)): robot.move(data[i][2],data[i][1]) conveyer.open_conveyor(100) time.sleep(5.2) conveyer.close_conveyor() for i in range(3): try: print("i=",i) pose=cam.detect() if pose is not None: break except Exception as e: if i==2: message() temp=obj.exception_handling() robot.Special_handling(temp[0][2],temp[0][1],temp[0][3]) conveyer.open_conveyor(100) time.sleep(5.2) conveyer.close_conveyor() id=robot2.move(pose[0],pose[1],pose[2],pose[3]) robot2.judge(id)
總結(jié)
本項(xiàng)目展示了一個(gè)基于UltraArm P340機(jī)械臂和傳送帶的自動(dòng)化分揀系統(tǒng),主要應(yīng)用于教育場(chǎng)景,旨在教學(xué)和演示自動(dòng)化分揀技術(shù)。系統(tǒng)結(jié)合計(jì)算機(jī)視覺(jué)、步進(jìn)電機(jī)控制、手眼標(biāo)定和機(jī)械臂運(yùn)動(dòng)控制,實(shí)現(xiàn)了高效的自動(dòng)化分揀流程。
如果你覺(jué)得該項(xiàng)目有什么可以改進(jìn)的地方歡迎在下方留下評(píng)論,你的留言和支持是對(duì)我們更新最大的鼓勵(lì)。
審核編輯 黃宇
-
機(jī)器人
+關(guān)注
關(guān)注
213文章
29756瀏覽量
213041 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3695瀏覽量
43852 -
機(jī)械臂
+關(guān)注
關(guān)注
13文章
554瀏覽量
25400 -
大象機(jī)器人
+關(guān)注
關(guān)注
0文章
86瀏覽量
126
發(fā)布評(píng)論請(qǐng)先 登錄
國(guó)產(chǎn)Cortex-A55人工智能教學(xué)實(shí)驗(yàn)箱_基于Python機(jī)械臂跳舞實(shí)驗(yàn)案例分享
大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧開(kāi)源六軸機(jī)械臂產(chǎn)品
如何系統(tǒng)性地學(xué)習(xí)工業(yè)機(jī)器人技術(shù)?
多軸機(jī)器人的發(fā)展趨勢(shì)
一種機(jī)器人光機(jī)電一體化分揀實(shí)訓(xùn)系統(tǒng)
ZN-17A機(jī)器人光機(jī)電一體化分揀實(shí)訓(xùn)系統(tǒng)設(shè)計(jì)
一種ZN-IRF03機(jī)器人RFID分揀實(shí)訓(xùn)系統(tǒng)
機(jī)器人光機(jī)電一體化分揀實(shí)訓(xùn)系統(tǒng)有哪些技術(shù)參數(shù)?
同仁堂顆粒劑車間引入ABB機(jī)器人,實(shí)現(xiàn)自動(dòng)化高效率生產(chǎn)
14張圖帶你看懂自動(dòng)化物流分揀系統(tǒng)運(yùn)行模式
大象機(jī)器人推出桌面高精度機(jī)械臂ultraArm,配五大套裝,助力最燃AI視覺(jué)玩法
大象機(jī)器人ultraArm深入測(cè)評(píng)
自動(dòng)化革命:大象機(jī)器人的Mercury A1機(jī)械臂

大象機(jī)器人推出myCobot 280 RDK X5,攜手地瓜機(jī)器人共建智能教育機(jī)

大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧開(kāi)源六軸機(jī)械臂產(chǎn)品

評(píng)論