地平線旭日?X3派(下文簡(jiǎn)稱旭日X3派)是一款擁有著高算力,面向生態(tài)開發(fā)者的嵌入式,可用于機(jī)器人、無人駕駛、智能家居等領(lǐng)域,并搭載了TogetherROS開發(fā)平臺(tái),可高效進(jìn)行機(jī)器人開發(fā)。ChatGPT是一款由OpenAI開發(fā)的自然語(yǔ)言處理模型,可以理解人類語(yǔ)言、自動(dòng)生成文本、回答問題和完成其他任務(wù),還可以與其他技術(shù)聯(lián)動(dòng),實(shí)現(xiàn)更加復(fù)雜的應(yīng)用。
旭日X3派遇上ChatGPT會(huì)碰撞出什么火花呢?本文使用旭日X3派作為載體,在OriginBot上使用ChatGPT進(jìn)行問答。相關(guān)問題歡迎大家注冊(cè)加入地平線開發(fā)者社區(qū)交流討論,配置文件及代碼詳見地平線開發(fā)者社區(qū)。
環(huán)境配置
1、解釋OriginBot小車代碼
2、解釋運(yùn)動(dòng)學(xué)模型
3、使用OpenCV在OriginBot小車上實(shí)現(xiàn)巡線功能
4、在ROS2環(huán)境中實(shí)現(xiàn)gmapping或者cartographer
5、總結(jié)對(duì)話
綜上,我們發(fā)現(xiàn)ChatGPT有著記憶儲(chǔ)存的功能,它區(qū)別于SiRi傳統(tǒng)的一問一答,能根據(jù)聊天的上下文進(jìn)行互動(dòng)并歸納總結(jié)所有的問題,協(xié)助我們完成編程。并且ChatGPT在回復(fù)消息時(shí)是逐字的顯示,很難感覺到是和機(jī)器人在對(duì)話,仿佛它只是個(gè)博學(xué)的朋友。
它在針對(duì)簡(jiǎn)單編程問題的處理上可謂是非常驚艷,在ROS相關(guān)的問題上,比我們?nèi)祟惛心托慕獯穑袝r(shí)會(huì)畫出重點(diǎn)并擴(kuò)展更多的相關(guān)知識(shí)幫助你去解決問題掌握技術(shù)。
既然ChatGPT都能接入WX,那么它和旭日X3派一定也能「chat」一下!不妨我們直接詢問ChatGPT,該如何使得旭日X3派和ChatGPT聯(lián)系起來!它給了我們這樣的一個(gè)答案:
模型部署
1、部署基本環(huán)境
進(jìn)入旭日X3派,執(zhí)行以下命令(此處使用的是OriginBot v1.0.2的鏡像):
pip3 install openai
2、學(xué)習(xí)OpenAI API如何使用
import openai # 將OpenAI訪問令牌設(shè)置為環(huán)境變量 openai.api_key = "YOUR_API_KEY" # 調(diào)用OpenAI GPT-3模型,生成回答 response = openai.Completion.create( engine="text-davinci-002", prompt="你好!", max_tokens=1024, # 最大1024個(gè)標(biāo)記 temperature=0.7, n=1, stop=None, ) # 輸出生成的回答 print(response.choices[0].text)
3、書寫節(jié)點(diǎn)代碼
import rclpy from rclpy.node import Node from std_msgs.msg import String import openai class OpenAINode(Node): def __init__(self): super().__init__('openai_node') self.publisher_ = self.create_publisher(String, 'openai_text', 10) self.subscription = self.create_subscription( String, 'user_input', self.listener_callback, 10) self.subscription # 防止被Python垃圾回收機(jī)制刪除 def listener_callback(self, msg): # 處理從ROS話題訂閱到的輸入 input_text = msg.data # 調(diào)用OpenAI的GPT-3模型生成文本 openai.api_key = 'YOUR_API_KEY' response = openai.Completion.create( engine="davinci", prompt=input_text, max_tokens=60, n=1, stop=None, temperature=0.7 ) # 將生成的文本發(fā)布到ROS話題 self.publisher_.publish(response.choices[0].text) def main(args=None): rclpy.init(args=args) openai_node = OpenAINode() rclpy.spin(openai_node) openai_node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main()
4、部署到旭日X3派中
此處,即可按照古月老師的ROS2 21講的方式來創(chuàng)建一個(gè)基于python的功能包。
5、程序運(yùn)行
可以看到,此處運(yùn)行狀態(tài)與理想情況有較大出入。回到這一段代碼:
import openai # 將OpenAI訪問令牌設(shè)置為環(huán)境變量 openai.api_key = "YOUR_API_KEY" # 調(diào)用OpenAI GPT-3模型,生成回答 response = openai.Completion.create( engine="text-davinci-002", prompt="你好!", max_tokens=1024, # 最大1024個(gè)標(biāo)記 temperature=0.7, n=1, stop=None, ) # 輸出生成的回答 print(response.choices[0].text)
當(dāng)前,engine使用的模型,此處是”text-davinci-002“,prompt是指輸入文本,max_tokens指的是最大輸出文字。首先,打印出所有的模型,示例代碼如下:
import openai # 將OpenAI訪問令牌設(shè)置為環(huán)境變量 openai.api_key = "YOUR_API_KEY" # 獲取OpenAI最新的語(yǔ)言模型名稱 models = openai.Model.list() latest_model = models['data'][0].id print("最新的OpenAI語(yǔ)言模型是:", latest_model) print("\n") printf("所有的模型如下:", models)
與當(dāng)前WX接入ChatGPT方式進(jìn)行對(duì)照發(fā)現(xiàn),可將其理解為Transformer模型,直接把當(dāng)前和之前所有的問題和回答都當(dāng)成輸入,生成最終的代碼:
import rclpy from rclpy.node import Node from std_msgs.msg import String import openai class OpenAINode(Node): def __init__(self): super().__init__('openai_node') self.publisher_ = self.create_publisher(String, 'chatgpt_node', 10) self.subscription = self.create_subscription( String, 'user_input', self.listener_callback, 10) self.history = "" def listener_callback(self, msg): # 處理從ROS話題訂閱到的輸入 input_text = msg.data self.history += input_text self.history += " " # 調(diào)用OpenAI的GPT-3模型生成文本 openai.api_key = 'KEY' #models = openai.Model.list() #latest_model = models['data'][0].id #print(models) response = openai.Completion.create( engine="text-davinci-003", prompt=self.history+input_text, max_tokens=1024, n=1, stop=None, temperature=0.7 ) # 將生成的文本發(fā)布到ROS話題 msg = String() msg.data = response.choices[0].text print(msg.data) self.history += msg.data self.history += " " def main(args=None): rclpy.init(args=args) chatgpt_node = OpenAINode() rclpy.spin(chatgpt_node) chatgpt_node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main()
效果如下:
本文轉(zhuǎn)自地平線發(fā)者社區(qū)
原作者:Lxxxb
-
人工智能
+關(guān)注
關(guān)注
1792文章
47514瀏覽量
239246 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5096瀏覽量
97823 -
OpenAI
+關(guān)注
關(guān)注
9文章
1103瀏覽量
6602 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1564瀏覽量
7865
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論