当前位置: 首页 > news >正文

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card

论文标题:RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation
论文作者:Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu
论文链接:https://arxiv.org/abs/2410.07864v1
项目主页:https://rdt-robotics.github.io/rdt-robotics/
论文出处:/
论文被引:/

Abstract

双臂操作由于协调两只机械臂的复杂性(导致多模态动作分布)以及训练数据的稀缺性,开发基础模型极具挑战性。本文提出了用于双臂操作的扩散基础模型 Robotics Diffusion Transformer (RDT)。 RDT 构建在扩散模型的基础上,有效地表征多模态动作分布,并创新性地设计了可扩展的Transformer来处理异质的多模态输入,以学习非线性和高频的机器人数据。为了解决数据稀缺问题,引入了物理可解释的统一动作空间,该空间可以统一各种机器人的动作表示,同时保留原始动作的物理意义,便于学习可迁移的物理知识。凭借这些设计,成功地对迄今为止最大的多机器人数据集完成了参数量最大的基于扩散的机器人操作基础模型 RDT-1.2B 的训练。 最后,在一个自建的多任务双臂数据集上对RDT进行了微调,该数据集包含超过 6K+ episode,以改进其操作能力。真实机器人上的实验表明,RDT 显著优于现有方法。 展示了对未见的物体和场景的零样本泛化,理解并遵循语言指令,只需 1∼5 次演示数据就能学习新技能,并有效地处理复杂、灵巧的任务。

Summary

用于机器人双臂操作的基础模型 1.2B,跟pi0是同期发布的工作,应该不是参数规模最大的了。这个模型的优势是整个DiT骨干上进行扩散过程,相比pi0仅仅在action expert进行扩散,能够统一动作空间。劣势是没办法做多模态推理,对语言指令的语义泛化能力没有使用VLM的pi0好。开源了 6k+ 条的双臂操作数据,功德无量~
在这里插入图片描述

研究背景

当前缺少用于机器人双臂操作的基础模型,主要原因是包含高维动作空间的数据稀缺(可用数据 < 10K episode),硬件成本高,数据采集困难。为了解决这个问题,首先能够使用已有的机器人数据,这些数据可以是单臂机器人的数据,提供一个比较好的start up之后,再使用专门的双臂数据进行微调,并且要具备一定的泛化能力。要达成这个目标,需要解决下述模型层面问题:1)需要一个在表达能力和可扩展性方面非常强大的架构,尤其是对机器人动作空间多模态分布特性的建模能力;2)能够有效地处理多模态的异质数据,包括文本、图像和动作(不同机器人本体、不同机器人观测空间等等);3)能够高效稳定地在大规模数据上进行训练。

方法介绍

本文提出了一个具备强大泛化能力的双臂操作基础模型 Robotics Diffusion Transformer (RDT),其以 DiT 作为骨干网络,这使得其具备对复杂动作分布的建模能力,精心设计了多模态编码器,以消除模态间的异质性。

  • 为了适配机器人动作的高频变化和非线性动力学,针对DiT做了优化,主要包括MLP解码,改进的归一化方法和交替条件注入(alternating condition injecting)。
  • 为了能够在异质数据上训练,设计了可解释的统一动作空间,这是一个用于具有夹爪机器人的统一动作格式,可以在保留原始操作物理语义的前提下,缓解不同机器人动作空间配置的冲突,从而学习跨机器人本体的课泛化的物理世界知识。

问题描述

机器人本体:松灵 ALOHA 双臂机器人,通过遥操作收集数据,包括两个二指夹爪,两个腕部相机和第三视角相机
在这里插入图片描述
在这里插入图片描述

解决的问题:以语言为条件的双臂视觉操作任务,在家居场景具有重要价值。给定语言指令 l,和 t 时刻的观测信息 ot(包括:相机的历史序列长度为T的RGB输入x,机器人低维的本体感受信息 zt,以及控制频率 c),模型需要生成动作 at 来控制双臂实现 l 指定的目标。注意,动作 at 通常是本体感受信息 zt+1的子集。

一个典型的双臂操作任务涉及的元素:

  • 一个技能:例如,抓取,擦拭等
  • 一个物体:例如,瓶子,桌子等
  • 一个场景:任务发生的场景
  • 一个关于如何执行技能的模态描述:例如用左手臂拿起瓶子

对于一个新任务,需要模型能够泛化到训练数据未出现过的元素。本文的的目标是训练一个适用于双臂操作机器人的基础模型 RDT 实现上述元素的泛化。注意,是利用多种机器人数据增强双臂操作的泛化能力,而非训练一个跨机器人本体泛化的基础模型。

需要解决两个问题:

  1. 如何设计强大的模型架构?
  2. 如何针对异质的数据训练?

模型架构

什么是机器人动作的多模态特性?给定语言指令和观测信息,可能存在多条可以执行的机器人动作轨迹来执行任务。如果是确定性映射的方式,模型会学习动作分布的平均值,从而导致无法完成任务。而如果使用连续条件分布建模,比如基于扩散模型,则可以解决这个问题。但随之而来的是原生的DiT架构建模的是图像和视频,并且在时间和空间上是连续的,帧与帧之间的变化是增量的。然而,机器人相关的低维动作模态等物理量是非线性的并且是高频变化的,这些特性源于注入碰撞、约束和材料阻尼等物理交互产生。此外,还可能由于传感器不可靠导致存在数值不稳定的问题。

基于扩散的动作建模

两点需要注意:去噪过程在整个网络进行,可以学习到统一的动作空间;预测的是 action trunk 而非单点的action。
在这里插入图片描述

异质多模态输入编码

异质性体现在模态的格式、维度数量和信息量(编码后的token)方面。为了解决这个问题,需要将不同的模态编码到一个统一的隐空间中,使用的编码器如下:

  • 低维输入:包括机器人诶本体感受信息,动作块、控制频率,使用带有傅立叶特征的 MLP 编码捕获低维空间中的高频变化
  • 图像输入:使用 SigLIP 从图像中提取高维的、包含丰富的空间和语义信息
  • 语言输入:使用 T5-XXL 从语言中提取长度变化、高度抽象、模糊和复杂的信息

小的trick:不同模态输入可能包含非常不同的信息量,比如第三视角相机捕获的全局视图的图像包含的信息量多于腕部相机捕获的图像,为了避免模型只关注全局视图走捷径而忽略腕部相机视图,从而失去感知深度的能力,在编码过程中以一定概率随机地对每个多模态输入进行mask,以防止模型过度依赖特定输入。

DiT骨干网络改进

对 DiT 的三个改进:

  • QKNorm 和 RMSNorm:为了解决机器人物理量的数值不稳定导致的梯度不稳定和数值溢出问题,在计算attention时,增加了 QKNorm。action prediction本质上可以看作一个时间序列预测问题,而原始DiT 中的LayerNorm中的centering 操作会导致 token shift 和 attention shift 从而破坏时间序列的对称性。因此,替换为了 RMSNorm。图 4 可以看出,如果没有这种修改,预训练会非常不稳定,并且可能导致梯度爆炸。
  • MLP解码器:为了提高对非线性的机器人动作的建模能力,将现行解码器替换为非线性MLP解码器,作为从隐空间到物理空间的投影。图 4 可以看出,如果没有这个改进,RDt 无法有效地捕获非线性动态,从而导致无法完成需要精细操作的灵巧操作任务。
  • Alternating Condition Injection (ACI):RDT中的图像和语言输入作为条件,是高维的,并且长度可变,这与传统 DiTs 中的类别标签条件不同。这些信息丰富的条件难以压缩成单个 token,使得原始的 adapter layer 的 norm 方法不适用。因此,采用交叉注意力来适应不同长度的条件,避免在进一步压缩时造成信息丢失。此外,由于图像通常远多于文本token,同时注入两种模态往往会掩盖文本相关信息,从而削弱指令遵从能力(图 4)。 为了缓解这个问题,在 successive layer 的交叉注意力中交替注入图像和文本token,而不是在每一层都注入

数据构建

统一的动作空间

为了能够在异构多机器人数据上进行训练,需要一个在各种机器人之间共享的统一动作空间,它可以为多机器人动作提供统一的格式。 从机器人的原始动作空间到统一动作空间的映射应该是物理上可解释的,其每个维度都应该具有明确的物理意义。这可以使得模型从不同的机器人数据中学习共享的物理规律,从而提高从不同机器人数据中学习的效率。

如图 3 左侧所示,通过将原始动作向量中的每个元素根据其物理意义填充到统一动作空间向量的对应位置来将机器人的动作空间嵌入到这个统一空间中,剩余位置则用填充值填充(表 4 列出了具体的含义)。在这个统一空间下,能够利用几乎所有带夹爪的现代机器人的数据上预训练 RDT,并极大地扩展数据规模,以满足基础模型的要求。 预训练数据包含 46 种不同机器人的数据集(表 6),总规模为 1M+ 条轨迹,共计 21TB。
在这里插入图片描述
在这里插入图片描述

双臂操作任务数据收集

高质量的微调数据集对于模型性能至关重要。从三个方面确保数据集的高质量:

  1. 在数量方面,收集了 6K+ 条轨迹,是目前最大的双臂数据集之一;
  2. 在全面性方面,考虑了 300+ 个具有挑战性的任务,涵盖了从抓取和放置到连接电缆等大多数操作任务类型,甚至包括书写数学方程;
  3. 在多样性方面,准备了 100+ 个物体,包括不同尺寸和纹理的刚性和非刚性物体,以及 15+ 个不同照明条件的不同房间
    此外,进一步利用 GPT-4-Turbo 来重写人工标注的指令,以增加文本多样性。
    在这里插入图片描述

消融实验

实验设置

旨在通过真实机器人实验回答以下问题:

Q1: RDT 的零样本泛化能力是否可以泛化到未见的物体和场景?

Q2: RDT 的零样本指令遵循能力对未见的模态的有效性?

Q3: RDT 能否促进对未见的技能的少样本学习?

Q4: RDT 是否能够完成需要精细操作的任务?

Q5: 大模型参数、大数据量和扩散模型对 RDT 的性能有帮助吗?

  • RDT (ours): the original RDT.
  • RDT (regress): RDT without diffusion modeling. It models the deterministic mapping (ℓ,𝒐t)↦𝒂t.
  • RDT (small): RDT without large parameters. It has only 166M parameters.
  • RDT (scratch): RDT without pre-training. It is trained from scratch during fine-tuning.

研究任务:一共7个,来评估 RDT 从不同维度的泛化能力和功能,包括模型在现实世界任务中可能遇到的复杂场景,例如各种未见的元素和灵巧的操作。如图5和表1所示。
在这里插入图片描述
在这里插入图片描述
数据量:

  • Wash Cup: 133 demos for seen cups combined and 0 demos for unseen cups;
  • Pour Water: 350 demos for seen rooms combined and 0 demos for unseen rooms;
  • Pour Water-L-1/3 & Pour Water-R-2/3: 18 demos for the water level of little, 19 demos for half, and 19 demos for full;
  • Handover: 5 demos; Fold Shorts: 1 demo;
  • Robot Dog: 68 demos.

模型训推:

  • 训练:48 个 H100 GPU,一个月,1M steps
  • 微调:48 个 H100 GPU,三天,130K steps

模型推理:

  • 框架:DPM-Slover++
  • RTX 4090 24GB GPU 推理频率 6Hz Action Trunk,381 Hz Actions

测试配置:

  • Wash Cup is tested with 8 trials for each cup (one seen cup, two unseen cups, 24 trials in total).
  • Pour Water is tested with 8 trials for each room (three unseen rooms, 24 trials in total).
  • Pour Water-L-1/3 and Pour Water-R-2/3 are tested with 8 trials each.
  • Handover, Fold Shorts, and Robot Dog are tested with 25 trials each.

实验分析

在这里插入图片描述
在这里插入图片描述

从表 3 的结果可以看出,RDT 始终优于其他基线方法。 这是因为 RDT 使用强大的网络架构与扩散相结合,能够准确地对多模态动作的分布进行建模,而离散化和 VAE 分别缺乏准确性和表达能力。 此外,大规模预训练后的大量参数提供了大量的先验知识,这极大地提高了泛化能力。 下面是详细分析:

Q1 & Q2: RDT 可以零样本泛化到未见的物体、场景和模态。 在 Wash Cup 和 Pour Water 任务中,RDT 仍然可以在未见的场景中取得很高的成功率,其性能与可见场景中的性能相差无几。 相反,其他基线方法甚至无法完成整个任务。 在 Pour Water-L-1/3 和 Pour Water-R-2/3 中,从图 5 或图 10 可以发现,RDT 精确地理解了要操纵哪只手以及要倒多少水,并通过其动作严格遵循指令,即使它从未见过像“三分之一”或“三分之二”这样的词正是因为大规模预训练,RDT 已经看到了大量的不同物体、场景和指令,从而导致了如此强大的零样本泛化

Q3: RDT 仅使用少量样本就可以学习新技能。 在 Handover 和 Fold Shorts 中,RDT 通过少样本学习学习了新的复杂技能,即移交和折叠,其动作模式与已知技能非常不同,而其他模型的成功率几乎为零。 这种改进也归因于大规模预训练。 少样本学习可以帮助 RDT 快速适应新的工作环境,这对实际应用具有重大意义

Q4: RDT 可以处理灵巧的任务。 在 Robot Dog 中,RDT 在推动操纵杆时准确地控制角度,而其他机器人则会导致机器狗偏离。这是因为扩散,可以对多模态和非线性动作的分布进行建模,从而使动作精度能够满足灵巧任务的要求。 操纵杆和遥控器都是黑色的,使得操纵杆在视觉上不明显。这可能会导致 ACT 容易发生故障。 相比之下,大规模预训练使 RDT 学习了更好的操纵杆概念的视觉语言表示,提高了识别能力

Q5: 大型模型尺寸、大量数据和扩散都是我们取得优异成绩的重要因素。 在表 2 中,如果没有这些因素,性能会严重下降。RDT (scratch) 在未见的物体和场景上的表现很差,这表明预训练的知识对于泛化至关重要

实验结论

本文提出了 RDT 来解决可泛化双臂操作中数据稀缺和操作复杂性增加的挑战,RDT 是一种基于扩散的语言条件视觉运动模仿学习基础模型(diffusion-based foundation model for language-conditioned visuomotor imitation learning)。 RDT 是在一个广泛的多机器人数据集上预训练的,并在一个自收集的双臂数据集上微调。引入了可解释的统一动作空间,以统一不同机器人之间的动作表示,增强了鲁棒性和可迁移性。RDT 超越了现有方法,不仅在灵巧的双臂能力和指令遵循方面表现出显著改进,而且在少样本学习和对未见物体和场景的零样本泛化方面也取得了卓越的性能。

相关文章:

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card 论文标题&#xff1a;RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者&#xff1a;Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接&#xff1a;https://arxiv.org/ab…...

C基础寒假练习(7)

一、有 1、2、3、4个数字&#xff0c;能组成多少互不相同且无重复的三位&#xff1f; 都是多少&#xff1f; #include <stdio.h> int main() {// 定义数字数组int digits[] {1, 2, 3, 4};int n sizeof(digits) / sizeof(digits[0]);// 嵌套循环遍历所有排列for (int …...

Ajax:重塑Web交互体验的人性化探索

在数字化时代&#xff0c;网页的交互性和响应速度已成为衡量用户体验的关键指标。Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;&#xff0c;作为前端与后端沟通的桥梁&#xff0c;凭借其异步通信的能力&#xff0c;极大地提升了网页的动态性和用户友好度&…...

【DeepSeek背后的技术】系列二:大模型知识蒸馏(Knowledge Distillation)

目录 1 引言2 操作步骤和公式说明2.1 准备教师模型&#xff08;Teacher Model&#xff09;和学生模型&#xff08;Student Model&#xff09;2.2 生成软标签&#xff08;Soft Labels&#xff09;2.3 定义蒸馏损失函数2.4 训练学生模型2.5 调整超参数2.6 评估与部署 3 其他知识蒸…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.14 内存映射:处理超大型数组的终极方案

2.14 内存映射&#xff1a;处理超大型数组的终极方案 目录 #mermaid-svg-G91Kn9O4eN2k8xEo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-G91Kn9O4eN2k8xEo .error-icon{fill:#552222;}#mermaid-svg-G91Kn9O4eN2k…...

【C++】STL——vector的使用

目录 &#x1f495;1.vector介绍 &#x1f495;2.vector的基本用法 &#x1f495;3.vector功能的具体用法 &#xff08;讲解&#xff09; &#x1f495;4.vector——size&#xff0c;capacity函数的使用 &#xff08;简单略讲&#xff09; &#x1f495;5.resize&#xff…...

springboot/ssm互联网智慧医院体检平台web健康体检管理系统Java代码编写

springboot/ssm互联网智慧医院体检平台web健康体检管理系统Java代码编写 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&am…...

介绍一下Mybatis的Executor执行器

Executor执行器是用来执行我们的具体的SQL操作的 有三种基本的Executor执行器&#xff1a; SimpleExecutor简单执行器 每执行一次update或select&#xff0c;就创建一个Statement对象&#xff0c;用完立刻关闭Statement对象 ReuseExecutor可重用执行器 可重复利用Statement…...

Wide Deep 模型:记忆能力与泛化能力

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 Wide & Deep 模型是一种结合了线性模型&#xff08;Wide&#xff09;和深度神经网络&#xff08;Deep&#xff09;的混…...

Hot100之矩阵

73矩阵置零 题目 思路解析 收集0位置所在的行和列 然后该行全部初始化为0 该列全部初始化为0 代码 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length;int n matrix[0].length;List<Integer> list1 new ArrayList<>();List<…...

Python语言的安全开发

Python语言的安全开发 引言 在信息技术迅速发展的今天&#xff0c;网络安全问题愈发凸显。随着Python语言的广泛应用&#xff0c;尤其是在数据分析、人工智能、Web开发等领域&#xff0c;其安全问题越来越受到重视。Python作为一门高效且易于学习的编程语言&#xff0c;虽然在…...

蓝桥杯刷题DAY3:Horner 法则 前缀和+差分数组 贪心

所谓刷题&#xff0c;最重要的就是细心 &#x1f4cc; 题目描述 在 X 进制 中&#xff0c;每一数位的进制不固定。例如&#xff1a; 最低位 采用 2 进制&#xff0c;第二位 采用 10 进制&#xff0c;第三位 采用 8 进制&#xff0c; 则 X 进制数 321 的十进制值为&#xff…...

java项目验证码登录

1.依赖 导入hutool工具包用于创建验证码 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.2</version></dependency> 2.测试 生成一个验证码图片&#xff08;生成的图片浏览器可…...

手写MVVM框架-环境搭建

项目使用 webpack 进行进行构建&#xff0c;初始化步骤如下: 1.创建npm项目执行npm init 一直下一步就行 2.安装webpack、webpack-cli、webpack-dev-server&#xff0c;html-webpack-plugin npm i -D webpack webpack-cli webpack-dev-server html-webpack-plugin 3.配置webpac…...

2025年2月2日(网络编程 tcp)

tcp 循环服务 import socketdef main():# 创建 socket# 绑定tcp_server socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_server.bind(("", 8080))# socket 转变为被动tcp_server.listen(128)while True:# 产生专门为链接进来的客户端服务的 socketprint(&qu…...

【Docker项目实战】使用Docker部署MinIO对象存储(详细教程)

【Docker项目实战】使用Docker部署MinIO对象存储 前言一、 MinIO介绍1.1 MinIO简介1.2 主要特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载MinIO镜像五、…...

使用ollama本地部署Deepseek r1

1、下载ollama 在浏览器地址输入&#xff1a;https://ollama.com/ 选择windows版本的下载 2、安装ollama 3、运行ollama 安装完成后&#xff0c;打开命令行工具win r 在命令行输入&#xff1a;ollama 4、使用ollama下载并部署Deepseed r1 在ollama网站&#xff0c;下载…...

Unity飞行代码 超仿真 保姆级教程

本文使用Rigidbody控制飞机&#xff0c;基本不会穿模。 效果 飞行效果 这是一条优雅的广告 如果你也在开发飞机大战等类型的飞行游戏&#xff0c;欢迎在主页搜索博文并参考。 搜索词&#xff1a;Unity游戏(Assault空对地打击)开发。 脚本编写 首先是完整代码。 using System.Co…...

DeepSeek蒸馏模型:轻量化AI的演进与突破

目录 引言 一、知识蒸馏的技术逻辑与DeepSeek的实践 1.1 知识蒸馏的核心思想 1.2 DeepSeek的蒸馏架构设计 二、DeepSeek蒸馏模型的性能优势 2.1 效率与成本的革命性提升 2.2 性能保留的突破 2.3 场景适应性的扩展 三、应用场景与落地实践 3.1 智能客服系统的升级 3.2…...

使用 sunshine+moonlight 配置串流服务无法使用特殊键

最近了解到串流技术&#xff0c;使用的方案是 sunshine 为串流服务端&#xff0c;moonlight 为客户端&#xff0c;分别在 ipad&#xff0c;android&#xff0c;tv 端安装。 存在的问题 不管说什么平台都会有特殊键无法使用的问题&#xff0c;最初我发现在安卓电视&#xff0c…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...