ChartGPT接入ROS2
我,将某个人,唯一的某个人,试图锁定。我,

ChartGPT接入ROS2

ChartGPT接入ROS2

安装

默认已经按照好ROS2如果安装过程有问题建议使用简单好用的MQTT协议

sudo apt-get install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential


创建一个ROS2工作空间

接下来,你需要创建一个ROS2工作空间,可以通过以下命令在终端中创建:

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/
colcon build --symlink-install


完成后,你需要激活该工作空间,可以通过以下命令在终端中激活:

bashCopy code
source ~/ros2_ws/install/setup.bash

创建服务

import rclpy
from rclpy.node import Node
from std_msgs.msg import String

import openai
openai.api_key = "sk-"#填写openai

class ChatGPTNode(Node):
   def __init__(self):
       super().__init__("chat_gpt_node")
       self.publisher = self.create_publisher(String, "chat_gpt_result", 10)
       self.subscription = self.create_subscription(String, "user_input", self.callback_user_input, 10)

   def callback_user_input(self, msg):
       response = openai.Completion.create(
         engine="davinci",
         prompt=msg.data,
         max_tokens=60,
         n=1,
         stop=None,
         temperature=0.5
       )

       result = String()
       result.data = response.choices[0].text.strip()
       self.publisher.publish(result)
       self.get_logger().info("Published: %s" % result.data)

def main(args=None):
   rclpy.init(args=args)
   node = ChatGPTNode()
   rclpy.spin(node)
   rclpy.shutdown()
   print("1111")

if __name__ == "__main__":
   main()

发布消息

然后,你可以使用ROS2 Python客户端库中的Node API来创建一个ROS2节点,并使用ROS2中定义的消息类型与其他节点进行通信。例如,以下代码可以创建一个ROS2节点并发布一个字符串消息:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


import rclpy                                     # ROS2 Python接口库
from rclpy.node import Node                      # ROS2 节点类
from std_msgs.msg import String                  # 字符串消息类型

"""
创建一个发布者节点
"""
class PublisherNode(Node):

   def __init__(self, name):
       super().__init__(name)                                    # ROS2节点父类初始化
       self.pub = self.create_publisher(String, "user_input", 10)   # 创建发布者对象(消息类型、话题名、队列长度)
       self.timer = self.create_timer(0.5, self.timer_callback)  # 创建一个定时器(单位为秒的周期,定时执行的回调函数)

   def timer_callback(self):                                     # 创建定时器周期执行的回调函数
       msg = String()                                            # 创建一个String类型的消息对象
       msg.data = input("shu:")                                  # 填充消息对象中的消息数据
       self.pub.publish(msg)                                     # 发布话题消息
       self.get_logger().info('Publishing: "%s"' % msg.data)     # 输出日志信息,提示已经完成话题发布

def main(args=None):                                 # ROS2节点主入口main函数
   rclpy.init(args=args)                            # ROS2 Python接口初始化
   node = PublisherNode("topic_helloworld_pub")     # 创建ROS2节点对象并进行初始化
   rclpy.spin(node)                                 # 循环等待ROS2退出
   node.destroy_node()                              # 销毁节点对象
   rclpy.shutdown()                                 # 关闭ROS2 Python接口
~                      

订阅消息

可以监听回答消息

import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class DisplayResultNode(Node):
   def __init__(self):
       super().__init__("display_result_node")
       self.subscription = self.create_subscription(String, "chat_gpt_result", self.callback_chat_gpt_result, 10)

   def callback_chat_gpt_result(self, msg):
       self.get_logger().info("Received: %s" % msg.data)

def main(args=None):
   rclpy.init(args=args)
   node = DisplayResultNode()
   rclpy.spin(node)
   rclpy.shutdown()

if __name__ == "__main__":
   main()



上一篇:
下一篇: 没有了