运动重定向:TeachNet

news2024/11/28 11:49:48

Vision-based Teleoperation of Shadow Dexterous Hand using End-to-End Deep Neural Network解析

  • 摘要
  • 1. 简介
  • 2. Related Work
    • 2.1 基于视觉的无标记远程操作
    • 2.2 基于深度的3D手部姿势估计
    • 2.3 远程操作中的主从配对
    • 2.4 遥操作映射方法
  • 3. 师生网络
    • Joint angle loss
    • Consistency Loss
      • (1)Hard consistency loss
      • (2)Soft consistency loss
    • Physical loss
    • 完整Loss
  • 4. 数据集生成
    • 4.1 人-机器人手部运动构型
    • 4.2 优化映射方法
  • 5. 实验
    • 5.1 TeachNet评价
    • 5.2 机器人实验
      • (1)Simulation实验
      • (2)Manipulation实验

论文地址:https://ieeexplore.ieee.org/document/8794277
论文代码:https://github.com/TAMS-Group/TeachNet_Teleoperation
论文出处:2019ICRA
论文单位:清华大学

摘要

  • 在本文中,我们提出了一种新的神经网络体系结构TeachNet,用于基于直观和无标记视觉的灵巧机器人手遥操作。
  • 机器人关节角度直接从人手的深度图像中生成,产生视觉上类似的端到端机器人手的姿势。
  • TeachNet的特殊结构与一致性损失函数相结合,处理了人类和机器人手在外观和解剖结构上的差异。
  • 从已有的标记人手深度图像和模拟机械手深度图像数据集生成同步的人-机器人训练集。
  • 最终的训练集包括 Shadow C6机械手的400K 成对深度图像和关节角度
  • 网络评估结果验证了TeachNet的优势,特别是在高精度条件下。
  • 模仿实验和新手远程操作的抓握任务表明,TeachNet比目前最先进的基于视觉的远程操作方法更可靠、更快。

1. 简介

  • 机器人灵巧的手为取代人类的手执行繁琐和危险的任务提供了一个有希望的基础。

  • 当灵巧手的自主操作处理复杂的感知时,远程操作在快速决策和处理极端情况方面优于智能编程。

  • 与接触式或基于可穿戴设备的远程操作不同,基于无标记视觉的远程操作具有显示自然的人体肢体运动和较少侵入性的优点

  • 基于分析视觉的遥操作分为两类:基于模型(model-based)和基于外观(appearance-based)的方法。

  • 基于模型的方法提供了连续的解决方案,但计算成本高,并且通常依赖于多摄像机系统的可用性。

  • 相反,基于外观的方法识别离散数量的手部姿势,这些姿势通常对应于方法的训练集,没有高的计算成本和硬件复杂性。

  • 近年来,越来越多的研究人员关注基于数据驱动的视觉远程操作方法,该方法首先利用深度卷积神经网络(CNN)获取三维手部姿势或识别手部手势类别,然后将相应的位置或姿势映射到机器人上。然而,这些方法不仅严重依赖于手部姿态估计或分类的准确性,而且还受到后处理时间成本的影响

  • 相反,我们寻求将人手的噪声深度图像作为输入,并通过训练深度CNN来产生机器人手的关节角度作为输出

  • 基于视觉的端到端远程操作是一种自然、直观的远程机器人操作方式,对新手操作方便。

  • 因此,设计一种能够在人体姿态空间中学习相应机器人姿态特征的高效网络至关重要。

  • 由于端到端方法依赖于大量的人机远程操作配对,我们的目标是探索一种有效的方法,同时收集机器人和人的同步手部数据

  • 本文提出了一种基于单深度图像的Shadow灵巧手远程操作方案(见图1)。
    在这里插入图片描述

  • 我们的主要贡献是:
    (1)我们提出了一个端到端的师生网络(TeachNet),它学习机器人和人手之间的运动学映射
    (2)我们建立了一个成对的人-机器人手数据集,该数据集包括相同手势的成对深度图像以及机器人手的相应关节角度
    (3)我们设计了一种优化的映射方法,将Shadow手的笛卡尔位置和链接方向与人手姿势相匹配,并适当考虑可能的自碰撞。

  • 在网络评估过程中,与其他端到端基线相比,TeachNet具有更高的准确率和更低的误差。

  • 正如我们在机器人实验中所说明的那样,我们的方法允许Shadow机器人模仿人类手势,并比最先进的数据驱动的基于视觉的远程操作更快地完成抓取任务。

2. Related Work

2.1 基于视觉的无标记远程操作

  • 人类对机器人的遥操作通常是通过接触装置来实现的,如跟踪传感器、装有角度传感器的手套、惯性传感器和操纵杆。
  • 然而,可穿戴设备是针对人手或人体的一定尺寸范围定制的,接触方式可能会阻碍人体肢体的自然运动。
  • 与这些方法相比,基于无标记视觉的远程操作具有更小的侵入性和更自然舒适的手势
  • 基于视觉模型的方法基于摄像系统从分割图像中计算出拇指和食指的连续三维位置和方向,并控制安装在六轴机械臂上的平行颌爪。
  • 与分析方法相比,数据驱动技术更侧重于对象表示和感知处理,例如特征提取、对象识别或分类以及姿态估计。
  • 例如,从无标记的视觉观察中跟踪人体运动,然后计算逆运动学过程。但是这种方法没有考虑机器人的物理约束和关节限制,容易产生机器人无法达到的姿态。
  • 然而,这些方法在很大程度上依赖于手部姿态估计或分类的准确性,并且浪费了大量的后处理时间。
  • 在这项工作中,我们的目标是设计一个端到端的基于视觉的CNN,它可以生成连续的机器人姿势,并提供快速直观的远程操作体验。

2.2 基于深度的3D手部姿势估计

  • 三维手部姿态估计是基于视觉的遥操作的重要研究领域之一。
  • 尽管三维手姿估计领域发展迅速,但孤立的三维手姿估计仅在[70,120]°的视点范围内实现较低的平均误差(10 mm)。
  • 根据输出姿态的表示,三维手部姿态估计方法分为基于检测和基于回归的方法
  • 基于检测的方法给出了每个关节的概率密度图
  • 基于回归的方法直接将深度图像映射到手模型的关节位置或关节角度。
  • 无论输出关节位姿属于谁,基于回归的网络与我们的端到端网络相似

2.3 远程操作中的主从配对

  • 要从人手图像中学习机器人的姿态特征,就必须考虑如何获得大量的人-机器人配对图像。
  • 先前的工作是通过要求人类操作员同步模仿机器人的运动来获得主从配对。像这样收集配对数据的成本很高,并且通常带有噪声对应。
  • 此外,人类和机器人之间不再有精确的对应关系,因为生理上的差异使得模仿对模仿者来说是非琐碎和主观的。
  • 实际上,对于人手来说,机器人的状态更容易接近,也相对稳定,而且已有很多人手数据集。
  • 由于在真实图像上进行训练可能需要大量的数据收集时间,因此另一种方法是在模拟图像上进行学习,并使表示适应真实数据。
  • 我们提出了一种新的标准,通过使用现有的标记人手深度图像数据集,操纵机器人并在仿真中记录相应的关节角度和图像,并在物理机器人上进行广泛的评估,从这些结果中生成人机配对。

2.4 遥操作映射方法

  • 传统的遥操作映射方法主要分为三类:关节映射(适用于力量抓取)、指尖映射(适用于精确抓取)和位姿映射(解释人类抓取功能而不是复制手的位置)。
  • 然而,在大多数情况下,只考虑一种类型的映射方法是不够的。例如,指尖映射忽略了指骨的位置和方向,也没有考虑从指骨和主指骨之间的特殊机械差异。

3. 师生网络

  • 直接从人体图像中解决关节回归问题是相当具有挑战性的,因为机械手和人手占据两个不同的空间。
  • 具体来说,想象我们有一个机器人手的图像 I_R人手的图像 I_H,而图像中的机械手与人手的动作完全相同。将人手图像映射到相应的机器人关节的问题可以表示为:
    在这里插入图片描述
  • 为了更好地处理输入深度图像中的几何信息和联合回归的复杂约束,我们采用了一种编码-解码式深度神经网络
  • 图2中的上层分支说明了我们使用的网络架构。
    在这里插入图片描述
  • 然而,人的手和Shadow的手基本上来自不同的空间,因此在姿态空间中让 f_feat 中的人手图像I_H 学习合适的潜在特征 z_pose 是很困难的。
  • 相比之下,从机械手图像 I_R关节目标Θ的映射将更加自然,因为它正是一个定义良好的手姿估计问题。
  • 直观地,我们认为对于配对的人类和机器人图像,他们的潜在姿势特征 z_pose 应该一致,因为他们代表相同的手部姿势,并最终映射到相同的关节目标。
  • 此外,通过观察IR到Θ的映射优于IH(这些初步结果见图5),IR的编码器效果可以更好地提取姿态特征,从而可以显著改善解码器的回归结果。
  • 基于上述考虑,我们提出了一种新的师生网络(TeachNet),以端到端方式解决基于视觉的远程操作问题。
  • TeachNet由两个分支组成,扮演教师角色的机器人分支和扮演学生角色的人类分支。

Joint angle loss

  • 每个分支都用均方误差(MSE)损失进行监督
    在这里插入图片描述
    其中 J 是关节角的groundtruth。
  • 此外,编码器-解码器结构将输入深度图像映射到关节预测。

Consistency Loss

  • 我们定义了两个潜在特征 z_Hz_R 之间的一致性损失 L_cons,以利用人手和机器人手之间的几何相似性。因此,L_cons 迫使人手分支受到与机器人分支共享的姿态空间的监督
  • 为了探索最有效的对准机制,我们设计了两种一致性损失两种不同的对准位置:

(1)Hard consistency loss

  • 特征对齐最直观的机制是在这两个分支的潜在特征上提供额外的均方误差(MSE)损失
    在这里插入图片描述

(2)Soft consistency loss

  • 有时,可能会分散网络对手部姿势表征的学习,尤其是在早期训练阶段。
  • 受[26]的启发,我们将 z_H 和 z_R 输入判别器网络D,以计算真实和虚假姿势特征的现实主义分数。
  • Soft consistency loss 基本上是这个分数的负值:

在这里插入图片描述

  • 对齐位置上,我们分别提出了 early teaching 和 late teaching。
  • 对于前者,我们将 对齐层(alignment layer) 放在编码器(encoder)和嵌入模块(embedding module)之后,而在后者中,对齐层位于整个模型的倒数第二层(这意味着回归模块将只包含一层)。
  • 下面,我们将L_cons_s的早期教学称为Teach Soft-Early,L_cons_s的晚期教学称为Teach Soft-Late。L_cons_h的早期教学称为Teach Hard-Early,L_cons_h的晚期教学称为Teach Hard-Late

Physical loss

  • 为了进一步改进远程操作模型,我们还引入了一个辅助损失: Physical loss
  • 施加物理约束和关节限制的 Physical loss为:
    在这里插入图片描述

完整Loss

  • 总的来说,每个分支的完整training objective是
    在这里插入图片描述
    其中,hard consistency loss 的α = 1,hard consistency loss 的α = 0.1。

4. 数据集生成

  • 训练学习人手和机械手之间运动映射的TeachNet强烈依赖于大量的人-机器人配对数据集。
  • 我们通过使用现成的人手数据集BigHand2.2M数据集以及使用图3所示pipeline的优化映射方法来实现这一目标。
    在这里插入图片描述
  • 通过该pipeline,我们收集了一个包含400K对模拟机器人深度图像和人手深度图像的训练数据集,并具有相应的机器人关节角度姿态

4.1 人-机器人手部运动构型

  • 本作品中使用的Shadow Dexterous Hand是由电机控制的,有5个手指,其运动链如图6右侧所示。
    在这里插入图片描述
  • 每个手指都有一个BioTac触觉传感器,取代了最后一个指骨和最后一个关节的可控性。
  • 每个手指有四个关节,远端、中端、近端和掌骨关节,但每个手指的第一个关节是僵硬的。小指和拇指有一个额外的关节来握住物体。
  • 总的来说,这是17个自由度加上手腕上的两个自由度是19个
  • 与机器人手相比,BigHand2.2M数据集的人手模型有21个关节,可以进行31DOF的运动,如图3所示。
  • 机器人手与人的手在运动学上的主要区别在于机器人关节的角度范围和手腕关节的结构。
  • 为了简化Shadow手与人手的差异性,影子手的两个手腕关节在0点处是固定的,只考虑Shadow手每个手指的TIP, PIP, MCP这15个关节关键点

4.2 优化映射方法

  • 有效地从人手姿态映射机器人姿态在我们的训练数据集中起着重要的作用。
  • 为了模仿人的手的姿态,我们提出了一种结合位置映射(position mapping)方向映射(orientation mapping) 和适当考虑可能的**自碰撞(self-collisions)**的优化映射方法。
  • 首先,我们使用位于人类手腕关节和机器人手腕关节 z 轴以上 34mm 处的通用参考系F。注意, 34mm是从腕关节到拇指底关节的高度。选择这些位置是因为它们位于高度运动相似的位置。
  • 其次,我们对权重较大的ω_pf的指尖权重较小的ω_pp的PIP关节进行位置映射(position mapping)
  • 第三,用权重ω_d对拇指近端指骨和远端指骨进行方向映射(orientation mapping)
  • 在我们的数据集中,我们设置{ω_pf, ω_pp, ω_d} ={1, 0.2, 0.2}。
  • 利用BioIK求解器确定机器人关节角度Θ∈R17,机器人在Gazebo中执行运动,并通过MoveIt检查自碰撞。
  • 如果BioIK给出了一个自碰撞输出,我们定义了一个代价函数Fcost来测量两个links之间的距离:
    在这里插入图片描述
    式中,Pi, Pj分别表示link ilink j 的位置, R_col为两个links之间的最小无碰撞半径。
  • 考虑到BigHand2.2M数据集跨越了广泛的观察视角到人手,增加机器人数据的视角多样性是必不可少的。
  • 因此,我们在Gazebo中通过9台不同观测位置的模拟深度摄像机采集机器人的视觉样本,并同时记录每个姿态的9张深度图像
  • 作为示例,在图4中,我们给出了与图3左下角人手姿势相对应的机器人从9个视点的深度图像。
    在这里插入图片描述

5. 实验

5.1 TeachNet评价

  • 我们检查了TeachNet是否能够学习更多的指示性视觉表征,即人手的运动结构。
  • 提出的TeachNet在我们的配对数据集上通过以下实验进行了评估:
    (1)为了探索对齐层的合适位置和正确的对齐方法,我们比较了提出的四种网络结构:Teach Soft-Early, Teach Soft-Late, Teach Hard-Early, Teach Hard-Late。
    (2)为了验证对齐层的重要性,我们设计了一个消融分析,通过去除一致性损失Lcons,分别训练单个人类分支和单个机器人分支。我们将这两条基线分别称为:Single Human和Single Robot。
    (3)将该方法与基于数据驱动的基于视觉的遥操作方法进行了比较,后者基于三维手部估计从人体关节位置映射机器人的位置。我们将此基线称为HandIK解决方案。在这项工作中使用了三个评估指标:1) 最大/平均关节角度误差低于阈值的帧的比例; 2) 最大/平均关节距离误差低于阈值的帧的比例; 3) Θ中所有角度的平均角度误差。
  • 所有网络评估的输入深度图像从原始深度图像中提取为固定大小的立方体围绕手,并调整大小为100×100。
  • 请注意,尽管我们有9个Shadow hand图像视图对应于一个人手姿势,但在TeachNet的训练过程中,我们随机选择了一个Shadow hand图像视图馈送到机器人分支
  • 对于HandIK解决方案,我们在我们的数据集上训练了 DeepPrior++ 网络,我们选择DeepPrior++的原因是它的架构类似于TeachNet的单个分支。
  • 我们从DeepPrior++中获得21 × 3的人手关节位置,然后使用与第四节相同的映射方法获得Shadow hand 的关节角度。
  • 对比结果如图5和图6所示,表明单机器人方法在所有评估指标中是最好的,并且具有“supervisor” 的能力。
    在这里插入图片描述
    在这里插入图片描述
  • 同时,Teach Hard-Late方法优于其他基线,它验证了单个人类分支通过额外的一致性损失得到增强。
  • 特别是在高精度条件下,在最大关节角度下,只有Teach Hard-Late方法的准确率平均提高了3.63%,高于Single Human方法 (表1)。
    在这里插入图片描述
  • 我们认为深度图像的后期特征空间 f_feat 包含了更多有用的信息,MSE方法在我们的案例中表现出更强的监督作用。
  • 基于回归的HandIK方法在我们的三个指标中表现最差。HandIK解的结果不理想,不仅是因为我们的网络没有更好地表征手的特征,还因为这种方法没有考虑机器人的运动结构和特殊的限制。
  • 此外,直接关节角度回归应该在角度上有不错的精度,因为这是学习目标。缺少 L_phy 也会导致准确性低下。
  • 此外,从图6可以看出,拇指的第二关节、第三关节和基底关节是比较难学习的。产生这些结果的主要原因是:1) 在我们的工作中,机器人远端关节的固定影响了其第二关节和第三关节的精度。2)这些类型的关节比其他关节有更大的关节范围,尤其是拇指的基底关节。3)人类拇指与Shadow hand拇指存在较大差异。

5.2 机器人实验

  • 为了验证我们方法的可靠性和直观性,我们对五名成年受试者进行了真实的实验。
  • 我们远程操作系统的slave hand是Shadow dexterous hand,每个手指的第一个关节是固定的。
  • 深度传感器是英特尔RealSense F200深度传感器,适用于近距离跟踪。
  • 远程操作者的右手姿势被限制在[70◦,120◦]的视点范围和[15mm, 40mm]距相机距离范围。
  • 由于基于视觉的遥操作容易受到光线的影响,所有的实验都尽可能在均匀明亮的光源下进行。
  • Teach Hard-Late方法的平均计算时间为0.1051秒(使用Intel Core i7-4720HQ CPU的Alienware15)。

(1)Simulation实验

  • 5名远程操作新手站在深度传感器前,用美国手语0-9和随机的常用手势进行无序操作,然后远程操作模拟的Shadow机器人。操作者不需要知道机器人的控制机制,自然地进行实验。
  • Teach HardLate方法远程操作的定性结果如图7所示。
    在这里插入图片描述
  • 可以看出 Shadow hand 生动地模仿不同大小的人手的手势。
  • 这些实验表明,TeachNet使机器人手能够连续地在线模仿人手,而无需明确指定任何关节级对应。
  • 由于我们固定了Shadow hand的两个手腕关节,所以我们并不关心深度传感器是否捕捉到了遥控人的手腕。
  • 然而,可见误差主要发生在手指的第二关节、第三关节和拇指的基底关节,这可能是由于slave的特殊运动结构、遮挡和不确定的光照条件造成的。

(2)Manipulation实验

  • 我们在一个从机器人上比较了Teach-Hard-Late方法DeepPrior++ HandIK方法
  • 为了简化实验,我们将机器人的控制方式设置为每个关节在适当的最大力范围内的轨迹控制。
  • 我们使用时间来完成手内的抓取和释放任务,作为可用性的度量标准。
  • 我们把一系列的物体放在 slave hand里,slave hand每次都是张开的,这样机器人的手指就能更容易地抓住它们,并要求受试者抓住它们,然后松开它们。
  • 用于抓取和释放任务的物体是:一个水瓶,一个小马克杯,一个塑料香蕉,一个圆筒罐和一个塑料苹果。
  • 我们要求操作人员对水瓶和马克杯使用强力抓握,对其他物体使用精密抓握
  • 如果用户没有在四分钟内完成任务,他们就被认为无法掌握物体。
  • 表2数值显示了新手使用每种控制方法掌握物体的平均时间。
    在这里插入图片描述
  • 我们发现,由于精度较低,特别是对于拇指,以及对HandIK解的后处理导致完成任务的时间较长。
  • 用户需要先打开拇指才能进行正确的抓握动作,因此对于直径较大的物体,HandIK解决方案的性能较差。
  • 此外,在我们的方法中,抓香蕉的时间最长,因为长而窄的物体需要更宝贵的指尖位置。

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

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

相关文章

STM32 GPIO 描述

一、GPIO功能描述 每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR…

【计算机组成与设计】Chisel取指和指令译码设计

本次试验分为三个部分: 目录 设计译码电路 设计寄存器文件 实现一个32个字的指令存储器 设计译码电路 输入位32bit的一个机器字,按照课本MIPS 指令格式,完成add、sub、lw、sw指令译码,其他指令一律译码成nop指令。输入信号名…

腾讯云16核服务器配置有哪些?CPU型号处理器主频性能

腾讯云16核服务器配置大全,CVM云服务器可选择标准型S6、标准型SA3、计算型C6或标准型S5等,目前标准型S5云服务器有优惠活动,性价比高,计算型C6云服务器16核性能更高,轻量16核32G28M带宽优惠价3468元15个月,…

Redis之 redis.conf配置文件

文章目录 前言一、基本配置1.单位2.包含3.网络配置4.通用5.快照6.安全7.限制8.仅追加模式 二、总体主要介绍总结 前言 行家一出手,就知有没有,让一起学习redis.config配置文件。 一、基本配置 Redis 的配置文件位于 Redis 安装目录下,文件名…

【C++代码】接雨水,最近的更大的元素,柱状图中的最大矩阵,单调栈--代码随想录

题目:每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。…

凡人修仙之灵药篇

一、总纲 (1)药物均来自拼夕夕,我已经买过的,确认都是正版的,不过急需疗伤的还是线下就医吧, 快递一般都是三天到的。 (2)具有多种并发症建议去就医。 (3)两…

【公益案例展】 网易“双碳”智控系统——开源开放赋能绿色发展

‍ 网易天工公益案例 本项目案例由网易天工投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2023中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 2020年9月中国明确提出2030年“碳达峰”与2060年“碳中和”…

【黑马程序员】SSM框架——MyBatisPlus

文章目录 前言一、MyBatisPlus 简介1. 入门案例1.1 创建新模块1.2 选择需要的技术集1.3 添加 mp 起步依赖1.4 设置 Jdbc 参数1.5 实体类与表结构1.6 定义数据接口1.7 测试功能 2. MyBatisPlus 概述3. MyBatisPlus 特性 二、标准数据层开发1. 标准数据层 CRUD 功能1.1 Lombok1.2…

Educational Codeforces Round 157 (Rated for Div. 2) D. XOR Construction (思维题)

题目 给定长为n-1(n<2e5)的整数序列a&#xff0c;第i个数a[i](0<a[i]<2n) 构造一个长为n的整数序列b&#xff0c;满足&#xff1a; 1. 0到n-1在b数组中每个数恰好出现一次 2. 对于&#xff0c; 题目保证一定有解&#xff0c;有多组时可以输出任意一组 思路来源 …

腾讯云CVM服务器操作系统镜像大全

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像&#xff0c;公共镜像包含基础操作系统和腾讯云提供的初始化组件&#xff0c;公共镜像分为Windows和Linux两大类操作系统&#xff0c;如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…

图及谱聚类商圈聚类中的应用

背景 在O2O业务场景中&#xff0c;有商圈的概念&#xff0c;商圈是业务运营的单元&#xff0c;有对应的商户BD负责人以及配送运力负责任。这些商圈通常是一定地理围栏构成的区域&#xff0c;区域内包括商户和用户&#xff0c;商圈和商圈之间就通常以道路、河流等围栏进行分隔。…

Java连接Redis并操作Redis中的常见数据类型

目录 一. Java连接Redis 1. 导入依赖 2. 建立连接 二. Java操作Redis的常见数据类型存储 1. Redis字符串(String) 2. Redis哈希(Hash) 3. Redis列表&#xff08;List&#xff09; 4. Redis集合&#xff08;Set&#xff09; 一. Java连接Redis 1. 导入依赖 pom依赖…

Linux--线程-条件控制实现线程的同步

1.条件变量 条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时&#xff0c;允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条件状态前必须首先锁住互斥量&#xff0c;其他线程在获…

基于STM32HAL库(独立看门狗)-简述

目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、总结 概述 一个成熟靠谱的项目&#xff0c;离不开“看门狗”的必选项&#xff0c;凡是人写的程序多少都会有出现bug的情况&#xff08;或芯片外设受外界干扰导致故障程序卡死、跑飞的情况&#xf…

第二阶段第一章——面向对象

前言 学习了这么久Python&#xff08;呃其实也没多久差不多两周&#xff09;&#xff0c;可能有小伙伴说我废了&#xff0c;两周才学这么点&#xff0c;咋说呢&#xff0c;我曾经也是急于求成&#xff0c;做任何事情都是急于求成&#xff0c;比如我喜欢一个人我就想马上跟她在…

14 _ 排序优化:如何实现一个通用的、高性能的排序函数?

几乎所有的编程语言都会提供排序函数,比如C语言中qsort(),C++ STL中的sort()、stable_sort(),还有Java语言中的Collections.sort()。在平时的开发中,我们也都是直接使用这些现成的函数来实现业务逻辑中的排序功能。那你知道这些排序函数是如何实现的吗?底层都利用了哪种排…

网络攻击的威胁仍在上升、企业该如何解决

近十年来&#xff0c;网络攻击的频率和规模不断增加&#xff0c;对网站和在线资产构成了严重威胁。解决网站被攻击的问题需要采用多层次的安全策略&#xff0c;其中CDN&#xff08;内容分发网络&#xff09;的防护角度发挥了关键作用。本文将通过通俗易懂的方式从CDN的角度分析…

Python语言_matplotlib包_共80种--全平台可用

Python语言_matplotlib包_共80种–全平台可用 往期推荐&#xff1a; Python语言_single_color_共140种–全平台可用 R语言_RColorBrewer包–全平台可用 R语言gplots包的颜色索引表–全平台可用 R语言中的自带的调色板–五种–全平台可用 R语言657中单色colors颜色索引表—全平台…

6 从物理层到MAC层

1、实现局域网中玩游戏 在早期的80后的大学宿舍中&#xff0c;组件一个宿舍的局域网&#xff0c;以便于宿舍内部可以玩游戏. 第一层&#xff08;物理层&#xff09; 1.首先是实现电脑连接电脑&#xff0c;需要依靠网线&#xff0c;有两个头。 2.一头插在一台电脑的网卡上&am…

要做一名成功的测试,首先得会想?

近在做测试时&#xff0c;突然想到了这么个问题——在测试的过程中对某个功能想得越开&#xff0c;测试就完整&#xff0c;就越彻底&#xff01; 当然我们在产生与该功能相关的想象时&#xff0c;其中最关键的是不能脱离需求&#xff0c;不能脱离该软件本身&#xff1b;不然这…