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

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

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

大象機器人開源協(xié)作機械臂機械臂接入GPT4o大模型!

大象機器人科技 ? 來源:大象機器人科技 ? 作者:大象機器人科技 ? 2024-07-03 14:09 ? 次閱讀

本文已經(jīng)或者同濟子豪兄作者授權(quán)對文章進行編輯和轉(zhuǎn)載

引言
隨著人工智能機器人技術(shù)的快速發(fā)展,機械臂在工業(yè)、醫(yī)療和服務(wù)業(yè)等領(lǐng)域的應(yīng)用越來越廣泛。通過結(jié)合大模型和多模態(tài)AI,機械臂能夠?qū)崿F(xiàn)更加復(fù)雜和智能化的任務(wù),提升了人機協(xié)作的效率和效果。我們個人平時接觸不太到機械臂這類的機器人產(chǎn)品,但是有一種小型的機械臂我們?nèi)巳硕伎梢該碛兴黰yCobot,價格低廉的一種桌面型機械臂。

案例介紹
本文介紹同濟子豪兄開源的一個名為“vlm_arm”項目,這個項目中將mycobot 機械臂與大模型和多模態(tài)AI結(jié)合,創(chuàng)造了一個具身智能體。該項目展示了如何利用先進的AI技術(shù)提高機械臂的自動化和智能化水平。本文的目的是通過詳細介紹該案例的方法和成功,展示機械臂具身智能體的實際應(yīng)用。

產(chǎn)品介紹
myCobot 280 Pi
myCobot 280 Pi是一款6自由度的桌面型機械臂,主要的控制核心是Raspberry Pi 4B,輔助控制核心是ESP32,同時配備了 Ubuntu Mate 20.04 操作系統(tǒng)和豐富的開發(fā)環(huán)境。這使得 myCobot 280 Pi 在無需外接 PC 的情況下,只需連接顯示器、鍵盤和鼠標即可進行開發(fā)。

wKgaomaE562APdcZAASpzMUpXJQ743.png

這款機械臂重量輕,尺寸小,具有多種軟硬件交互功能,兼容多種設(shè)備接口。它支持多平臺的二次開發(fā),適用于人工智能相關(guān)學(xué)科教育、個人創(chuàng)意開發(fā)、商業(yè)應(yīng)用探索等多種應(yīng)用場景。

Camera Flange 2.0
在案例中使用到的攝像頭,通過usb數(shù)據(jù)線跟raspberry pi鏈接,可以獲取到圖像來進行機器視覺的處理。

wKgaomaE58mAcpNwAACF8QlpSYI247.pngwKgZomaE59yANzX5AADJFD_l-EM891.png

Suction Pump 2.0
吸泵,工作原理通過電磁閥抽空起造成壓強差然后將物體吸起來。通過IO接口鏈接機械臂,用pymycobot 的API進行控制吸泵的開關(guān)。

wKgZomaE5_iAB9DVAACARv4PAu4877.pngwKgaomaE5_-ACILwAADUM7zdtkI722.png

機械臂的末端都是通過LEGO連接件連接起來的,所以它們之間可以很方便的連接起來不需要額外的結(jié)構(gòu)件。

wKgZomaE6AqABnXJAADvQBQ-YlE724.png

技術(shù)介紹
整個的案例將在python環(huán)境中進行編譯,下面講介紹使用到的庫。

pymycobot:

elephant robotics編寫的對myCobot 控制的python庫,可以通過坐標,角度來控制機械臂的運動,也可以控制官方適配的末端執(zhí)行器例如夾爪,吸泵的運動。

Yi-Large:

Yi-large 是由中國人工智能公司 01.AI 開發(fā)的大型語言模型,擁有超過 1000 億參數(shù)。Yi-large 使用了一種叫做“Transformer”的架構(gòu),并對其進行了改進,使其在處理語言和視覺任務(wù)時表現(xiàn)得更好。

Claude 3 Opus:

該模型還展示了強大的多語言處理能力和改進的視覺分析功能,能夠進行圖像的轉(zhuǎn)錄和分析。此外,Claude 3 Opus 被設(shè)計為更具責(zé)任感和安全性,減少了偏見和隱私問題,確保其輸出更加可信和中立。

AppBuilder-SDK:

AppBuilder-SDK 的功能非常廣泛,包含了諸如語音識別、自然語言處理、圖像識別等AI能力組件 (Read the Docs) 。具體來說,它包括了短語音識別、通用文字識別、文檔解析、表格抽取、地標識別、問答對挖掘等多個組件 (Read the Docs) (GitHub) 。這些功能使開發(fā)者可以構(gòu)建從基礎(chǔ)AI功能到復(fù)雜應(yīng)用的各種項目,提升開發(fā)效率。

該案例中提到了很多的大語言模型,都是可以自行去測試每個大語言輸出的不同的結(jié)果如何。

項目結(jié)構(gòu)
介紹項目之前必須得介紹一下項目的構(gòu)成,制作了一張流程圖方便理解。

wKgZomaE6CaATMzWAAW2dxeMDuY302.png

語音識別-appbuild
首先通過調(diào)用本地的電腦進行麥克風(fēng)的錄音制作成音頻文件。

#調(diào)用麥克風(fēng)錄音。
def record(MIC_INDEX=0, DURATION=5):
   '''
   調(diào)用麥克風(fēng)錄音,需用arecord -l命令獲取麥克風(fēng)ID
   DURATION,錄音時長
   '''
   os.system('sudo arecord -D "plughw:{}" -f dat -c 1 -r 16000 -d {} temp/speech_record.wav'.format(MIC_INDEX, DURATION))


當(dāng)然這種默認的錄音在一些特定的環(huán)境中效果是不好的,所以要設(shè)定相關(guān)的參數(shù)保證錄音的質(zhì)量。

   CHUNK = 1024               # 采樣寬度
   RATE = 16000               # 采樣率
   
   QUIET_DB = 2000            # 分貝閾值,大于則開始錄音,否則結(jié)束
   delay_time = 1             # 聲音降至分貝閾值后,經(jīng)過多長時間,自動終止錄音
   
   FORMAT = pyaudio.paInt16
   CHANNELS = 1 if sys.platform == 'darwin' else 2 # 采樣通道數(shù)


根據(jù)參數(shù)的設(shè)定,然后開始錄音,之后要對文件進行保存。

 output_path = 'temp/speech_record.wav'
   wf = wave.open(output_path, 'wb')
   wf.setnchannels(CHANNELS)
   wf.setsampwidth(p.get_sample_size(FORMAT))
   wf.setframerate(RATE)
   wf.writeframes(b''.join(frames[START_TIME-2:END_TIME]))
   wf.close()
   print('保存錄音文件', output_path)


有了錄音文件,電腦當(dāng)然沒那么智能我們需要用到appbuild-sdk來對音頻文件的語音進行識別,這樣LLM才能夠獲取我們說的話然后做出一些對應(yīng)的操作。

import appbuilder

os.environ["APPBUILDER_TOKEN"] = APPBUILDER_TOKEN
asr = appbuilder.ASR() # 語音識別組件
def speech_recognition(audio_path='temp/speech_record.wav'):

   # 載入wav音頻文件
   with wave.open(audio_path, 'rb') as wav_file:
       
       # 獲取音頻文件的基本信息
       num_channels = wav_file.getnchannels()
       sample_width = wav_file.getsampwidth()
       framerate = wav_file.getframerate()
       num_frames = wav_file.getnframes()
       
       # 獲取音頻數(shù)據(jù)
       frames = wav_file.readframes(num_frames)
       
   # 向API發(fā)起請求
   content_data = {"audio_format": "wav", "raw_audio": frames, "rate": 16000}
   message = appbuilder.Message(content_data)
   speech_result = asr.run(message).content['result'][0]

   return speech_result

Prompt-Agent
緊接著,我們要prompt大語言模型,提前告訴它出現(xiàn)某種情況應(yīng)該如何進行應(yīng)對。這邊對調(diào)用LLM的API 就不做過多的介紹了,讓我們來看看如何對LLM做預(yù)訓(xùn)練。

prompt: (截取部分片段,以下是做中文的翻譯)

你是我的機械臂助手,機械臂內(nèi)置了一些函數(shù),請你根據(jù)我的指令,以json形式輸出要運行的對應(yīng)函數(shù)和你給我的回復(fù)

【以下是所有內(nèi)置函數(shù)介紹】
機械臂位置歸零,所有關(guān)節(jié)回到原點:back_zero()
放松機械臂,所有關(guān)節(jié)都可以自由手動拖拽活動:back_zero()
做出搖頭動作:head_shake()
做出點頭動作:head_nod()
做出跳舞動作:head_dance()
打開吸泵:pump_on()
關(guān)閉吸泵:pump_off()【輸出json格式】
你直接輸出json即可,從{開始,不要輸出包含```json的開頭或結(jié)尾
在'function'鍵中,輸出函數(shù)名列表,列表中每個元素都是字符串,代表要運行的函數(shù)名稱和參數(shù)。每個函數(shù)既可以單獨運行,也可以和其他函數(shù)先后運行。列表元素的先后順序,表示執(zhí)行函數(shù)的先后順序
在'response'鍵中,根據(jù)我的指令和你編排的動作,以第一人稱輸出你回復(fù)我的話,不要超過20個字,可以幽默和發(fā)散,用上歌詞、臺詞、互聯(lián)網(wǎng)熱梗、名場面。比如李云龍的臺詞、甄嬛傳的臺詞、練習(xí)時長兩年半。
【以下是一些具體的例子】
我的指令:回到原點。你輸出:{'function':['back_zero()'], 'response':'回家吧,回到最初的美好'}
我的指令:先回到原點,然后跳舞。你輸出:{'function':['back_zero()', 'head_dance()'], 'response':'我的舞姿,練習(xí)時長兩年半'}
我的指令:先回到原點,然后移動到180, -90坐標。你輸出:{'function':['back_zero()', 'move_to_coords(X=180, Y=-90)'], 'response':'精準不,老子打的就是精銳'}

智能視覺抓取
在這個過程中,只需要myCobot移動到俯視的一個位置,對目標進行拍攝,然后將拍攝后的照片交給視覺模型進行處理,獲取到目標的參數(shù)就可以返回給機械臂做抓取運動。

調(diào)用相機進行拍攝

def check_camera():
   cap = cv2.VideoCapture(0)
   
   while(True):
       ret, frame = cap.read()
   
       # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
   
       cv2.imshow('frame', frame)
       if cv2.waitKey(1) & 0xFF == ord('q'):
           break
   
   cap.release()
   cv2.destroyAllWindows()


講圖像交給大模型進行處理,之后得到的參數(shù)需要進一步的處理,繪制可視化的效果,最終將返回得到歸一化坐標轉(zhuǎn)化為實際圖像中的像素坐標。

wKgZomaE6KKAZTC1AAH2vTTkcug078.pngwKgZomaE6K-AJCcGAAILkRjvx5w104.png

def post_processing_viz(result, img_path, check=False):
   
   '''
   視覺大模型輸出結(jié)果后處理和可視化
   check:是否需要人工看屏幕確認可視化成功,按鍵繼續(xù)或退出
   '''

   # 后處理
   img_bgr = cv2.imread(img_path)
   img_h = img_bgr.shape[0]
   img_w = img_bgr.shape[1]
   # 縮放因子
   FACTOR = 999
   # 起點物體名稱
   START_NAME = result['start']
   # 終點物體名稱
   END_NAME = result['end']
   # 起點,左上角像素坐標
   START_X_MIN = int(result['start_xyxy'][0][0] * img_w / FACTOR)
   START_Y_MIN = int(result['start_xyxy'][0][1] * img_h / FACTOR)
   # 起點,右下角像素坐標
   START_X_MAX = int(result['start_xyxy'][1][0] * img_w / FACTOR)
   START_Y_MAX = int(result['start_xyxy'][1][1] * img_h / FACTOR)
   # 起點,中心點像素坐標
   START_X_CENTER = int((START_X_MIN + START_X_MAX) / 2)
   START_Y_CENTER = int((START_Y_MIN + START_Y_MAX) / 2)
   # 終點,左上角像素坐標
   END_X_MIN = int(result['end_xyxy'][0][0] * img_w / FACTOR)
   END_Y_MIN = int(result['end_xyxy'][0][1] * img_h / FACTOR)
   # 終點,右下角像素坐標
   END_X_MAX = int(result['end_xyxy'][1][0] * img_w / FACTOR)
   END_Y_MAX = int(result['end_xyxy'][1][1] * img_h / FACTOR)
   # 終點,中心點像素坐標
   END_X_CENTER = int((END_X_MIN + END_X_MAX) / 2)
   END_Y_CENTER = int((END_Y_MIN + END_Y_MAX) / 2)
   
   # 可視化
   # 畫起點物體框
   img_bgr = cv2.rectangle(img_bgr, (START_X_MIN, START_Y_MIN), (START_X_MAX, START_Y_MAX), [0, 0, 255], thickness=3)
   # 畫起點中心點
   img_bgr = cv2.circle(img_bgr, [START_X_CENTER, START_Y_CENTER], 6, [0, 0, 255], thickness=-1)
   # 畫終點物體框
   img_bgr = cv2.rectangle(img_bgr, (END_X_MIN, END_Y_MIN), (END_X_MAX, END_Y_MAX), [255, 0, 0], thickness=3)
   # 畫終點中心點
   img_bgr = cv2.circle(img_bgr, [END_X_CENTER, END_Y_CENTER], 6, [255, 0, 0], thickness=-1)
   # 寫中文物體名稱
   img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) # BGR 轉(zhuǎn) RGB
   img_pil = Image.fromarray(img_rgb) # array 轉(zhuǎn) pil
   draw = ImageDraw.Draw(img_pil)
   # 寫起點物體中文名稱
   draw.text((START_X_MIN, START_Y_MIN-32), START_NAME, font=font, fill=(255, 0, 0, 1)) # 文字坐標,中文字符串,字體,rgba顏色
   # 寫終點物體中文名稱
   draw.text((END_X_MIN, END_Y_MIN-32), END_NAME, font=font, fill=(0, 0, 255, 1)) # 文字坐標,中文字符串,字體,rgba顏色
   img_bgr = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR) # RGB轉(zhuǎn)BGR

   return START_X_CENTER, START_Y_CENTER, END_X_CENTER, END_Y_CENTER

要用到手眼標定將圖像中的像素坐標,轉(zhuǎn)化為機械臂的坐標,以至于機械臂能夠去執(zhí)行抓取。

def eye2hand(X_im=160, Y_im=120):

   # 整理兩個標定點的坐標
   cali_1_im = [130, 290]                       # 左下角,第一個標定點的像素坐標,要手動填!
   cali_1_mc = [-21.8, -197.4]                  # 左下角,第一個標定點的機械臂坐標,要手動填!
   cali_2_im = [640, 0]                         # 右上角,第二個標定點的像素坐標
   cali_2_mc = [215, -59.1]                    # 右上角,第二個標定點的機械臂坐標,要手動填!
   
   X_cali_im = [cali_1_im[0], cali_2_im[0]]     # 像素坐標
   X_cali_mc = [cali_1_mc[0], cali_2_mc[0]]     # 機械臂坐標
   Y_cali_im = [cali_2_im[1], cali_1_im[1]]     # 像素坐標,先小后大
   Y_cali_mc = [cali_2_mc[1], cali_1_mc[1]]     # 機械臂坐標,先大后小

   # X差值
   X_mc = int(np.interp(X_im, X_cali_im, X_cali_mc))

   # Y差值
   Y_mc = int(np.interp(Y_im, Y_cali_im, Y_cali_mc))

   return X_mc, Y_mc

最后將全部的技術(shù)整合在一起就形成了一個完成的Agent了,就能夠?qū)崿F(xiàn)指哪打哪的功能。

https://www.youtube.com/watch?v=VlSQQJreIrI

總結(jié)
vlm_arm項目展示了將多個大模型與機械臂結(jié)合的巨大潛力,為人機協(xié)作和智能化應(yīng)用提供了新的思路和方法。這一案例不僅展示了技術(shù)的創(chuàng)新性和實用性,也為未來類似項目的開發(fā)提供了寶貴的經(jīng)驗和參考。通過對項目的深入分析,我們可以看到多模型并行使用在提升系統(tǒng)智能化水平方面的顯著效果,為機器人技術(shù)的進一步發(fā)展奠定了堅實基礎(chǔ)。

離實現(xiàn)鋼鐵俠中的賈維斯越來越近了,未來電影中的畫面終將會成為現(xiàn)實。

審核編輯 黃宇

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

    關(guān)注

    1789

    文章

    46652

    瀏覽量

    237073
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3215

    瀏覽量

    42328
  • 機械臂
    +關(guān)注

    關(guān)注

    12

    文章

    506

    瀏覽量

    24458
  • 大模型
    +關(guān)注

    關(guān)注

    2

    文章

    2274

    瀏覽量

    2356
收藏 人收藏

    評論

    相關(guān)推薦

    從工業(yè)到醫(yī)療再到太空機器人 機械都有什么不同?

    從太空機器人到醫(yī)療領(lǐng)域可見的手術(shù)機器人機械都不可或缺,占據(jù)著重要地位。那么,不同機械是如何
    發(fā)表于 12-13 14:52 ?3836次閱讀

    開源工業(yè)機械開發(fā)套件

    `一、產(chǎn)品介紹: 小型四軸碼垛工業(yè)機器人是由一款桌面級四軸開源迷你機器組成,配合本系統(tǒng)的二軸或者單軸機械爪可組成六軸或五軸
    發(fā)表于 10-23 11:26

    開源工業(yè)增強型機械

    :是一套完全開源的系統(tǒng)平臺,增強型機械擁有一套圖形化編程軟件,即用戶不需要懂任何編程的知識,只需要通過計算機電腦通過圖像拖拽機械就能夠?qū)?/div>
    發(fā)表于 10-23 11:29

    如何控制真實機械/機器人

    數(shù)據(jù)傳輸?shù)耐ǖ溃绾螌OS功能包計算得到的數(shù)據(jù)發(fā)給真實機器人并使之運動是問題的關(guān)鍵。機械有點復(fù)雜,我們先以簡單一些的ROS小車為例,看看ROS是如何讓真實小車動起來的。大家在某寶上搜索“ROS移動
    發(fā)表于 09-07 09:12

    如何導(dǎo)入機械的三維模型

     如何進行(正/逆)動力學(xué)仿真;   4. 如何進行碰撞檢測;   5. 如何進行控制方法的驗證;   先看一下效果(先嘗后買):  對于機器人研發(fā)設(shè)計人員,一款好用的仿真軟件能對他的
    發(fā)表于 09-07 09:25

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

    機械的控制-------------控制器1.位置控制機器人最傳統(tǒng),最常用的控制方式就是位置控制,它能以0誤差來達到指定位置或以0誤差跟隨指定軌跡。普通的位置控制,是控制機器人末端到
    發(fā)表于 02-23 07:49

    一文看懂工業(yè)機器人機械的區(qū)別

    本文主要闡述了工業(yè)機器人機械的區(qū)別。機器人機械不同的是,
    發(fā)表于 03-20 14:28 ?9045次閱讀

    制造業(yè)最常見的機器人——機械

    機械是制造業(yè)中最常見的機器人之一。在大多數(shù)情況下,機械都是可編程的,可用于執(zhí)行特定任務(wù),通常用于制造、制造和工業(yè)應(yīng)用。
    發(fā)表于 09-29 10:09 ?2908次閱讀

    基于FuzzyP的多臂機器人機械控制系統(tǒng)

    基于FuzzyP的多臂機器人機械控制系統(tǒng)
    發(fā)表于 06-22 15:07 ?13次下載

    機械和移動機器人的架構(gòu)介紹

    本文比較了機械和移動機器人兩種工業(yè)機器人的控制系統(tǒng)方案,對其特點進行了介紹。 以上分類是根據(jù)應(yīng)用對象,此外,市面上更多的是通用型運動控制器,即控制非標設(shè)備的。 1 控制器底層方案1.
    的頭像 發(fā)表于 07-22 17:37 ?3320次閱讀

    機械開源硬件

    電子發(fā)燒友網(wǎng)站提供《機械開源硬件.zip》資料免費下載
    發(fā)表于 12-01 15:27 ?6次下載
    <b class='flag-5'>機械</b><b class='flag-5'>臂</b><b class='flag-5'>開源</b>硬件

    大象機器人推出桌面高精度機械ultraArm,配五大套裝,助力最燃AI視覺玩法

    機械轉(zhuǎn)化成桌面級機械,通過較低的價格,搭建了一個機器人研究和教育平臺,降低了AI人工智能領(lǐng)域的學(xué)習(xí)門檻。 為了滿足更多用戶的需求,我們不
    發(fā)表于 01-04 13:49 ?620次閱讀

    控制機械開源

    電子發(fā)燒友網(wǎng)站提供《控制機械開源.zip》資料免費下載
    發(fā)表于 01-31 14:43 ?4次下載
    <b class='flag-5'>人</b><b class='flag-5'>臂</b>控制<b class='flag-5'>機械</b><b class='flag-5'>臂</b><b class='flag-5'>開源</b>

    機械焊接機器人軌跡控制原理

    隨著制造業(yè)的不斷發(fā)展,機器人技術(shù)在各個領(lǐng)域都得到了廣泛應(yīng)用,其中機械焊接機器人在汽車制造、電子產(chǎn)品制造等行業(yè)中發(fā)揮著重要作用。機械
    的頭像 發(fā)表于 11-16 17:20 ?791次閱讀

    自動化革命:大象機器人的Mercury A1機械

    引言 大象機器人的Mercury系列,是面向工業(yè)自動化和智能制造的新型機械產(chǎn)品線。這些機械
    的頭像 發(fā)表于 01-15 14:41 ?672次閱讀
    自動化革命:<b class='flag-5'>大象</b><b class='flag-5'>機器人</b>的Mercury A1<b class='flag-5'>機械</b><b class='flag-5'>臂</b>