1.引言:
自O(shè)penAI發(fā)布ChatGPT以來,世界正迅速朝著更廣泛地將AI技術(shù)融合到機(jī)器人設(shè)備中的趨勢(shì)發(fā)展。機(jī)械手臂,作為自動(dòng)化與智能化技術(shù)的重要組成部分,在制造業(yè)、醫(yī)療、服務(wù)業(yè)等領(lǐng)域的應(yīng)用日益廣泛。隨著AI技術(shù)的進(jìn)步,機(jī)械手臂不僅能執(zhí)行復(fù)雜的操作任務(wù),還能通過自然語(yǔ)言處理技術(shù)進(jìn)行更加直觀的交互,極大提高了靈活性和用戶友好性。
就比如說微軟的一個(gè)人工智能研究中心,研究如何用自然語(yǔ)言來控制機(jī)器人設(shè)備的一個(gè)研究,
所以我想做一個(gè)類似的項(xiàng)目,通過允許用戶使用自然語(yǔ)言來控制機(jī)械手臂,它可以大大降低機(jī)器人編程的門檻,使得非專業(yè)人士也能輕松地操作和實(shí)驗(yàn)。
論文link:
https://www.microsoft.com/en-us/research/uploads/prod/2023/02/ChatGPT___Robotics.pdf
該項(xiàng)目一共分為上下兩篇,本篇文章主要內(nèi)容是整個(gè)人工智能系統(tǒng)的設(shè)計(jì)和構(gòu)建的過程,未來的下一篇文章將要介紹在開發(fā)項(xiàng)目的過程中遇到的而困難,如何解決,以及該項(xiàng)目有什么擴(kuò)展的性的功能。
2.項(xiàng)目背景與動(dòng)機(jī):
想象如果有有一天,你命令一個(gè)機(jī)械臂“幫我收拾一下桌面,將垃圾丟到垃圾桶里”,機(jī)械臂就開始聽從命令,清理你的桌面的垃圾,那該是多么幸福的一件事情呀。
所以準(zhǔn)備工作,我們需要一臺(tái)小型的機(jī)械臂(主要是大的機(jī)械臂太貴了),一臺(tái)能夠上網(wǎng)的電腦,以及一顆炙熱的心!該項(xiàng)目主要是借鑒微軟的那篇改變機(jī)器人使用的研究來入手。
3.技術(shù)概覽:
前提本項(xiàng)目是基于python的環(huán)境下進(jìn)行編譯的。
首先我們先來介紹一下本項(xiàng)目會(huì)使用到的一些軟件層面上技術(shù):
ChatGPT:(整個(gè)項(xiàng)目最關(guān)鍵的核心技術(shù))
https://openai.com/chatgpt
ChatGPT是一項(xiàng)人工智能技術(shù),基于GPT(Generative Pre-trained Transformer)模型的架構(gòu),GPT是一種基于深度學(xué)習(xí)的自然語(yǔ)言處理模型,通過大規(guī)模的無監(jiān)督預(yù)訓(xùn)練和有監(jiān)督微調(diào)來實(shí)現(xiàn)語(yǔ)言理解和生成任務(wù)。
換句話來說,你可以簡(jiǎn)單人理解為你在跟一個(gè)知識(shí)十分淵博的人進(jìn)行聊天,你可以對(duì)它預(yù)設(shè)一些角色,例如“”你是一個(gè)醫(yī)生”,你就可以跟他聊醫(yī)學(xué)相關(guān)的知識(shí),但是請(qǐng)注意并不是所生成的所有聊天都是正確的需要進(jìn)行自我判斷。
Speech recognition:(搭配處理自然語(yǔ)言必不可少的功能模塊)
我們這邊使用的是Google的一種語(yǔ)音識(shí)別服務(wù),Speech-to-text,它允許開發(fā)者將語(yǔ)音轉(zhuǎn)化成文本的形式。并且它也支持多種語(yǔ)言和方言,包括但不限于英語(yǔ),西班牙語(yǔ),法語(yǔ),德語(yǔ),中文等等,可以滿足全球用戶的需求。
你可以進(jìn)行在線的嘗試語(yǔ)音轉(zhuǎn)文本:
https://cloud.google.com/speech-to-text?hl=en#features
pymycobot:(mycobot 280機(jī)械臂的控制功能模塊)
https://github.com/elephantrobotics/pymycobot
pymycobot 是大象機(jī)器人專門為了my系列產(chǎn)品的機(jī)械臂開發(fā)的控制模塊,這個(gè)功能模塊的開發(fā),大大降低了機(jī)械臂編程控制的門檻。pymycobot 提供了大量的機(jī)械臂的控制接口,例如關(guān)節(jié)控制,坐標(biāo)控制,配套的機(jī)械臂的夾爪控制等等,對(duì)機(jī)械臂變成的初學(xué)者是相當(dāng)有好的。
解釋這些技術(shù)如何合作實(shí)現(xiàn)自然語(yǔ)言控制機(jī)械手臂的功能。
接下來介紹一下硬件設(shè)備:
mycobot 280 M5Stack
mycobot 280 M5Stack 是Elephant Robotics 和M5Stack 合作的一款6自由度的協(xié)作性機(jī)器人。它外觀結(jié)構(gòu)設(shè)計(jì)小巧精致,一體式全包裹機(jī)身設(shè)計(jì),采用高精度伺服電機(jī),無任何外漏線纜。mycobot重量只有850g,機(jī)械臂末端最大的負(fù)載能夠達(dá)到250g,最大工作半徑達(dá)到280mm,重復(fù)定位精度能夠到0.5mm的誤差范圍內(nèi)。
4.設(shè)計(jì)思路與實(shí)現(xiàn)過程:
https://www.youtube.com/watch?v=Sq1QZB5baNw&pp=ygUVY2hhdGdwdCBjb250cm9sIHJvYm90
大家可以看一下近期OpenAI發(fā)布的一條視頻,人跟機(jī)器人聊天,機(jī)器人來處理自然語(yǔ)言并且生成相對(duì)應(yīng)的動(dòng)作執(zhí)行。
也有一些其他的額機(jī)械臂也集成了類似的場(chǎng)景。
https://www.youtube.com/watch?v=IGsYgSdrT4Y
我要做的項(xiàng)目就是類似于這個(gè)小型版!通過自然語(yǔ)言跟機(jī)械臂進(jìn)行溝通,然后,機(jī)械臂執(zhí)行相對(duì)應(yīng)的指令。
接下來我將要說明項(xiàng)目的過程。
語(yǔ)音識(shí)別轉(zhuǎn)文本功能speech-to-text:
為什么要用語(yǔ)音識(shí)別轉(zhuǎn)文本功能呢?用過chatgpt的人知道chatgpt有內(nèi)置的語(yǔ)音聊天的功能,但是我們要集成到PC端和機(jī)械臂當(dāng)中去使用,就不能夠使用ChatGPT的web版本,而是要在本地的計(jì)算機(jī)當(dāng)中實(shí)現(xiàn),就要用到ChatGPT的API接口。
ChatGPT API的形式的話只能夠接收“文本”的形式來使用,所以speech-to-text可以講我們講話轉(zhuǎn)化成文本的形式輸入到電腦當(dāng)中。
def speech_to_text(): recognizer = sr.Recognizer() with sr.Microphone() as source: print("start speaking...") audio = recognizer.listen(source) try: # text = recognizer.recognize_google(audio, language='zh-CN') text = recognizer.recognize_google(audio, language='en-US') print("you said: " + text) return text except sr.UnknownValueError: print("Google Speech Recognition could not understand audio") return None except sr.RequestError as e: print("Could not request results from Google Speech Recognition service; {0}".format(e)) return None
調(diào)用ChatGPT API &預(yù)訓(xùn)練
獲取了語(yǔ)音的文本形式,就可以調(diào)用API在本地跟ChatGPT進(jìn)行聊天了。以下是OpenAI 提供調(diào)用ChatGPT API的使用方法。
def generate_control_code(prompt): openai.api_key = '' prompt = f"{pre_training}The command the user wants to execute is:'{prompt}'." try: response = openai.Completion.create( engine="gpt-3.5-turbo", prompt=prompt, temperature=0.5, max_tokens=100, top_p=1.0, frequency_penalty=0.0, presence_penalty=0.0 ) code = response.choices[0].text.strip() return code except Exception as e: print(f"error: {e}") return ""
代碼當(dāng)中的API_KEY需要自己去官方申請(qǐng)(需要付費(fèi))。
可以關(guān)注一下prompt這一句話,這將是要提及到的預(yù)訓(xùn)練。
prompt = f"{pre_training}The command the user wants to execute is:'{prompt}'."
如果想要獲取精準(zhǔn)的回復(fù),需要提前給ChatGPT知道它需要干什么,要讓他干什么,按照我們的想法來輸出。我們先用web版本來進(jìn)行測(cè)試,因?yàn)锳PI的搭建比較復(fù)雜。
以下是我的prompt(針對(duì)于這個(gè)項(xiàng)目),我只想要它輸出機(jī)械臂執(zhí)行的代碼給我所以我是這么做的。
Generate Python code that matches the following requirements: Use an instance of the MyCobotController class robot to perform a specific action. The instance already contains methods such as move_to_zero() to return to the initial position, grab_position() to move to the grab position, and plus_x_coords(value), plus_y_coords(value), plus_z_coords(value) to move specific distances on the X, Y, and Z axes. You don’t need to output other textual content, just output the code directly, for example, the robot arm returns to the origin. robot.move_to_zero() Here is what I said: I want the robot arm to return to the origin, and then go to the position to be grabbed to perform grabbing.
這里可以看到能夠成功的完成我的基本需求,但是他輸出了代碼的注釋,這會(huì)影響我們之后的結(jié)果,所以還是需要進(jìn)行修改。(讓他只輸出代碼,不要輸出注釋。)
構(gòu)建新的機(jī)械臂API
為什么要構(gòu)建新的API呢,pymycobot不是已經(jīng)提供了嗎?
當(dāng)然,pymycobot 提供的API很全面,也很多。我們?nèi)绻o的語(yǔ)音比較復(fù)雜,ChatGPT會(huì)生成其他的復(fù)雜的代碼可能會(huì)導(dǎo)致出錯(cuò)。我根據(jù)我想要目前測(cè)試的一些需求構(gòu)建了一個(gè)新的機(jī)械臂的API。
class MyCobotController: def __init__(self, port, baud): self.mc = MyCobot(port, baud) self.speed = 80 self.mode =0 self.coords = [] def grab_position(self): # self.mc.send_angles([4.83, 13.97, (-99.31), (-1.75), 4.39, (-0.26)], 80) self.mc.send_coords([149.2, (-48.3), 201.7, (-176.98), 4.55, (-84.66)], 80, 0) time.sleep(2) def move_to_zero(self): self.mc.send_angles([0,0,0,0,0,0],70) time.sleep(2) def gripper_open(self): self.mc.set_gripper_state(0,80,1) time.sleep(2)
目的是為了快速的將整個(gè)項(xiàng)目搭建起來,之后還可以在豐富其中的內(nèi)容。
這么做是有原因的,比如說,要讓機(jī)械臂去到一個(gè)點(diǎn)位進(jìn)行抓取,用pymycobot的方法可能是下面這樣的:
robot.send_angles([0,0,0,0,0,0],80) time.sleep(2) #open gripper robot.set_grippr_value(1,80,1) time.sleep(1) #clos grippr robot.set_grippr_value(0,80,1) time.sleep(1)
這樣的話就要輸出很多行的代碼,在其他復(fù)雜的情況下可能會(huì)導(dǎo)致出錯(cuò),重新構(gòu)建一個(gè)方法的話咱就只需要調(diào)用一個(gè)方法就可以執(zhí)行了,兩行代碼就能解決。
class Newmycobot(): def grab_action(self): self.send_angles([0,0,0,0,0,0],80) time.sleep(2) #open gripper self.set_grippr_value(1,80,1) time.sleep(1) #clos grippr self.set_grippr_value(0,80,1) time.sleep(1) robot = Newmycobot() robot.grab_action()
5.初步成果與展示:
我們先來個(gè)快速的調(diào)試,用web版本的ChatGPT來實(shí)踐一下。
復(fù)制生成的代碼去運(yùn)行。
可以看到簡(jiǎn)單的測(cè)試是OK的。
6. 結(jié)論:
本次的記錄就到這里,整個(gè)項(xiàng)目還未完成,在未來不久的日子里我將會(huì)繼續(xù)完善這個(gè)項(xiàng)目,下一篇的內(nèi)容我會(huì)完善整個(gè)項(xiàng)目,以及分享一下在開發(fā)的過程出現(xiàn)的一些問題是如何進(jìn)行解決的。如果你喜歡這篇文章的話,歡迎在下方留言給出你的想法。
審核編輯 黃宇
-
人工智能
+關(guān)注
關(guān)注
1791文章
47282瀏覽量
238536 -
機(jī)械臂
+關(guān)注
關(guān)注
12文章
515瀏覽量
24590 -
自然語(yǔ)言
+關(guān)注
關(guān)注
1文章
288瀏覽量
13351 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1561瀏覽量
7683
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論