引言
在過去的幾年里,機(jī)械臂技術(shù)經(jīng)歷了前所未有的發(fā)展,其應(yīng)用領(lǐng)域從傳統(tǒng)的制造業(yè)擴(kuò)展到了醫(yī)療、服務(wù)、物流等多個(gè)新興行業(yè)。這種跨界擴(kuò)展得益于科技的飛速進(jìn)步,尤其是在傳感器、控制系統(tǒng)和人工智能領(lǐng)域的突破。特別是去年,人工智能技術(shù)的熱潮為機(jī)械臂的智能化升級(jí)提供了更多的可能性,從而極大地拓寬了其應(yīng)用場(chǎng)景和提高了作業(yè)效率與智能水平。
隨著這些技術(shù)的融合與創(chuàng)新,我們見證了許多令人印象深刻的應(yīng)用案例,它們不僅展示了機(jī)械臂技術(shù)的先進(jìn)性,還反映了未來發(fā)展的趨勢(shì)。本文將分享去年我們平臺(tái)上發(fā)布的五個(gè)精選案例,這些案例涉及到了機(jī)械臂與深度相機(jī)、人臉跟蹤等技術(shù)的結(jié)合應(yīng)用。
案例1:ChatGPT for Robotics: Design Principles and Model Abilities
背景介紹
自2022年ChatGPT發(fā)布以來,它一直備受全世界人的關(guān)注,一個(gè)強(qiáng)大的人工智能聊天機(jī)器人。隨著各界的研發(fā)人員不斷的對(duì)ChatGPT進(jìn)一步的研究和探索,衍生出來了很多富有創(chuàng)意的功能。其中就包括Microsft-Autonomous Systems and Robotics Group將ChatGPT的能力擴(kuò)展到機(jī)器人領(lǐng)域,用語言直觀的控制機(jī)械臂,無人機(jī),家庭機(jī)器人等等。
https://youtu.be/NYd0QcZcS6Q
你可能會(huì)覺得我現(xiàn)在也可以做到跟一個(gè)機(jī)器人說讓他去做一些操作指令,他也會(huì)完成那個(gè)指令,這能有什么區(qū)別。其實(shí)不然,這里頭有這你無法想象的一個(gè)強(qiáng)大的功能。以前那些功能個(gè)的實(shí)現(xiàn)都是依賴于寫代碼來控制機(jī)器人。
例如:我想要機(jī)械臂聽到命令之后往前走,就必須得提前編程接收到命令 往前走的代碼,之后觸發(fā)這個(gè)功能。
這個(gè)團(tuán)隊(duì)探索改變這個(gè)現(xiàn)狀,用OpenAI的AI語言模型ChatGPT使自然的人機(jī)交互成為可能。不再需要大量的代碼提前編寫好一些固定的程序,只需要簡(jiǎn)單的跟ChatGPT進(jìn)行對(duì)話,就可以實(shí)現(xiàn)某種功能,希望能夠幫助人們更加輕松的與機(jī)器人進(jìn)行交互,不需要學(xué)習(xí)復(fù)雜的編程語言或者有關(guān)機(jī)器人的詳細(xì)信息。
例如:預(yù)想的是,我們提前編程好相對(duì)應(yīng)的 APIs功能,告訴ChatGPT這個(gè)功能是做什么的,然后通過跟 ChatGPT進(jìn)行對(duì)話,ChatGPT根據(jù)對(duì)話的需求以及對(duì)應(yīng)的API的 功能,自行的調(diào)用API控制機(jī)械臂。
技術(shù)實(shí)現(xiàn)
文中舉了一個(gè)例子,用myCobot 280M5用木塊構(gòu)建Microsoft的logo。
Step 1:
首先定義一組控制機(jī)械臂的API或函數(shù)庫,這里用到的是pymycobot,專門控制myCobot的一個(gè)功能庫。直接使用就可以了,需要稍加注釋一下API的功能。
pymycobot:https://github.com/elephantrobotics/pymycobot
里面有詳細(xì)的介紹API
Step 2:
緊接著我們得給ChatGPT編寫一個(gè)文本提示,描述任務(wù)目標(biāo),明確pymycobot庫里面的功能哪些可以用 ,以及怎么使用。
User:
Imagine we are working with a manipulator robot. This is a robotic arm with 6 degrees of freedom that has a suction pump attached to its end effector. I would like you to assist me in sending commands to this robot given a scene and a task.
At any point, you have access to the following functions:
grab(): Turn on the suction pump to grab an object
release(): Turns off the suction pump to release an object
get_position(object): Given a string of an object name, returns the coordinates and orientation of the vacuum pump to touch the top of the object [X, Y, Z, Yaw, Pitch, Roll]
move_to(position): It moves the suction pump to a given position [X, Y, Z, Yaw, Pitch, Roll].
You are allowed to create new functions using these, but you are not allowed to use any other hypothetical functions.
Keep the solutions simple and clear. The positions are given in mm and the angles in degrees. You can also ask clarification questions using the tag "Question - ". Here is an example scenario that illustrates how you can ask clarification questions.
Let's assume a scene contains two spheres.pick up the sphere.
Step 3:
通過不斷的溝通Chat,最終實(shí)現(xiàn)我們想要的效果,讓ChatGPT生成相對(duì)應(yīng)的變成代碼
User:
Awesome! I want now to use the blocks to build the logo from Microsoft on top of the white pad. It consists of four colors forming a square, blue on the bottom left, yellow on the bottom right, red on the top left and green on the top right.
ChatGPT:
Sure! Here's the Python code to build the Microsoft logo on top of the white pad using the blocks:
# get the positions of the blocks and the white pad
white_pad_pos = get_position("white pad")
blue_pos = get_position("blue block")
yellow_pos = get_position("yellow block")
red_pos = get_position("red block")
green_pos = get_position("green block")
# pick up the blue block
pick_up_object("blue block")
# calculate the position to place the blue block
place_pos = [white_pad_pos[0]-20, white_pad_pos[1]-20, white_pad_pos[2]+40, 0, 0, 0]
# place the blue block on the white pad
place_object(place_pos)
# pick up the yellow block
pick_up_object("yellow block")
# calculate the position to place the yellow block
place_pos = [white_pad_pos[0]+20, white_pad_pos[1]-20, white_pad_pos[2]+40, 0, 0, 0]
# place the yellow block on the white pad
place_object(place_pos)
# pick up the red block
pick_up_object("red block")
# calculate the position to place the red block
place_pos = [white_pad_pos[0]-20, white_pad_pos[1]+20, white_pad_pos[2]+40, 0, 0, 0]
# place the red block on the white pad
place_object(place_pos)
# pick up the green block
pick_up_object("green block")
# calculate the position to place the green block
place_pos = [white_pad_pos[0]+20, white_pad_pos[1]+20, white_pad_pos[2]+40, 0, 0, 0]
# place the green block on the white pad
place_object(place_pos)
案例2:人臉跟蹤技術(shù)在機(jī)械臂中的應(yīng)用
背景介紹:
這個(gè)案例 備受大家喜歡,因?yàn)樽髡弑旧硪彩且幻麆傞_始接觸機(jī)械臂的愛好者,想要做機(jī)械臂的人臉識(shí)別跟蹤 ,一共分為了上下兩篇,上篇講的是使用OpenCV算法提供的人臉識(shí)別以及講述了項(xiàng)目的框架,需要什么來實(shí)現(xiàn)。下篇介紹的是機(jī)械臂運(yùn)動(dòng)控制的算法。
技術(shù)實(shí)現(xiàn):全程使用的是以樹莓派為主板的mechArm 270 ,6自由度的機(jī)械臂 。
想要實(shí)現(xiàn)人臉識(shí)別功能以及機(jī)械臂跟蹤,那么機(jī)器視覺是少不了的,目前市面上最熱門的識(shí)別算法是OpenCV的算法,里面的技術(shù)相對(duì)比較成熟,可以直接使用。
人臉識(shí)別一般由兩個(gè)部分組成,人臉檢測(cè)和人臉識(shí)別,在人臉檢測(cè)中,主要任務(wù)是構(gòu)造能夠區(qū)分包含人臉的實(shí)例和不包含人臉的實(shí)例的分類器。OpenCV 中提供了三個(gè)經(jīng)過訓(xùn)練的級(jí)聯(lián)分類器。顧名思義,級(jí)聯(lián)分類器逐步篩選不同的特征,以得出其所屬的分類。分類器的link:http ://face-rec.org/databases/
調(diào)用分類器和opencv算法就可以獲取到視頻流對(duì)人臉進(jìn)行檢測(cè)
import cv2
import matplotlib.pyplot as plt
import time
def video_info():
# Loading classifiers
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Input video stream
cap = cv2.VideoCapture(0)
# To use a video file as input
#cap = cv2.VideoCapture('demo.mp4')
while True:
_, img = cap.read()
# Conversion to greyscale
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:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
center_x = (x+w-x)//2+x
center_y = (y+h-y)//2+y
cv2.circle(img,(center_x,center_y),10,(0,255,255),2)
# Display effects
cv2.imshow('img', img)
k = cv2.waitKey(30) & 0xff
if k==27:
break
cap.release()
設(shè)定機(jī)械臂末端來獲取視頻信息,就需要固定好位置,因?yàn)樵谶@里涉及到一個(gè)機(jī)械臂的知識(shí)-手眼標(biāo)定。手眼標(biāo)定可以讓機(jī)械臂知道相機(jī)拍攝的物體相對(duì)于機(jī)械臂的位置,或者說,建立相機(jī)坐標(biāo)系和機(jī)械臂坐標(biāo)系之間的映射。
換句話也就是說 ,獲得相機(jī)的畫面下的 人臉的參數(shù),相對(duì)于機(jī)械臂的位置是怎樣的,這個(gè)是相當(dāng)重要的為了能夠準(zhǔn)確并且實(shí)時(shí)的撲捉到人臉相對(duì)應(yīng)的坐標(biāo)。
經(jīng)過實(shí)踐之后,發(fā)現(xiàn)raspberry pi 4b的算力有所欠缺,如果用手眼標(biāo)定來做的話看起來效果并不好,而且會(huì)有許多未知參數(shù)。所以作者決定使用相對(duì)位移來進(jìn)行運(yùn)動(dòng)控制。這樣的話就需要設(shè)計(jì)一種采樣運(yùn)動(dòng)機(jī)制,保證在一個(gè)周期內(nèi)完全獲取人臉的偏移量并且實(shí)現(xiàn)跟蹤,我們一起來看看效果如何。
https://youtu.be/dNdqrkggr9c
如果你感興趣可以了解更多 :Facial Recognition and Tracking Project with mechArm - Hackster.io
案例3:Operate myCobot with the spatial recognition of D455
背景介紹:
為了滿足更多的場(chǎng)景需求,現(xiàn)在深度相機(jī)被使用的十分的廣泛,就例如下面這個(gè)用戶做的案例。使用到的是realsense D455,這是一款微軟的深度相機(jī),能夠獲取某個(gè)物體的多個(gè)參數(shù)。該項(xiàng)目是用深度相機(jī)結(jié)合機(jī)械臂做一個(gè)空間上的物體跟蹤。
技術(shù)實(shí)現(xiàn):
可以看到場(chǎng)景里面,在左上角有一個(gè)攝像頭,獲取紅色物體的坐標(biāo),然后返回給機(jī)械臂,機(jī)械臂再去進(jìn)行移動(dòng)。
這個(gè)案例跟上一個(gè)案例有點(diǎn)相似,也不大一樣,相似的點(diǎn)在于都是機(jī)械臂視覺的應(yīng)用,不太相似的點(diǎn)在于這個(gè)案例用的是深度相機(jī),通過相機(jī)內(nèi)置的算法能夠獲取到木塊的參數(shù),可以比較方便的進(jìn)行手眼標(biāo)定。里面也介紹了realsense的運(yùn)動(dòng)模塊的信息,里面的設(shè)置可以為0.01m,甚至設(shè)置到0.001m左右,可以獲取到十分精細(xì)的參數(shù)。
最后整個(gè)項(xiàng)目是在ROS當(dāng)中完成的,將Realsense d455和 myCobot鏈接到一起。
這篇文章能夠很好的幫助了購買了機(jī)械臂或深度相機(jī)但不知道如何使用它的人。
案例4:
Automating Fruit Harvesting and Sorting
背景介紹:這一篇技術(shù)案例就比較偏向一個(gè)模擬場(chǎng)景的建設(shè)了,它里面有多臺(tái)mechArm 270協(xié)同合作,一臺(tái)傳送帶,多個(gè)攝像模組。主要是模擬一個(gè)果實(shí)的采摘然后進(jìn)行分類。
技術(shù)亮點(diǎn):
可以看到整個(gè)場(chǎng)景的流程,這個(gè)案例主要關(guān)注幾個(gè)技術(shù)點(diǎn):
1.機(jī)器視覺的識(shí)別,目標(biāo)果實(shí)坐標(biāo)的獲取。
2.機(jī)械臂之間協(xié)同關(guān)系,和傳送帶邏輯的關(guān)系。
從案例1到案例4只要是要做一些場(chǎng)景應(yīng)用的話都會(huì)要用到機(jī)器視覺,就少不了攝像頭,要想做一個(gè)好項(xiàng)目機(jī)器視覺的知識(shí)是必不可少的。讓我們來一起看看如何處理這里的視覺。
案例當(dāng)中是用到的是深度攝像頭,相比2D攝像頭就少去了一些標(biāo)志物,我們可以依賴深度相機(jī)的參數(shù)來直接做手眼標(biāo)定,這里我們的“眼”是固定的,稱為眼在手外,目標(biāo)找到一個(gè)變換矩陣,該矩陣被描述了攝像頭坐標(biāo)系相對(duì)于機(jī)器人基座坐標(biāo)系的位置和方向。
識(shí)別物體做的是OpenCV的顏色識(shí)別,通過顏色來區(qū)別果實(shí)的情況。
Detection and identification class
"""
HSV_DIST = {
"redA": (np.array([0, 120, 50]), np.array([3, 255, 255])),
"redB": (np.array([118, 120, 50]), np.array([179, 255, 255])),
"orange": (np.array([8, 150, 150]), np.array([20, 255, 255])),
"yellow": (np.array([28, 100, 150]), np.array([35, 255, 255])),
}
先定義好可能會(huì)出現(xiàn)的結(jié)果,就可以精準(zhǔn)的識(shí)別,得到目標(biāo)果實(shí)的坐標(biāo)了。
機(jī)械臂抓取果實(shí)的路徑主要考慮幾個(gè)方面:
初始姿勢(shì)
抓握的姿勢(shì)
避障的姿勢(shì)
基本上考慮這幾個(gè)方面,達(dá)到不會(huì)影響抓取目標(biāo),碰到場(chǎng)景中其他的物件。
接下來較為關(guān)鍵的是處理,兩臺(tái)機(jī)械臂和傳送帶之間的邏輯關(guān)系,分配好角色哪個(gè)機(jī)械臂先動(dòng),哪個(gè)機(jī)械臂動(dòng),保證整個(gè)流程下來是順暢的,不會(huì)導(dǎo)致程序的死鎖。
這個(gè)場(chǎng)景應(yīng)用,涉及到了多方面的功能,可以幫助初學(xué)者怎么將機(jī)械臂運(yùn)用起來,怎么搭建一個(gè)場(chǎng)景。也能幫助掌握機(jī)械臂運(yùn)動(dòng)控制,視覺識(shí)別,物體抓取技術(shù)等等相關(guān)知識(shí),如果你有興趣了解的話點(diǎn)擊查看。
總結(jié)
在2023年,機(jī)械臂技術(shù)的飛速發(fā)展引起了廣泛關(guān)注,幾個(gè)備受矚目的案例展示了其在創(chuàng)新與應(yīng)用方面的巨大可能性。我們歡迎所有有興趣探索這一領(lǐng)域、愿意分享新奇想法的朋友與我們交流。讓我們共同見證并體驗(yàn)科技如何塑造未來世界的奇跡!
審核編輯:湯梓紅
-
人工智能
+關(guān)注
關(guān)注
1791文章
47183瀏覽量
238241 -
開源
+關(guān)注
關(guān)注
3文章
3309瀏覽量
42471 -
機(jī)械臂
+關(guān)注
關(guān)注
12文章
513瀏覽量
24553
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論