地平線旭日?X3派(下文簡稱旭日X3派)是一款擁有著高算力,面向生態開發者的嵌入式,可用于機器人、無人駕駛、智能家居等領域,并搭載了TogetherROS開發平臺,可高效進行機器人開發。ChatGPT是一款由OpenAI開發的自然語言處理模型,可以理解人類語言、自動生成文本、回答問題和完成其他任務,還可以與其他技術聯動,實現更加復雜的應用。
旭日X3派遇上ChatGPT會碰撞出什么火花呢?本文使用旭日X3派作為載體,在OriginBot上使用ChatGPT進行問答。相關問題歡迎大家注冊加入地平線開發者社區交流討論,配置文件及代碼詳見地平線開發者社區。
環境配置
1、解釋OriginBot小車代碼
2、解釋運動學模型
3、使用OpenCV在OriginBot小車上實現巡線功能
4、在ROS2環境中實現gmapping或者cartographer
5、總結對話
綜上,我們發現ChatGPT有著記憶儲存的功能,它區別于SiRi傳統的一問一答,能根據聊天的上下文進行互動并歸納總結所有的問題,協助我們完成編程。并且ChatGPT在回復消息時是逐字的顯示,很難感覺到是和機器人在對話,仿佛它只是個博學的朋友。
它在針對簡單編程問題的處理上可謂是非常驚艷,在ROS相關的問題上,比我們人類更有耐心解答,有時會畫出重點并擴展更多的相關知識幫助你去解決問題掌握技術。
既然ChatGPT都能接入WX,那么它和旭日X3派一定也能「chat」一下!不妨我們直接詢問ChatGPT,該如何使得旭日X3派和ChatGPT聯系起來!它給了我們這樣的一個答案:
模型部署
1、部署基本環境
進入旭日X3派,執行以下命令(此處使用的是OriginBot v1.0.2的鏡像):
pip3 install openai
2、學習OpenAI API如何使用
import openai # 將OpenAI訪問令牌設置為環境變量 openai.api_key = "YOUR_API_KEY" # 調用OpenAI GPT-3模型,生成回答 response = openai.Completion.create( engine="text-davinci-002", prompt="你好!", max_tokens=1024, # 最大1024個標記 temperature=0.7, n=1, stop=None, ) # 輸出生成的回答 print(response.choices[0].text)
3、書寫節點代碼
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垃圾回收機制刪除 def listener_callback(self, msg): # 處理從ROS話題訂閱到的輸入 input_text = msg.data # 調用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 ) # 將生成的文本發布到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講的方式來創建一個基于python的功能包。
5、程序運行
可以看到,此處運行狀態與理想情況有較大出入。回到這一段代碼:
import openai # 將OpenAI訪問令牌設置為環境變量 openai.api_key = "YOUR_API_KEY" # 調用OpenAI GPT-3模型,生成回答 response = openai.Completion.create( engine="text-davinci-002", prompt="你好!", max_tokens=1024, # 最大1024個標記 temperature=0.7, n=1, stop=None, ) # 輸出生成的回答 print(response.choices[0].text)
當前,engine使用的模型,此處是”text-davinci-002“,prompt是指輸入文本,max_tokens指的是最大輸出文字。首先,打印出所有的模型,示例代碼如下:
import openai # 將OpenAI訪問令牌設置為環境變量 openai.api_key = "YOUR_API_KEY" # 獲取OpenAI最新的語言模型名稱 models = openai.Model.list() latest_model = models['data'][0].id print("最新的OpenAI語言模型是:", latest_model) print("\n") printf("所有的模型如下:", models)
與當前WX接入ChatGPT方式進行對照發現,可將其理解為Transformer模型,直接把當前和之前所有的問題和回答都當成輸入,生成最終的代碼:
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 += " " # 調用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 ) # 將生成的文本發布到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()
效果如下:
本文轉自地平線發者社區
原作者:Lxxxb
-
人工智能
+關注
關注
1794文章
47642瀏覽量
239650 -
開發板
+關注
關注
25文章
5121瀏覽量
97976 -
OpenAI
+關注
關注
9文章
1123瀏覽量
6635 -
ChatGPT
+關注
關注
29文章
1566瀏覽量
7944
發布評論請先 登錄
相關推薦
評論