大模型时代的具身智能系列专题(二)

news2024/9/19 10:04:08

李飞飞团队

李飞飞是华人在AI领域最具影响力的学者之一,她是斯坦福大学人工智能实验室(SAIL)教授,美国国家工程院院士,知名CV数据集ImageNet的牵头人,斯坦福视觉与学习实验室(SVL)的联合主任。她曾担任Google的副总裁,并担任Google Cloud的AI/ML首席科学家。李飞飞博士于1999年获得普林斯顿大学物理学学士学位,于2005年获得加州理工学院电气工程博士学位。
李飞飞团队近些年在具身智能领域有很多成果,包括用于评估具身智能模型表现的基准BEHAVIOR。BEHAVIOR 1K Benchmark拥有来自大规模人类偏好调查的1,000种活动,8种场景类型,50个完全可交互的场景,1,200多种物体类型,5,000多种物体模型。

此外,李飞飞团队还开发了两个机器人学习框架 ROBOTURK和SURREAL,将高质量的数据集整合到先进的强化学习中。RoboTurk被称为机器人领域的ImageNet,它是一个以众包的形式制造机器人控制数据集的平台。为了解决深度学习算法和机器人研究中的可复现性问题,SURREAL是一个开源的可扩展框架,支持最先进的分布式强化学习算法,适用于在线策略学习和离线策略学习。简单理解,ROBOTURK解决机器人学习中的数据问题,SURREAL解决通过数据进行强化学习训练和结果评估的问题。

主题相关作品

  • voxposer
  • TRANSIC

voxposer

作者的研究目标是在给定一组开放指令集和一组开放对象的情况下,为机器人执行各种操作任务合成机器人轨迹,本文中为6自由度的末端执行器生成密集的航路点。作者观察到LLMs擅长在自由形式语言指令中通过推理获取支持(affordances)和约束(constraints)条件,并以此为基础来实现本文的研究目的。作者利用LLMs的代码编写能力使其与VLM进行交互,以此合成3D Value Maps,将LLMs的知识植入到机器人或智能体获取的观察空间。在一个基于模型的规划框架中使用构建好的3D Value Maps以zero-shot的方式合成对动态干扰具有鲁棒性的闭环机器人轨迹。

fig1

方法

公式定义

自由形式语言指令 L 指定了一个操作问题,例如“打开最顶部的抽屉”。然而,根据 L 生成机器人轨迹是很困难的,因为 L 可能具有任意长度,或者是不明确的(例如,需要上下文语义)。相反,我们专注于问题的各个阶段(子任务)l_i,它们明确地指定了一个操作任务 (例如,“抓住抽屉把手”,“打开抽屉”),其中被分解的子阶段(子任务) L → ( l 1 , l 2 , . . . , l n ) L→(l_1,l_2,...,l_n) L(l1,l2,...,ln) 由高级规划器(例如,一个LLM或一个基于搜索的规划器)给出。高级规划器不仅负责分解子任务,还对子任务进行排序。
该研究工作的核心问题是为机器人r和每个由指令 l i l_i li定义的子指令生成一个运动轨迹 τ i r τ_i^r τir.作者将 τ i r τ_i^r τir 表示为由操作空间控制器执行的密集末端执行器航路点序列,每个航路点都由所需的6自由度末端执行器姿态、末端执行器速度、夹持器动作组成。然而,值得注意的是,轨迹也可以采用其他方式表示,比如关节空间轨迹。
给定每个子任务l_i ,作者将上述问题表示为一个优化问题,如公式1所示。
在这里插入图片描述
T i T_i Ti 表示环境状态的演变, $τ_i^r∈T_i $ 是机器人的轨迹, C ( T i ) C(T_i) C(Ti) 表示相关的动力学和运动学约束。 F t a s k F_{task} Ftask 为当前环境状态演变 T i T_i Ti 中指令 l i l_i li 的完成程度进行打分, F c o n t r o l F_{control} Fcontrol 指定了控制成本,例如,鼓励 τ i r τ_i^r τir 最小化总控制时间或工作量。通过为每个子任务 l i l_i li求解公式 1 所述的优化问题,可以针对每个子任务l_i 分别获得一个机器人轨迹序列,这些序列集成在一起共同实现了指令L所指定的整体任务。

Voxposer的基础语言指令

基于自由形式语言指令计算F_task 是极具挑战性的,不仅因为自由形式语言可以承载丰富的语义空间,而且也缺少使用 T 和 l 标记的机器人数据。然而,作者发现了一个关键的观测结果,即大量任务都可以通过机器人观察空间中的体素值图(voxel value map) V ∈ R w × h × d V∈R^{w×h \times d} VRw×h×d 来表征,该体素值图能够引导现实场景中“兴趣实体”(“entity of interest”)的运动,“兴趣实体”可以是机器人末端执行器,一个对象,或者一个对象的部件。
fig2

例如,考虑图 2 中“打开顶部抽屉”的任务,它的第一个子任务是“抓住顶部抽屉的把手”(由LLMs推理获得)。“兴趣实体”是机器人末端执行器,体素值图应当反映出抽屉把手的吸引力【吸引力对应LLMs从自然语言指令中推理得到的支持(affordances)条件】。通过进一步的指令“小心花瓶”,体素值图也应当被更新以反映出花瓶的排斥力【排斥力对应LLMs从自然语言指令中推理得到的约束(constraints)条件】。

"兴趣实体"是执行操作的对象,或被另一个对象用来执行操作的对象。吸引力和排斥力是操作目标具有的。

将“兴趣实体”定义为e ,其轨迹定义为 τ e τ^e τe 。针对一个给定的子指令 l i l_i li,将其映射至体素值图, F t a s k F_{task} Ftask 就可以通过累计“兴趣实体“ e遍历 V i V_i Vi 的值来近似表示【 V i V_i Vi 是子指令 l i l_i li 对应的体素值图】,公式化为 F t a s k = − ∑ j = 1 ∣ τ i e ∣ ∣ V ( p j e ) F_{task} =−∑_{j=1}^{|τ_i^e|} |V(p_j^e) Ftask=j=1τieV(pje) ,其中 p j e ∈ N 3 p_j^e∈N^3 pjeN3 是“兴趣实体”e在其轨迹中第 j 个点的离散化位置 (x,y,z) 。

值得注意的是,作者发现通过在互联网规模的数据上对LLMs进行预训练,LLMs不仅能够识别“兴趣实体”,还能够通过编写Python程序来组成准确反映任务指令的体素值图。特别的,当一条指令在代码中以注释的形式给出时,LLMs能够得到以下提示:1)调用感知APIs(即调用VLM,例如open-vocabulary detector)来获取相关对象的空间几何信息;2)生成Numpy操作来操作3D数组;3)在相关位置指定精确值。作者将该方法称为VoxPoser。具体来说,作者的目标是通过prompting一个LLM,并通过Python解释器执行代码来获取体素值图 V i t = V o x P o s e r ( o t , l i ) V_i^t=VoxPoser(o^t, l_i) Vit=VoxPoser(ot,li),其中 o^t 是在时间 t时的RGB-D观测, l i l_i li 是当前的指令。此外,由于 V通常是稀疏的,因此作者通过平滑操作加密了体素值图,密集的体素值图促使运动规划器(motion planners)优化出更平滑的轨迹。

附加的轨迹参数化:VoxPoser的上述公式使用LLMs来组成体素值图 V : N 3 → R V:N^3→R V:N3R ,以此将体素空间中的离散坐标映射到实值“成本”,通过该实值“成本”可以优化只由位置项组成的路径。为了扩展到SE(3)姿态,作者也使用LLMs在与任务目标相关的坐标上组成旋转体素值图 V r : N 3 → S O ( 3 ) V_r:N^3→SO(3) Vr:N3SO(3)(例如,末端执行器应当面对抽屉手柄的支持法线)。类似地,作者进一步组成了抓手体素值图 V g : N 3 → 0 , 1 V_g:N^3→{0,1} Vg:N30,1 来控制抓手开合,以及速度体素值图 V v : N 3 → R V_v :N^3→R Vv:N3R 来指定目标速度。需要注意的是,虽然这些额外的轨迹参数没有映射到实值“成本”,但是它们也可以被纳入优化过程(公式 1)来参数化轨迹。

VoxPoser的zero-shot轨迹合成

在获得了任务成本F_task 后,就可以处理公式 1 中定义的全部问题来规划一个运动轨迹。作者使用简单的零阶优化,即通过随机采样轨迹并用所提出的目标对其进行评分。在模型预测控制框架中进一步实现了优化,该框架在轨迹的每一个点上使用该点对应的当前观测迭代地重规划轨迹,以达到即使在动态扰动下也能稳定地执行轨迹,该框架中可以使用学习模型或基于物理的模型。
尽管在循环中涉及了LLM,但是闭环执行这一条件是可以满足的,因为在子任务 l_i 中LLM生成的代码是不变的,这就允许缓存当前任务的输出。
但是,由于VoxPoser在观测空间中有效地提供了“密集反馈”(“dense rewards”),并且我们能够在每一步重规划路径,因此作者发现即使使用简单的基于启发式的模型,整个系统也已经能够实现本文所述研究工作中所考虑到的任务的相当大一部分。
由于某些体素值图是基于“兴趣实体”定义的,而“兴趣实体”不一定是机器人,所以我们还使用动力学模型来寻找所需的机器人轨迹,以此最小化任务成本(例如,机器人和环境之间如何交互才能实现所需的目标运用)。由于作者提出的方法与运动规划的具体实例无关,所以作者将实现细节留到第3节介绍。

在线经验的有效动态学习

上面提出了一个为机器人操作合成轨迹的zero-shot框架,但是作者在本节展示了VoxPoser通过有效地学习一个动力学模型,也可以从在线经验中提升性能。具体来说,在标准设置下机器人交替执行以下操作,1)采集环境转换数据 ( o t , a t , o t + 1 o_t,a_t,o_{t+1} ot,at,ot+1) ,其中 o t o_t ot 是在时间为 t 时的环境观测结果并且 a t = M P C ( o t ) a_t=MPC(o_t) at=MPC(ot) (MPC:model predictive control,模型预测控制);2)通过最小化预测的下一个观测结果 o ^ t + 1 \hat{o}_{t+1} o^t+1 和真实的下一个观测结果 o t + 1 o_{t+1} ot+1 之间的L2损失,可以训练一个由 θ参数化的动力学模型 g θ g_θ gθ
决定动力学模型学习效率的一个关键组件是MPC中的动作采样分布 P ( a t ∣ o t ) P(a_t |o_t) P(atot) ,该动作采样分布通常是整个动作空间 A 上的随机分布。但是当目标是解决一个特定任务时(例如“开门”),这通常是低效的,因为大多数动作都不会与场景中的相关对象交互(例如,“门把手”),也不会以有意义的方式与场景中的对象交互(例如,“按下门把手”)。
因此,VoxPoser使用LLMs合成机器人轨迹。由于LLMs具有丰富的常识知识,因此通过LLMs以zero-shot方式合成的机器人轨迹 τ 0 r τ_0^r τ0r 可以作为一个有用的先验来偏置动作采样分布 P ( a t ∣ o t , τ 0 r ) P(a_t |o_t,τ_0^r) P(atot,τ0r) ,这样就可以显著地加快学习过程。在实际应用中,可以通过仅在 τ 0 r τ_0^r τ0r 附近采样动作来实现,即通过添加小噪声 ε来激励局部探索,而不是在整个动作空间 A 中探索。

实验与分析

作者在3.1节讨论了实现VoxPoser的设计选择。在3.2节,作者直接在现实世界的系统中验证VoxPoser是否可以执行日常操作任务。在3.3节,作者还对VoxPoser的泛化性能和在虚拟环境中基于学习和以LLM为基础的基线模型做了详细的定量研究。在3.4节,作者进一步展示了VoxPoser如何从有限的在线经验中获益,以此学习一个适用于交互密集型任务的动力学模型。最后,在3.5节作者研究了整个系统中的错误来源,并讨论了如何改进。

VoxPoser的实现

本节讨论VoxPoser的实例化。作者主要讨论模拟域和现实世界域之间共享的设计选择。关于每个域的环境设置的更多细节请参阅原文附录。
LLMs 和 Prompting。作者依照prompting 结构,该结构使用LLMs自己生成的代码递归调用LLMs,其中每个LMP(language model program,语言模型程序)负责一个单独的功能(例如,处理感知调用)。作者使用了OpenAI API中的GPT-4。Prompst参见原文附录。
VLMs和感知。给定一个来自LLMs的对象或部分的查询,首先调用open-vocab detector(open-vocab检测器)OWL-ViT来获取一个边界框,并将边界框内的内容输入至Segment Anything[3]来获取一张掩码,并且使用视觉跟踪器XMEM[4]来跟踪掩码。被跟踪的掩码和RGB-D观测结果结合在一起,用于重建对象/部分点云。
值图组成。作者定义了以下类型的值图:支持(affordance),约束(avoidance),末端执行器速度、末端执行器旋转,夹持器动作。每个类型的值图都使用了一个不同的LMP,每个LMP在接收到一个指令后都会输出一个形状为 (100,100,100,k) 的体素图,其中每个值图具有不同的 k值。例如,在支持和约束值图中 k 表示成本,所以 k=1 ;在旋转值图中 k表示旋转角度,所以 k=4 。
作者在支持值图上使用了欧氏距离变换,在约束值图上使用了高斯滤波。
在值图LMPs的上层,作者定义了两个高级LMPs(planner,composer)来协调值图LMPs的行为:规划器(planner)将用户指令 L 作为输入(例如,“打开抽屉”),并输出一组子任务 l ( 1 : N ) l_(1:N) l(1:N) ,合成器(composer)接收子任务 l i l_i li 并调用具有详细语言参数化的相关值图LMPs。
合成器根据子任务为各个LMPs安排任务,每个LMPs根据各自的功能已经获取了自然语言指令相关的信息。
运动规划器(Motion Planner)。在规划器优化时,作者只考虑了支持和约束值图,该优化使用贪心搜索找到一个无碰撞的末端执行器位置序列 p ( 1 : N ) ∈ R 3 p_(1:N)∈R^3 p(1:N)R3 。然后作者通过余下的值图(例如,旋转值图,速度值图)在末端执行器位置序列中的每个位置 p 执行余下的参数化。运动规划器使用的成本值图按照如下方式计算:1)对归一化后的支持值图和约束值图按照2和1的权重计算加权和;2)对步骤1)得到的加权和取负值。当一个6-DoF轨迹合成后,执行第一个航路点,然后以5Hz的频率重新规划新的轨迹。
环境动力学模型(Environment Dynamics Model)。对于指定“兴趣实体”是机器人的任务,作者假设机器人本体所处环境是动态的,并且在每一步都重新规划,以适应最新的观测结果。
对于“兴趣实体”是对象的任务,作者只研究一个由接触点、推动方法和推动距离参数化的平面推动模型。基于启发式的动力学模型将输入点云沿着推动方向按照推动距离进行平移。作者使用random shooting的MPC来优化动作参数。然后基于优化后的动作参数执行一个预定义的推动操作基元。然而,作者发现当在机器人的末端执行器或关节空间上定义动作参数时,运动基元不是必须的,尽管运动基元可能会产生更为平滑的轨迹,但是需要更多的时间去优化。

VoxPoser用于日常操作任务

本节作者研究VoxPoser是否能够以zero-shot的方式合成机器人轨迹来执行日常操作任务。作者使用Franka Emika Panda机器人构建了一个真实的桌面环境,更多的细节参考原文附录A.2。尽管本文提出的方法可以泛化到图 1 所示的开放指令集和开放对象集,但是作者选择了5个代表性任务来进行定量评估。
在图 3 中给出了额外的定量结果,结果包括环境展示和值图可视化结果。
fig3

作者发现VoxPoser能有效地为日常操作任务合成机器人轨迹,并且具有较高的平均成功率。特别的,利用LLMs丰富的常识知识,能够为不同的场景和对象提取语言条件支持(affordance)。例如,LLMs能够推断出通过围绕z-轴逆时针旋转可以打开瓶子。很自然地,VoxPoser能够将这些常识植入到观测空间,被植入常识的观测空间能够直接指导运动规划器完成任务。
作者进一步对比了Code as Policies[1]的一个变体,该变体使用LLMs参数化了一组预定义的简单基元(例如,move_to_pose, open_gripper)。作者发现与链式顺序策略逻辑相比,在联合优化机制下,在考虑其他约束的同时具有空间组合能力是一种更为灵活的方法,增加了执行更多操作任务的可能性,并且能够更稳定的执行。特别的,利用MPC中的合成空间图(composed spatial maps),VoxPoser能够有效地从外部干扰中恢复,例如,移动目标/障碍物,当机器人关闭抽屉后再将其打开。

对未见指令和属性的泛化

本节研究VoxPoser的泛化能力。为了提供严格的定量结果,作者按照真实环境设置了一个模拟环境[5],但是模拟环境中有一系列确定的对象(一个柜子,十个带有颜色的块状物和条状物),以及一系列确定的模板指令(例如,“push [obj] to [pos]”),其中[obj]和[pos]是在一个预定义列表上随机化的属性。指令和属性分为可见和未见两组,可见的指令/属性可能出现在prompt(或用于监督学习基线的训练数据中)。可见指令/属性有进一步分为两类,“对象交互”(“Object Interactions”)指需要与对象交互的任务(而不是无碰撞路径规划),“空间合成”(“Spatial Composition”)指机器人需要在其轨迹中考虑环境中的空间约束的任务(例如,在特定对象附近较慢地移动)。
针对用于对比的基线,作者去除了VoxPoser中LLM和运动规划器这两个组成部分,并将其与Code as Policies的一个将LLM和基元相结合的变体,以及文献[6]所提出方法的一个使用U-Net来为运动规划合成成本图的变体进行比较。
VoxPoser在全部测试集上都优于被比较的两个基线,尤其是在未见过的指令或属性上。与使用通过监督学习训练的U-Net来指定成本相比,LLMs通过明确地推理语言条件的支持和约束取得了更好的泛化性。另一方面,通过值图合成的方式将LLMs的常识植入到观测结果中,而不是直接指定基元参数,这种方式提供了稳定的性能,具有较好的泛化性,能够根据prompt中给的例子进一步扩展泛化。

基于在线经验的高效动力学学习

尽管VoxPoser对于未见过的指令具有zero-shot泛化性,但是作者还研究了如何使VoxPoser从涉及更具挑战性的交互密集型任务的在线交互中受益,因为这种任务的在线交互中可能存在许多LLMs不具有的细微的行为差别。为此,作者研究了一套模拟任务,涉及与常见铰接对象的交互,例如打开门、冰箱和窗户。作者认为,尽管由于很难进行探索,这些任务对于自主智能体来说是具有挑战性的,但是VoxPoser通过zero-shot方式合成的轨迹将提供有用的提示(例如,“需要先按下手柄才能开门”)。具体来说,首先使用VoxPoser合成k个不同的轨迹,每个轨迹表示为一个末端执行器航路点序列。然后学习一个能够从 a t a_t at o t o_t ot 预测 o t + 1 o_{t+1} ot+1 的MLP动力学模型,该模型通过机器人或智能体以迭代的方式,交替地执行数据采集和模型学习这两个操作来获取。在MPC的动作采样分布中,将初始合成轨迹作为其先验,并且将噪声 ε ∼ N ( 0 , σ 2 ) ε∼N(0,σ^2) εN(0,σ2)添加到 τ 0 r τ_0^r τ0r 中的每一个航路点,以此激励局部探索。
table3

从table 3,作者发现VoxPoser通过zero-shot方式合成的轨迹是有意义的,但是仍然不足。然而,通过将这些轨迹作为探索先验,可以在不到3分钟的在线交互中学习到一个有效的动力学模型,从而获得较高的最终成功率。相比之下,如果没有先验知识,学习动力学模型是极其困难的,因为大多数行为都不会导致有意义的环境变化。在所有情况下,实验都超过了最长12小时的限制。

3.5 错误分解
由于VoxPoser涉及多个模块协同工作,以此为各种操作任务合成轨迹,因此作者在本节分了每个组件产生的错误,以及如何进一步改进整个系统。作者在模拟环境中进行实验,在那里可以访问真实感知和动力学模型(例如,模拟器)。结果如图4所示。
fig4
U-Net+MP训练了一个U-Net直接将RGB-D观测结果映射为值图,生成的值图为一个运动规划器(MP)使用,因此该方式没有独立的感知模块。此处的“规范错误”(“Specification error”)是指U-Net产生的错误,例如预测结果中难以优化的噪声。
LLM+基元(Primitives)使用LLMs顺序地合成基元,因此没有动力学模块。针对这个基线和VoxPoser,“规范错误”(“Specification error”)是指LLMs在合成策略逻辑或合成值图时的错误。
相比之下,尽管VoxPoser使用了多个模块,但是通过将整个过程公式化为一个基于模型的联合优化问题,VoxPoser达到了最低的总体错误率,并且其最大的错误来源是感知模块。作者还发现,使用更好的动力学模型(而不是基于启发式的模型)可以有助于提高整体性能,例如学习模型或基于物理的模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1703611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单链表OJ题(课堂总结)

1.链表的带环问题 上图就是一个典型的带环链表 1.1如何判读链表是否带环? 最常见的方法就是利用快慢指针,快指针追加慢指针,当二者相等的时候即可判断链表带环 其实现的代码如下: bool hasCycle(struct ListNode*head) { s…

驱动开发中引入私有数据的原因

系列文章目录 驱动开发中引入私有数据的原因 驱动开发中引入私有数据的原因 系列文章目录驱动开发中引入私有数据的原因 驱动开发中引入私有数据的原因 驱动开发中引入私有数据(Private Data)概念主要是为了解决以下几个关键问题: 1.多设备支…

Scikit-Learn朴素贝叶斯

Scikit-Learn朴素贝叶斯 1、朴素贝叶斯1.1、贝叶斯分类1.2、贝叶斯定理1.3、贝叶斯定理的推导1.4、朴素贝叶斯及原理1.5、朴素贝叶斯的优缺点2、Scikit-Learn朴素贝叶斯2.1、Sklearn中的贝叶斯分类器2.2、Scikit-Learn朴素贝叶斯API2.3、Scikit-Learn朴素贝叶斯实践(新闻分类与…

FreeRtos进阶——栈保存现场的几种场景

MCU架构 在认识栈的结构前,我们先来认识以下单片机的简单架构。在我们的CPU中有着很重要的一个模块——寄存器(R0-R15),其中R13,R14,R15的别称分别为SP栈顶指针、LR返回地址、PC当前指令地址。外部RAM是单片…

前端开发攻略---三种方法解决Vue3图片动态引入问题

目录 1、将图片放入public文件夹中 2、使用 /src/.... 路径开头 3、生成图片的完整URL地址&#xff08;推荐&#xff09; 1、将图片放入public文件夹中 使用图片&#xff1a;路径为 /public 开头 <template><div><img :src"/public/${flag ? 01 : 02}.jp…

JMeter 测试单节点与集群的并发异常率

一. JMeter 测试单节点与集群的并发异常率 下载地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 单个tomcat测试结果(2000个用户&#xff0c;每个用户访问100次) nginx集群负载均衡tomcat结果(2000个用户&#xff0c;每个用户访问100次)

【机器学习300问】101、1x1卷积有什么作用?

卷积神经网络最重要的操作就是卷积层的卷积操作&#xff0c;之前文章中介绍过&#xff0c;卷积核filter往往都是3x3或者5x5什么的&#xff0c;但有一种非常特殊的卷积——1x1卷积。他在CNN中扮演着非常重要的角色。 一、通道维度的降维/升维 这是1x1卷积最显著的作用之一。通过…

眼底项目经验

眼底项目经验 可解释性不足问题眼底项目有多牛逼可解释性不足解法数据、算力、算法都免费送不仅预测当下&#xff0c;还能预测未来和慢病管理整合&#xff0c;形成一个实时健康检测生态 可解释性不足问题 今天下午和腾讯眼底项目人员讨论, 他们不准备做全身性的多疾种, 因为深…

按尺寸筛选轮廓图中的轮廓

1.按短边筛选 原始轮廓图&#xff1a; import cv2 import numpy as np# 读取轮廓图 contour_image cv2.imread(..\\IMGS\\pp_edge.png, cv2.IMREAD_GRAYSCALE)# 使用cv2.findContours()函数获取所有轮廓 contours, _ cv2.findContours(contour_image, cv2.RETR_EXTERNAL, cv2…

使用 Python 编程语言进行供应链分析

前言 要分析一家公司的供应链&#xff0c;我们需要供应链不同阶段的数据&#xff0c;如有关采购、制造、运输、库存管理、销售和客户人口统计的数据。我为这项任务找到了一个理想的数据集&#xff0c;其中包括一家时尚和美容初创公司的供应链数据。 1. 相关数据集 让我们导入…

如何在anaconda的环境下安装langchain

1、安装anaconda&#xff1b; 2、在终端上&#xff0c;输入&#xff1a; conda install langchain -c conda-forge Proceed ([y]/n)? y 输入&#xff1a;Y 3、安装完成后&#xff0c;输入&#xff1a; python -c "import langchain; print(langchain.__version__)&…

红外超声波雷达测距

文章目录 一HC-SR04介绍1HC-SR04简介及工作原理 二用HAL库实现HC-SR04测量距离1STM32CubeMX配置2keil53代码的添加 三效果 一HC-SR04介绍 1HC-SR04简介及工作原理 超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等…

5.27周报

这两周邻近毕业故没有很多时间来学习课余内容&#xff0c;另外最近身体有些不舒服【偏头痛】&#xff0c;所以学的内容不多&#xff0c;包括SVM向量机和ResNet【不包括代码复现】 1.SVM支持向量机的大概内容 1、目的&#xff1a; 主要内容是如何找到分类的那条线【超平面】—…

如何一招破解全域运营加盟骗局?

随着全域运营的潜力被持续挖掘&#xff0c;想要通过加盟等方式做全域运营服务商的创业者数量日益增加。在此背景下&#xff0c;各种全域运营加盟骗局接踵而来&#xff0c;不少创业者不得不走上艰难的维权之路。 在采访了多位受害者后&#xff0c;我们总结出了目前已知的全域运营…

使用 FileZilla 在 Windows 和 Ubuntu 之间传文件

网线一端插在板子的WAN口上&#xff0c;另一段插在电脑上&#xff0c;然后要配一下板子的IP。 板侧&#xff1a; 使用串口链接板子与PC端&#xff1b; 输入指令 ifconfig eth0&#xff08;具体看wan口对应哪一个&#xff09; 192.168.1.99 PC端配置&#xff1a; 打开网络设…

二十八、openlayers官网示例Data Tiles解析——自定义绘制DataTile源数据

官网demo地址&#xff1a; https://openlayers.org/en/latest/examples/data-tiles.html 这篇示例讲解的是自定义加载DataTile源格式的数据。 先来看一下什么是DataTile&#xff0c;这个源是一个数组&#xff0c;与我们之前XYZ切片源有所不同。DataTile主要适用于需要动态生成…

【JavaEE进阶】——要想代码不写死,必须得有spring配置(properties和yml配置文件)

目录 本章目标&#xff1a; &#x1f6a9;配置文件 &#x1f6a9;SpringBoot配置文件 &#x1f388;配置⽂件的格式 &#x1f388; properties 配置⽂件说明 &#x1f4dd;properties语法格式 &#x1f4dd;读取配置文件 &#x1f4dd;properties 缺点分析 &#x1f3…

使用THREE.js实现材质球,材质球,定制材质

项目需求&#xff0c;需要自定义材质球&#xff0c;方便使用封装成了类&#xff0c;可以使用在各种项目 1.效果展示 2:实现代码 使用方式&#xff0c;传入初始化DOM,和初始化材质配置即可 import * as THREE from "three"; import { OrbitControls } from "thr…

每日复盘-20240527

今日关注&#xff1a; 六日涨幅最大: ------1--------300956--------- 英力股份 五日涨幅最大: ------1--------300956--------- 英力股份 四日涨幅最大: ------1--------301361--------- 众智科技 三日涨幅最大: ------1--------301361--------- 众智科技 二日涨幅最大: ----…

PGP安装以及汉化

目录 1.安装 2.汉化 1.安装 (1&#xff09;进入setup目录&#xff0c;双击安装包开始安装 (2&#xff09;选择默认语言English (3&#xff09;接受安装协议 I accept the license agreement (4&#xff09;选择第二项 Do not display the Release Notes (5&#xff09;选择“…