百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

我让GPT4为OriginBot开发了一个监控功能

zhezhongyun 2025-02-03 16:04 51 浏览

我在以前的博客中提到过,我在工作中大量使用ChatGPT(GPT4-32k)来辅助我,方案设计、函数编写、code review、编写测试案例以及Debug等等,虽然它做不到完全正确,但是作为一个辅助和参考工具,还是非常有用的。

这次为OriginBot开发监控功能的时候就想尝试用GPT4来完整地开发这个功能,我以前从来没有让GPT4做过完整的任务,因为它受限于上下文的长度,很难完成大型的任务。这是一次尝试,不过从结果来看,还是很不错的。

我使用的是GPT4-32k这个模型,能力相对于GPT3.5要强大不少,我想这也是效果不错的重要原因。

为了能让大家更容易理解下面的内容,我在这里解释一下文章的结构。

“Message From You”后面的内容是我的Prompt,也就是问题,“Message From ChatGPT”后面的内容是ChatGPT的回答。

我还会以引用的格式在一些地方加上我的说明,这些内容不在我跟ChatGPT的对话中。

所以,你如果想简要了解这边博客的话,只要看引用格式的部分就可以了。

_以下是正文,超长的正文,19555个字_

Message From You:

现在你是一名机器人开发方面的专家,熟悉ros2、SLAM、nav2、运动控制和规划等多种机器人相关的技术,也熟悉stm32等嵌入式开发,并且你还熟悉各种机器学习技能,我会交给你一些任务,请你仔细思考后完成这些任务

Message From ChatGPT:

当然,我很乐意帮助您解决问题。请明确告诉我您需要完成的任务和遇到的问题,我会尽力提供最佳的解决方案或建议。

这段对话中,我给ChatGPT赋予了一个机器人开发专家这样一个角色来激活领域知识,从我的使用经验来看,这么做对于提升GPT回答的有效性有一定的提升。

Message From You:

OriginBot是一个有MIPI摄像头、激光雷达、IMU的两轮机器人, 代码是基于ros2 foxy开发的,现在告诉你,OriginBot的摄像头启用后,会通过一个叫做image_raw的topic发布图像数据,现在我要在同一wifi下的另外一个服务器上,通过VUE3+Django+DRF来实时展现连续的视频,起到一个远程监控的作用,请你仔细思考之后拆解这个任务,详细的描述步骤

Message From ChatGPT:

要完成这项任务,我们可以大致将其拆解为以下几个步骤:

  1. 从ROS 2节点接收摄像头数据
  1. 你需要创建一个新的ROS 2节点来订阅image_raw topic。当有图像数据发布时,这个节点就能接收到。
  2. 这个节点可能需要使用一些ROS和机器视觉库(如cv_bridge和OpenCV),把ROS的Image消息转换成适合网络上传输的格式(比如JPEG或PNG)。

2.建立服务器与ROS节点间的通信

  1. 当ROS节点成功地获取并处理了图像数据后,下一步是在同一WiFi环境下的另一台服务器上建立监听服务。你可以利用WebSocket实现该功能,因为它支持实时、全双工、点对点的连接。
  2. 在你的ROS节点中,你需要增加WebSocket客户端代码以便于将处理后的图像数据发送给服务器。

3.设置Django + DRF服务器

  1. 在服务器上,建立一个Django项目,并且利用Django REST framework(DRF)构建API接口。
  2. 启动一个websocket server,在django project里面, 使用第三方库例如 channels 创建websocket route 来接收ROS节点发过来的图像数据。

4.存储和串流视频

  1. 往往连续的帧会被组织成视频序列。所以在你已经取得每个单独帧之后,你需要考虑如何把这些帧组织起来,并通过网页进行播放。
  2. 可以考虑采用某种串流协议如 MPEG-DASH 或 HLS 等。我不清楚 Django 是否内置了这样的功能,但应该有相应的库可以使用。

5.VUE3前端展示

  1. 利用Vue.js开发前端页面,通过 WebSocket 订阅摄像头捕获的图像流。
  2. 将接收到的图像以视频方式展示出来。HTML5 video player 或者其他第三方video.js library都可以用于实现这一需求。

以上就是整体的流程。具体实施过程中可能还会涉及到一些灵活调整和详细设计,例如错误处理、线程管理等。

GPT整个解决方案的框架和步骤,以及每个步骤的简单介绍,它给出的这个方案也许行得通,但是以我对于机器人开发有限的经验来看,并不是很好,所以我在后面对于这个框架进行了一定程度的修改。由此可见,并不能完全依赖ChatGPT的回答,一定要加以自己的判断。

Message From You:

现在请你给出第一步“从ROS 2节点接收摄像头数据”的详细说明、步骤、命令和代码,记住,要同时思考与其他所有步骤之间的关联性

Message From ChatGPT:

接收ROS 2节点摄像头数据的具体步骤如下:

1.环境准备

确保你已经安装了ros2 foxy和其他必要依赖库,例如 cv_bridge 和 OpenCV。

2.创建一个ROS 2 package

如果还没有创建过,你需要先创建一个新的ROS 2的package。假设我们将它命名为camera_listener. 以下是在终端中创建这个包的相关命令:

 source /opt/ros/foxy/setup.bash  # 配置ros2环境变量
 mkdir -p ~/robot_ws/src  # 创建工作空间和src目录,如果已存在可忽略此步
 cd ~/robot_ws/src
 ros2 pkg create --build-type ament_python camera_listener  # 创建Python类型的ros2包

3.建立ROS 2节点并订阅topic

在camera_listener包中, 创建一个 python 文件(比如 listener.py),用于实现图象获取的 ROS 节点:

import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
 
class CameraListener(Node):
 
    def __init__(self):
        super().__init__('camera_listener')
        self.bridge = CvBridge()
        self.subscription = self.create_subscription(
        Image,
        'image_raw',
        self.listener_callback,
        10)
        self.subscription
 
    def listener_callback(self, msg):
        cv_image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='passthrough')
        # 对cv_image进行处理
 
 
def main(args=None):
    rclpy.init(args=args)
 
    camera_listener = CameraListener()
 
    rclpy.spin(camera_listener)
 
    # Destroy the node explicitly
    camera_listener.destroy_node()
    rclpy.shutdown()
 
 
if __name__ == '__main__':
    main()

这段代码首先导入必要的模块,然后定义了一个CameraListener类,该类继承自Node,它订阅了’image_raw’ topic。每当有消息发布到这个topic时,都会触发listener_callback方法。

注意这里的imgmsg_to_cv2函数就是把ROS image message转为 OpenCV 的格式。

点击我让GPT4为OriginBot开发了一个监控功能 - 古月居可查看全文

相关推荐

3 分钟!AI 从零开发五子棋全过程曝光,网友:这效率我服了

<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8...

一行代码实现display&quot;过渡动画&quot;原理

作者:Peter谭老师转发链接:https://mp.weixin.qq.com/s/XhwPOv62gypzq5MhhP-5vg写本文的起因上篇文章,提到如何让display出现过渡动画,却没有仔...

脑洞:琼恩·雪诺、蝙蝠侠和魔形女的灵魂宠物了解一下

AlekseiVinogradovisaRussianfreelancedigitalartistwhoshareshisskillsandtalentwith120k...

浏览器的渲染机制、重绘、重排

1、什么是重排和重绘网页生成过程:HTML被HTML解析器解析成DOM树css则被css解析器解析成CSSOM树结合DOM树和CSSOM树,生成一棵渲染树(RenderTree)生成布局(flo...

托福写作高频考题写作思路&amp;词汇丨考虫独家

科技话题与媒体话题是托福写作的常考话题很多考生对这两类话题里的专有词汇表达也许很不了解所以今天就跟随考虫托福写作老师刘云龙老师一起来学习在这些话题的写作里你可以使用哪些有用的表达。希望大家有收获!记得...

在优麒麟上使用 Electron 开发桌面应用

使用Web标准来创建桌面GUI,上手快、成本低、跨平台、自适应分辨率,这些都是Electron的优势。作者/来源:优麒麟Electron是由Github开发,用HTML、CSS和...

php手把手教你做网站(三十八)jquery 转轮盘抽奖,开盲盒

抽奖和开盲盒性质一样的都是通过ajax读取后台的随机数据。1、转轮盘本来是想直接绘图实现轮盘,但是没有找到怎么填充文字,只好把轮盘弄成了背景图,通常用于游戏抽道具,商城积分抽奖,公司年末员工抽奖点击抽...

用 CSS 整活!3D 轮播图手把手教学,快乐代码敲出来

兄弟们,今天咱来搞点好玩的——用CSS整一个3D轮播图!咱野生程序员就是要在代码里找乐子,技术和快乐咱都得要!代码是写不完的,但咱能自己敲出快乐来,走起!一、先整个容器,搭个舞台咋先写一个...

实现一个超酷的 3D 立体卡片效 #前端开发

今天我们来实现一个超酷的3D立体卡片效果。正常情况下就是一个普通的图片展示卡片,鼠标悬停的时候图片会跳出卡片,并将影子投射到背景卡片上,在视觉上有一个3D立体感。html主要分成3个部分:容器→背景层...

Vue 3 Teleport与Suspense:解决UI难题的两个&quot;隐藏大招&quot;

模态框的"层级噩梦"与Teleport的救赎"这个模态框怎么又被父容器截断了?"团队协作开发后台系统时,小张第N次遇到这个问题。多层嵌套的组件结构里,弹窗被overfl...

让交互更加生动!有意思的鼠标跟随 3D 旋转动效

今天,群友问了这样一个问题,如下所示的鼠标跟随交互效果,如何实现:简单分析一下,这个交互效果主要有两个核心:借助了CSS3D的能力元素的旋转需要和鼠标的移动相结合本文,就将讲述如何使用纯CSS...

填坑:transform元素导致zindex失效终极方法

今天遇到了使用css3动画的元素层级被放大置顶的问题,ios浏览器上没问题,安卓原生浏览器和安卓微信上有问题。使用了css3动画的元素z-index失效,兄弟元素设置多高的z-index都盖不住解决办...

诡异的层级错乱:一个被transform隐藏的CSS陷阱

周五下午三点十七分,设计部突然发来紧急截图——原本应该悬浮在顶部的导航菜单,此刻正诡异地被下方的轮播图遮挡。我盯着屏幕上错乱的层级关系,手指下意识地敲下z-index:9999,心里清楚这不过是程序...

动画篇--碎片动画

本文授权转载,作者:Sindri的小巢(简书)前言从最开始动笔动画篇的博客,至今已经过去了四个多月。这段时间回头看了看自己之前的动画文章,发现用来讲解动画的例子确实不那么的赏心悦目。于是这段时间总是想...

Nature:大洋转换断层处的拉张构造与两阶段地壳增生

Nature:大洋转换断层处的拉张构造与两阶段地壳增生转换断层是三种基本的板块边界之一,全球总长度超过48000km(Bird,2003),它们的发现为板块构造理论的建立奠定了重要的基础(Wil...