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

AnyPlace:学习机器人操作的泛化目标放置

25年2月来自多伦多大学、Vector Inst、上海交大等机构的论文“AnyPlace: Learning Generalized Object Placement for Robot Manipulation”。

由于目标几何形状和放置的配置多种多样,因此在机器人任务中放置目标本身就具有挑战性。为了解决这个问题,AnyPlace,一种完全基于合成数据训练的两阶段方法,能够预测现实世界任务中各种可行的放置姿势。其关键见解是,通过利用视觉-语言模型 (VLM) 来识别粗略的放置位置,只关注与局部放置相关的区域,这样能够训练低级放置-姿势-预测模型,以有效捕捉不同的放置位置。为了进行训练,生成一个完全合成的数据集,其中包含不同放置配置(插入、堆叠、悬挂)中随机生成的目标,并训练局部放置-预测模型。其在模拟中进行广泛的评估,证明在成功率、可能的放置模式覆盖率和精度方面都优于基线。在现实世界的实验中,展示如何将纯粹基于合成数据训练的模型直接迁移到现实世界,它可以在其他模型难以应对的场景中成功执行放置 - 例如具有不同的目标几何,多种放置模式以及实现精细放置的高精度。

如图所示机器人执行 AnyPlace 方法:

添加图片注释,不超过 140 字(可选)

放置目标是人类在日常生活中毫不费力完成的一项基本任务,从将物品摆放在桌子上到将电缆插入插座。另一方面,让机器人执行这样的任务往往极具挑战性。挑战来自于不同放置任务的各种约束以及泛化到未见过目标的难度。现有方法通常是针对特定任务的,对单个放置任务使用大量演示,例如将目标挂在架子上 [28],希望机器人可以推广到未见过的目标。或者,少样本方法,专注于仅使用少量演示来学习目标放置,旨在让模型在类似目标和设置的随机初始配置中复制相同的放置操作。

学习不同的目标放置,对现有模型提出了重大挑战,主要是因为泛化难度大。泛化可以分为两个方面:目标级和任务级。目标级泛化侧重于开发各种目标和放置配置的鲁棒表示,使模型能够有效地处理未见过的目标。任务级泛化涉及模型根据给定点云预测不同放置配置的能力。此外,预测多模态放置输出(涵盖一系列有效位置和模式)仍然具有挑战性,尤其是在存在多个可行解决方案的情况下。例如,机器人将小瓶插入小瓶板上的许多空槽之一。现有方法 [26、3、27、21、24、23、9、6、15、14] 通常在少样本学习框架内运行,其中它们学习涉及两个特定目标的特定放置,导致对不同任务和目标类型的泛化能力较差。相比之下,RPDiff [28] 使用相对较大的数据集针对三种放置场景(例如,架子上的杯子、书架上的书、罐头堆叠)训练单独的模型,展示一定程度的类内目标级泛化,但其对新任务的泛化尚未研究。
机器人操作中的目标拾取和放置。机器人拾取和放置问题通常以两种方式表述:目标重排列和直接末端执行器姿势预测。在目标重排列中,目标是训练一个模型来预测目标从其初始姿势到其最终放置姿势的相对变换。假设抓取姿势由现有模型生成,将预测的相对变换与抓取姿势相乘来计算末端执行器的最终放置姿势。在这种情况下,许多工作都侧重于预测两个目标的明确任务相关特征,然后通过优化或回归求解相对姿势。具体而言,神经描述子场 (NDF) 系列论文 [26, 3, 27] 学习点云的占用场作为表示。然后,使用附加到放置目标的一组预定义关键点与目标物体的占用特征场进行交互并对其进行查询。通过将每个点的查询特征与演示期间收集的特征进行匹配,可以确定最佳目标变换。 TaxPose [21] 利用基于 Transformer 的交叉注意来预测两个目标之间的对应点,并使用可微分奇异值分解 (SVD) 来求解相对变换。为了保证放置-姿势-预测模型对 SE(3) 变换,即 SE(3) 等变,具有鲁棒性,方法 [24、23、9] 明确预测目标点云的点类型 0 和类型 1 特征,然后解决一个优化问题,其基于演示将这些特征对齐到特定配置中。所有这些方法都在少样本设置下运行,并且可以在给定两个目标的情况下预测单个放置姿势。对于模型来说,捕捉和预测放置姿势的分布至关重要,因为由于运动学限制,机器人并非能够实现每个放置姿势。相比之下,RPDiff [28] 在大型数据集上训练具有扩散机制的 Transformer,逐渐对目标放置姿势进行去噪。然而,他们的实验表明,可能的放置位置的覆盖范围并不完整。扩散过程中固定-大小的裁剪机制可能也难以泛化到不同尺寸的目标。此外,最近的一项研究 [5] 在模拟中对多个稳定位置进行采样,并使用 VLM 根据语言查询选择适当的模式。虽然这些模式是离散的,但每种模式都允许目标沿其对称轴旋转,从而产生形成连续分布的有效放置姿势。

拾取-和-放置任务的另一种方法,是直接预测机器人的末端执行器姿势。M2T2 [33] 和 Pick2Place [12] 专注于杂乱场景中的平面目标放置。M2T2 [33] 采用多任务 transformer,带有单独的解码器来预测每个离散旋转 bin 的抓取姿势和放置位置 affordance 图。其他工作,如 Pick2Place [12],专注于预测关键的末端执行器姿势以完成特定任务。 RVT [10] 和 RVT-2 [11] 也利用了Transformer,利用场景的多视图 RGB 图像来预测机器人下一个末端执行器位置的热图。另一方面,由粗到细的 Q-attention [16] 利用场景的体素来识别当前分辨率下最有趣的空间点。该点将成为下一步细化步骤的体素质心,使模型能够收集更准确的 3D 信息。

机器人操作中的多模态预测。考虑一个以各种姿势挂在架子上不同挂钩上的杯子。放置姿势的多模态在操作中很常见。最近,行为克隆方法的进展,例如基于能量的 IBC 模型 [8] 和扩散策略 [2],试图捕捉这种多模态性。具体来说,对于扩散策略,它学习从随机噪声分布开始对​​动作轨迹进行去噪,从而使模型能够捕捉可能解决方案的分布。对这些分布进行建模的另一种方法是通过变分自动编码器 (VAE)。例如,行为 Transformer(BeT) [25] 和 VQ-Bet [17] 训练一个 VQ-VAE [30],将连续动作离散化并编码为潜表示,从而更容易处理多模态和高维行为数据。为了根据图像输入训练整个策略,他们采用基于 Transformer 的模型以及 VAE 解码器来预测动作序列。作者证明,他们的方法在常见基准上优于扩散策略 [2]。

为了让机器人能够在场景中执行不同的目标放置,将放置姿势预测问题分解为两个子任务:高级放置位置建议任务和低级细粒度放置姿势预测任务。对于高级任务,结合了视觉-语言模型,该模型经过训练可根据给定的文本提示输出图像中的 2D 关键点位置。然后可以提取候选放置位置周围的一小块局部区域并将其转发到低级姿势预测模型。这样通过使用更小的点云作为输入,大大简化低级姿势预测问题,并且有助于泛化,因为局部区域之外的任何特征都不会影响预测。这样能够专注于有限的一组一般放置类型并利用完全合成的数据集,但最终模型在广泛的现实世界放置任务中有效。

AnyPlace 放置姿势预测方法的概述如图所示:

添加图片注释,不超过 140 字(可选)

问题设置。制定目标放置任务来预测相对变换。具体来说,给定一个输入元组 {D, I},其中 D 表示放置任务的语言描述,I 是场景的 RGBD 图像,目标是预测一组刚性变换 {T_n},将目标物体 C 从其当前位置移动到基物体 B 上所有满足语言条件 D 的可行放置位置。假设抓握姿势 T_grasp 由一个抓握预测模型提供,最终末端执行器姿势 T_place 可以使用初始目标姿势和其最终放置姿势之间的预测相对变换来计算,即 T_place = T_nT_pick。

VLM 引导的放置位置预测

当目标具有多个潜在放置位置时,现有模型在以端到端方式进行训练时通常难以捕捉所有这些离散位置。为了解决这个问题,利用 VLM 的最新进展来直接识别放置位置,VLM 已展示出基于语言描述在图像中定位点和区域的能力。具体而言,给定放置任务 D 的语言描述和 RGBD 图像 I,旨在提取目标物体 P_c 的点云和基物体 P_b_crop 的局部感兴趣区域。利用 Molmo [4] 将所有潜在放置位置检测为图像空间中的关键点,例如指定可以将小瓶插入小瓶盘的所有位置。这种方法使低级姿势预测模型能够专注于学习两个物体的不同放置配置并预测放置姿势,而无需明确捕捉多个放置位置。

首先,提取目标物体 C 和基物体 B 的分割掩码。为此,首先查询 VLM 以获取图像中每个物体的点位置,然后将这些点传递给分割模型以获取分割掩码。这样能够在物体选择中进行复杂的语言调节(例如,“蓝色小瓶”、“秤前面的小瓶架”等)。接下来,再次在基物体 B 上查询 VLM 以找到放置的所有离散模式(如图所示)。对于图像中每个已识别的点,提取点云中的局部区域并将其用作姿势预测模型的输入。

添加图片注释,不超过 140 字(可选)

在处理具有多种可能放置姿势的不同物体时,明确识别放置模式(而不是依赖模型探索整个物体的放置)更可靠、更实用。此外,由于高级模块建立在通用 VLM 上,因此系统可以处理不同的放置并执行复杂的语言调节。具体来说,这样能够进行复杂的语言调节:(1) 选择放置哪个物体;(2) 选择将其放置在哪个物体上;(3) 选择在该物体上执行放置的位置。这样其保证即使在放置的物体很大或难以分割时也能有效发挥作用。这是因为无论物体的大小如何,模块始终都会输出潜在放置位置周围的一个小的局部区域。

细粒度放置姿势预测

给定来自高级模块的点云 P_c 和 P_b_crop,低级姿势预测模型仅专注于学习不同的局部放置安排,而无需捕获不同放置位置的分布。直觉是,借助庞大的合成数据集,该模型应该能够有效地捕获基于物体几何形状不同放置配置的关键表示,这使其能够泛化到未见过物体并对噪声数据保持稳健。仅将局部区域作为输入,姿势预测模型应该能够实现更好的精度,这在许多相关的放置任务中至关重要。

用离散的时间步长预测扩散过程中的相对变换。从两个物体点云开始,扩散过程迭代地对相对变换进行去噪,逐渐将放置的物体移向其最终姿势。首先,使用随机变换 T_init = (R,t) 变换物体点云 P_c 以获得 P_c(0) ,其中 R 在 SO(3) 空间上随机采样,t 在裁剪放置区域的边框内采样:P_c^(0)=T_init P_c,其中 T_init = (R, t)。

在每个去噪时间步 t,P_c(t) 和 P_b_crop 都会输入到编码器中。具体来说,两个点云首先使用最远点采样 (FPS) 方法下采样到 1024 个点,并归一化为单位立方体的大小。下采样的点云,通过线性层提取潜特征,随后将其与用于识别相应点云的 one-hot 向量连接起来。然后,这些组合特征由 Transformer 编码器 [31, 1] 处理,其中应用自注意层来有效地从点云中提取特征。然后,利用交叉注意层和池化层进一步聚合这些特征,从而生成一个统一的特征表示,以捕获两个物体之间的空间关系。在解码器中,首先获得扩散时间步 t 的正弦位置嵌入。最后,将联合点云特征表示与编码的时间步一起输入到 MLP 层中,预测由旋转 R 和平移 t 组成的相对变换 T_n(t),以细化物体的姿势。然后对目标物体点云进行相应的变换,然后继续进行下一个去噪步骤,因为 P_c(t-1) = T_n^(t) P_c^(t)。将物体从其初始位置转换为放置姿势的完整变换 T_n,是通过扩散步骤预测的所有增量变换乘积。

在训练期间,执行 5 个去噪步骤。不是像通常的做法 [13] 那样在前向过程中逐渐向输入添加高斯噪声,而是手动定义在每个时间步添加的噪声。在本文例子中,噪声是模型预测的相对变换。具体而言,中间的真值相对变换 T_n,GT(t) 是通过线性插值平移并使用球面线性插值 (SLERP) 来采样物体的初始姿势和最终放置姿势之间的旋转而生成的。在推理过程中,通过多次采样扩散模型来生成不同的放置姿势,每次都从随机变换的初始物体点云 P_c^(0) 开始。在测试时执行大量的去噪步骤,通过重复最后的去噪步骤更多次,总共是 50 个去噪步骤。

在训练期间的每个扩散步骤中,给定真值 T_n,GT(t) 和预测值 T_n^(t),用 L1 距离作为平移损失 L_translation。对于旋转,测量真值和预测旋转之间的测地距离。此外,在由真值姿势和预测姿势转换的点云之间应用 Chamfer 损失。

机器人拾取和放置执行

确定放置姿势后,实施拾取和放置流水线来操纵物体并将其准确定位在目标姿势上。具体来说,利用 AnyGrasp [7] 为目标物体 C 找到可行的抓取,并使用 cuRobo [29] 作为运动规划器来执行无碰撞放置。对 (T_place , T_pick) 对执行拒绝采样,为模型预测的特定放置姿势,识别有效的抓取,由机器人执行。

抓取检测,从一个RGBD 图像中提取的目标物体点云 P_c 开始。 AnyGrasp [7] 随后处理生成的点云,以确定按置信度排序的最佳抓取候选点。为了拾取物体,夹持器首先移动到预抓取姿势,沿夹持器 z 轴距离目标 10 厘米。然后,夹持器沿直线接近目标,同时保持其方向。同样,在放置过程中,机器人首先移动到预放置姿势,然后在不改变夹持器方向的情况下进行最终接近。根据物体的大小调整从预放置姿势到最终放置姿势的距离,以避免在过渡到预放置位置时发生碰撞。在定义路点和末端执行器方向约束后,用 cuRobo 生成完整的机器人拾取和放置运动规划。

构建合成数据集的目的,是捕获广泛的局部放置安排。现有模型使用一些非常具体的任务(例如将书插入书架)来简单地评估其模型在给定此类任务的放置数据用于训练时的效果 [33, 12, 32]。

另一方面,目标不仅是使用数据集来评估所提出的模型,而且要构建表示各种类型的放置(堆叠、悬挂、插入)的模型,如图所示。姿势预测模型的局部性质使这项任务变得容易得多,并能够构建一个可以泛化到各种现实世界放置任务的数据集。

添加图片注释,不超过 140 字(可选)

数据生成流水线由两个主要组件组成:目标生成和放置姿势生成。具体来说,用 Blender 程序化地生成 3D 目标,例如钉子、孔、杯子、架子、烧杯、小瓶和小瓶架。目标参数(包括高度、宽度、长度和边数)是随机的,以增加可变性。对于架子和小瓶板,还将杆和孔的数量随机化。此外,沿 x、y 和 z 轴应用随机缩放以进一步增强多样性。

为了确定目标的稳定位置,用 NVIDIA IsaacSim 确定三种配置的目标放置姿势:堆叠、插入和悬挂。在每次试验开始时,随机抽取两个目标并将其加载到模拟中。由于所有目标都是程序生成的,并且在生成过程中已知可能的放置位置(例如,小瓶板上每个孔的中心),因此可以轻松确定放置目标的理想放置位置。这种方法可以找到目标放置位置,以最大化目标在最终放置配置中的间隙。对于目标放置旋转,然后沿其对称轴随机采样以探索各种放置姿势。设置四个摄像头来捕捉密集的目标点云并渲染 RGBD 图像。该数据集涵盖现实生活中遇到的广泛放置场景。总共创建 13 个类别的 1489 个目标,并生成 5370 个放置姿势。

训练细节

在完整数据集的子集上独立训练每个模型,根据放置配置的类型进行拆分,并在组合数据集上进行训练(称为“多任务”变型)。虽然类似的方法通常针对单个任务进行训练(例如 [28]),但目标是构建一个能够执行多种放置任务的单个模型。所有单任务模型都经过三天的训练,而多任务模型则在单个 NVIDIA A100 GPU 上经过五天的训练。

相关文章:

AnyPlace:学习机器人操作的泛化目标放置

25年2月来自多伦多大学、Vector Inst、上海交大等机构的论文“AnyPlace: Learning Generalized Object Placement for Robot Manipulation”。 由于目标几何形状和放置的配置多种多样,因此在机器人任务中放置目标本身就具有挑战性。为了解决这个问题,An…...

2025icpc(Ⅱ)网络赛补题 GL

题意: 给定Alice和Bob的每一轮的概率p0,p1 给定Alice和Bob的初始数字x,y。 对于每一轮: 如果Alice获胜,则bob的数字y需要减去x。(如果y≤0,Alice获胜)如果Bob获胜,则Alice的数字x需要减去y。…...

51c大模型~合集112

我自己的原文哦~ https://blog.51cto.com/whaosoft/13267449 #Guidance-Free Training (GFT) 无需引导采样,清华大学提出视觉模型训练新范式 引导采样 Classifier-Free Guidance(CFG)一直以来都是视觉生成模型中的关键技术。然而最近&am…...

Rust 文件读取:实现我们的 “迷你 grep”

1. 准备示例文件 首先,在项目根目录(与 Cargo.toml 同级)下新建一个名为 poem.txt 的文件。示例内容可参考 Emily Dickinson 的诗: Im nobody! Who are you? Are you nobody, too? Then theres a pair of us — dont tell! Th…...

【Unity3D】Jenkins Pipeline流水线自动构建Apk

目录 一、准备阶段 二、创建Pipeline流水线项目 三、注意事项 一、准备阶段 1、安装tomcat 10.0.5 Index of apache-local/tomcat/tomcat-10 2、安装jdk 17 Java Archive Downloads - Java SE 17.0.13 and later 3、下载Jenkins 2.492.1 (.war)包 War Jenkins Packa…...

信息收集-Web应用备案产权Whois反查域名枚举DNS记录证书特征相似查询

知识点: 1、信息收集-Web应用-机构产权&域名相关性 2、信息收集-Web应用-DNS&证书&枚举子域名 企业信息 天眼查 https://www.tianyancha.com/ 企业信息 小蓝本 https://www.xiaolanben.com/ 企业信息 爱企查 https://aiqicha.baidu.com/ 企业信息 企查…...

结合实际讲NR系列2—— SIB1

这是在基站抓取的sib1的一条信令 L3MessageContent BCCH-DL-SCH-Messagemessagec1systemInformationBlockType1cellSelectionInfoq-RxLevMin: -64q-QualMin: -19cellAccessRelatedInfoplmn-IdentityListPLMN-IdentityInfoplmn-IdentityListPLMN-IdentitymccMCC-MNC-Digit: 4MC…...

绿虫仿真软件如何预测组件衰减对收益的影响?

绿虫仿真软件通过其精细化的算法模型,能够有效预测组件衰减对光伏电站收益的影响,主要体现在以下几个方面: 1. 数据基础与模型构建 历史数据分析:绿虫软件整合了长达20年的历史数据,涵盖气象、地理、组件型号、逆变器…...

本地部署DeepSeek集成VSCode创建自己的AI助手

文章目录 安装Ollama和CodeGPT安装Ollama安装CodeGPT 下载并配置DeepSeek模型下载聊天模型(deepseek-r1:1.5b)下载自动补全模型(deepseek-coder:1.3b) 使用DeepSeek进行编程辅助配置CodeGPT使用DeepSeek模型开始使用AI助手 ✍️相…...

07贪心 + 动态规划(D1_基础学习)

目录 讲解一:贪心算法 一、什么是贪心算法? 二、贪心算法的应用场景 三、使用Java代码实现贪心算法 四、知识小结 -------------------------------- 讲解二:动态规划算法 一、什么是动态规划算法 二、动态规划算法求解问题需要具备的…...

redis之数据库

文章目录 服务器中的数据库切换数据库数据库键空间读写键空间时的维护操作 设置键的生存时间或过期时间保存过期时间过期键的判定过期键删除策略清性删除策略的实现定期删除策略的实现 总结 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结…...

【竞技宝】电竞世界杯:无畏契约首次入选正式项目!

北京时间2月12日,电竞世界杯基金会(EWCF)与知名游戏开发商拳头游戏(Riot Games)在近日共同宣布达成三年合作伙伴关系。同时,三大顶级电竞项目——《英雄联盟》《英雄联盟:云顶之弈》&#xff08…...

Golang GORM系列:GORM 高级查询教程

有效的数据检索是任何程序功能的基础。健壮的Go对象关系映射包(称为GORM)除了标准的CRUD操作之外,还提供了复杂的查询功能。这是学习如何使用GORM进行高级查询的综合资源。我们将涵盖WHERE条件、连接、关联、预加载相关数据,甚至涉…...

智能GUI Agent是什么,有什么应用领域

智能GUI Agent是什么 研究背景与目的:GUI长期主导人机交互,LLM特别是多模态模型的出现,为GUI自动化带来变革,催生了基于LLM的GUI智能体。这些智能体可理解自然语言指令,处理复杂GUI元素并执行操作,改变了用户与软件交互方式。论文旨在梳理该领域发展脉络,剖析关键要素,…...

k8s优雅操作pod容器组

k8s优雅操作pod容器组 回退备份 kubectl get deploy deployName -o yaml>>deployName-bak-date "%Y-%m-%d".yaml获取副本数 replicasecho | kubectl get -o template deploy/deployName --template{{.spec.replicas}}停止容器组 kubectl scale deployment …...

在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.20.2

文章目录 1. 安装 nvm(如果还没有安装的话)2. 加载 nvm 配置3. 列出特定系列的 Node.js 版本(远程):4. 安装 Node.js 16.20.25. 使用指定版本的 Node.js6. 验证安装 在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.…...

MySQL创建存储过程和存储函数

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

PyQt学习记录03——批量设置水印

0. 目录 PyQt学习记录01——加法计算器 PyQt学习记录02——串口助手 1. 前言 本次主要是为了学习Qt中的 QFileDialog 函数, QFileDialog.getExistingDirectory:用于选择文件夹,返回的是一个文件夹路径。 QFileDialog.getOpenFileName&…...

vivo手机和Windows电脑连接同一个WiFi即可投屏!

虽然现在很多人喜欢刷手机,但是对于长时间需要使用手机办公的人来说,手机屏幕还是太小了,当人一天二十四小时中要花费近十个小时摆弄手机,就会渴望手机屏幕能够大一点,至少看的时候,眼睛舒服一点。 因为嫌弃…...

芯盾时代数据安全产品体系,筑牢数据安全防线

芯盾时代数据安全治理(DSG)框架,以国家法律法规、行业监管标准、行业最佳实践为依据,从数据安全战略出发,以数据分类分级为支撑,构数据安全管理体系、数据安全技术体系、数据安全运营体系与数据安全监督评价…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

零基础设计模式——行为型模式 - 责任链模式

第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...