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

LeRobot的机器人控制系统(下)

目的和范围

机器人控制系统是 LeRobot 框架的核心组件,提供用于操作、标定和记录物理机器人数据的接口。该系统支持远程操作、记录演示数据集、重放动作以及在真实机器人上运行已训练的策略。它充当用户、物理机器人硬件和训练流程之间的桥梁。本文介绍机器人控制系统的架构和使用方法。

请添加图片描述

。。。。。。继续。。。。。。

在此详细介绍 LeRobot 框架中的硬件接口,重点介绍系统如何与摄像头、电机等物理组件进行通信。这些接口提供了抽象层,用于标准化机器人控制系统与各种硬件设备之间的交互,从而确保在不同硬件配置下实现一致的操作。

架构概述

LeRobot 中的硬件接口遵循一致的模式:

  • 配置对象定义设备参数
  • 设备类处理与硬件的通信
  • 连接管理通过 connect() 和 disconnect() 方法确保安全操作
  • 标准化的读/写方法提供对设备数据的一致访问
  • 使用专用异常类进行错误处理

硬件接口的架构

请添加图片描述

相机接口

LeRobot 提供两种主要的相机接口:

  • OpenCVCamera:适用于标准网络摄像头和 USB 摄像头
  • IntelRealSenseCamera:适用于 Intel RealSense 深度摄像头

两种类型的相机都实现了由 Camera 协议定义的通用接口,该接口提供了连接、断开连接和读取帧的方法。

相机接口类层次结构

请添加图片描述

OpenCVCamera

OpenCVCamera 类为使用 OpenCV VideoCapture 功能的 USB 摄像头提供了一个标准接口。它负责处理摄像头的发现、连接和帧读取。
主要功能:

  • 通过索引(例如 0、1、2)识别摄像头
  • 平台专属检测(Linux 与 macOS/Windows 平台有所不同)
  • 可配置分辨率、帧率和色彩模式
  • 适用于性能关键型应用程序的异步帧读取
  • 图像旋转功能
Example of OpenCVCamera usage

from lerobot.common.robot_devices.cameras.configs import OpenCVCameraConfig
from lerobot.common.robot_devices.cameras.opencv import OpenCVCamera
config = OpenCVCameraConfig(camera_index=0, fps=30, width=640, height=480)
camera = OpenCVCamera(config) camera.connect()
image = camera.read() # Synchronous read

or

image = camera.async_read() # Asynchronous read
camera.disconnect()

IntelRealSenseCamera

IntelRealSenseCamera 类提供对 Intel RealSense 深度摄像头的专用访问。与 OpenCVCamera 不同,它通过序列号而非索引进行标识,从而确保跨会话的一致性识别。

主要功能:

  • 通过序列号或名称识别摄像头
  • 深度感知功能
  • 用于故障排除的硬件复位选项
  • 线程-安全异步读取
  • 支持多种摄像头型号(D400 系列等)
Example of IntelRealSenseCamera usage

from lerobot.common.robot_devices.cameras.configs import IntelRealSenseCameraConfig
from lerobot.common.robot_devices.cameras.intelrealsense import IntelRealSenseCamera
config = IntelRealSenseCameraConfig(serial_number=128422271347, use_depth=True)
camera = IntelRealSenseCamera(config)
camera.connect()
color_image, depth_map = camera.read() # Returns both color and depth
camera.disconnect()

相机比较

请添加图片描述

电机接口

LeRobot 提供多种电机接口,主要支持机器人领域常用的 Dynamixel 伺服电机。

DynamixelMotorsBus

DynamixelMotorsBus 类用于管理连接到单总线的 Dynamixel 伺服电机的通信。它提供读写电机参数的方法,以及完善的标定系统。

主要特性:

  • 通过串口通信
  • 关节角度标定和安全限制
  • 多电机同步读写 位置、速度和电流控制
  • 自动错误检测和恢复
  • 电机接口架构

请添加图片描述

标定系统

标定系统负责将原始电机值转换为人类可理解的单位:

  • 对于旋转关节:角度范围 [-180, 180]
  • 对于线性关节(如夹爪):百分比范围 [0, 100]

系统处理:

  • 方向规范化(反转电机与正转电机)
  • 寻位偏移计算
  • 范围检查和自动校正
  • 不同单位制之间的转换
Example of DynamixelMotorsBus usage

from lerobot.common.robot_devices.motors.configs import DynamixelMotorsBusConfig
from lerobot.common.robot_devices.motors.dynamixel import DynamixelMotorsBus
config = DynamixelMotorsBusConfig(
port=“/dev/ttyUSB0”,
motors={“shoulder”: (1, “xl330-m077”), “elbow”: (2, “xl330-m077”)}
)
motors_bus = DynamixelMotorsBus(config)
motors_bus.connect()

Read current positions in degrees/percentage after calibration

positions = motors_bus.read(“Present_Position”)

Move motors to new positions

motors_bus.write(“Goal_Position”, positions + 10)
motors_bus.disconnect()

电机参数控制

请添加图片描述

机器人控制集成

硬件接口集成到 ManipulatorRobot 类中,该类提供用于控制带摄像头的机械臂的高级接口。

集成架构

请添加图片描述

关键集成点:

  • 初始化:根据配置创建电机总线和摄像头
  • 连接管理:所有设备连接/断开连接
  • 遥操作:主臂控制从臂
  • 观察捕获:读取电机状态和摄像头图像
  • 动作执行:向电机发送命令
Example of ManipulatorRobot integration

from lerobot.common.robot_devices.cameras.configs import OpenCVCameraConfig
from lerobot.common.robot_devices.motors.configs import DynamixelMotorsBusConfig
from lerobot.common.robot_devices.robots.configs import ManipulatorRobotConfig
from lerobot.common.robot_devices.robots.manipulator import ManipulatorRobot

Create robot with cameras and motors

robot_config = ManipulatorRobotConfig(
type=“koch”,
cameras={
“main”: OpenCVCameraConfig(camera_index=0)
},
leader_arms={
“main”: DynamixelMotorsBusConfig(
port=“/dev/ttyUSB0”,
motors={“shoulder”: (1, “xl330-m077”), “elbow”: (2, “xl330-m077”)} ) },
follower_arms={
“main”: DynamixelMotorsBusConfig(
port=“/dev/ttyUSB1”,
motors={“shoulder”: (1, “xl330-m077”), “elbow”: (2, “xl330-m077”)}
)
}
)
robot = ManipulatorRobot(robot_config)
robot.connect()

Teleoperation or policy control

observation = robot.capture_observation() robot.send_action(action)

or

observation, action = robot.teleop_step(record_data=True)
robot.disconnect()

常用实用程序和错误处理

硬件接口包含多个实用程序函数和错误处理机制:

实用程序函数

busy_wait(seconds):精确的时间控制,尤其是在 macOS 上,因为 time.sleep 可能不准确
safe_disconnect(func):装饰器,用于确保即使发生异常也能断开设备连接
find_cameras():通过索引或序列号发现可用的相机
find_motor_indices():扫描总线上已连接的电机

错误类别

RobotDeviceNotConnectedError:尝试使用未连接的设备时引发
RobotDeviceAlreadyConnectedError:尝试连接已连接的设备时引发
JointOutOfRangeError:关节位置超出其有效范围时引发

常用错误模式

请添加图片描述

小节

LeRobot 中的硬件接口提供了一种灵活统一的方式,可以与不同类型的摄像头和电机进行交互。通过抽象硬件特定的细节,这些接口允许开发能够在无需进行大量代码修改的情况下兼容各种硬件配置的机器人控制系统。

主要特性:

  • 跨不同硬件类型的通用接口模式
  • 全面的错误处理和恢复功能
  • 线程安全的异步操作
  • 用于一致单元的标定系统
  • 与高级机器人控制集成

这些接口构成了 LeRobot 框架中机器人远程操作、数据收集和策略执行的基础。

在此讲解如何在 LeRobot 框架中远程操控机器人并记录用于策略训练的数据集。远程操控可以直接控制机器人进行测试或数据收集,而记录则将机器人的运动、观察结果和动作捕获到结构化数据集中,用于策略训练或评估。

系统架构

远程操作和记录功能围绕 control_robot.py 脚本构建,该脚本通过统一的界面提供不同的控制模式。

请添加图片描述

遥控操作模式

遥控操作模式允许直接手动控制机器人。此模式适用于测试机器人硬件、进行动作实验或准备录制会话。

遥控操作进程

请添加图片描述

远程操作配置

远程操作可以通过 TeleoperateControlConfig 类进行配置,该类提供以下选项:

请添加图片描述

远程操作命令示例

无限频率下的基本远程操作:
python lerobot/scripts/control_robot.py \
–robot.type=so100 \
–control.type=teleoperate

有限频率下的远程操作模拟录制:
python lerobot/scripts/control_robot.py \
–robot.type=so100 \
–control.type=teleoperate \
–control.fps=30

录制模式

录制模式将机器人的观察结果和动作捕获到结构化数据集中。此模式对于收集机器人学习策略的训练数据至关重要。

录制过程

请添加图片描述

使用策略录制

可以使用预训练的策略来控制机器人进行录制,这对于评估策略性能非常有用。使用策略录制时,远程操作将被禁用,策略将根据观察结果生成动作。

请添加图片描述

录制配置

录制通过 RecordControlConfig 类进行配置,关键参数如下:

请添加图片描述

录制命令示例

录制单个测试片段:
python lerobot/scripts/control_robot.py \
–robot.type=so100 \
–control.type=record \
–control.fps=30 \
–control.single_task=“Grasp a lego block and put it in the bin.” \
–control.repo_id=username/test_dataset \
–control.num_episodes=1 \
–control.push_to_hub=True

录制完整数据集用于训练:
python lerobot/scripts/control_robot.py \
–robot.type=so100 \
–control.type=record \
–control.fps=30 \
–control.repo_id=username/training_dataset \
–control.num_episodes=50 \
–control.warmup_time_s=2 \
–control.episode_time_s=30 \
–control.reset_time_s=10

录制预训练策略用于评估:
python lerobot/scripts/control_robot.py \
–robot.type=so100 \
–control.type=record \
–control.fps=30 \
–control.single_task=“Grasp a lego block and put it in the bin.” \
–control.repo_id=username/eval_dataset \
–control.num_episodes=10 \
–control.warmup_time_s=2 \
–control.episode_time_s=30 \
–control.reset_time_s=10 \
–control.policy.path=outputs/train/policy_checkpoint/pretrained_model

回放模式

回放模式允许在实体机器人上回放之前录制的 episodes,这对于验证数据质量或演示录制的行为非常有用。

回放过程

请添加图片描述

例子回放命令

python lerobot/scripts/control_robot.py \
–robot.type=so100 \
–control.type=replay \
–control.fps=30 \
–control.repo_id=username/test_dataset \
–control.episode=0

键盘控制

录制过程中,键盘控制提供便捷的录制流程管理方式:

请添加图片描述

这些控制是使用 pynput 库实现的,并且可能需要 sudo 权限才能在某些环境中监视键盘事件。

录制过程中的数据流

如图展示录制过程中数据在系统中的流动方式:

请添加图片描述

特殊注意事项

图像处理

录制时,使用 AsyncImageWriter 类异步保存图像,以保持稳定的录制帧率。这对于确保机器人在处理高吞吐量图像数据的同时保持平稳运行至关重要。

用于写入图像的最佳进程数和线程数取决于系统功能:

  • 默认配置:每个摄像头 0 个进程和 4 个线程
  • 如果录制不稳定,调整这些值可能会有所帮助。

恢复录制

可以使用 --control.resume=true 标志恢复录制会话。这对于在多个会话中继续收集数据或从中断中恢复非常有用。

遥控机器人

对于像 LeKiwi 这样使用遥控器操作的机器人,该脚本提供一个特殊的 remote_robot 模式,该模式在机器人的边缘设备上运行:
python lerobot/scripts/control_robot.py \
–robot.type=lekiwi \
–control.type=remote_robot

与 LeRobotDataset 集成

记录过程会创建 LeRobotDataset 格式的数据集,可直接用于训练策略。这些数据集包括:

  • 来自摄像头的图像观测值
  • 机器人状态信息
  • 机器人或策略执行的操作
  • 任务描述

记录的数据集可以使用可视化工具进行可视化:
python lerobot/scripts/visualize_dataset.py \
–repo-id username/dataset_name \
–episode-index0

结论

LeRobot 的远程操作和记录系统提供一个全面的框架,用于控制机器人和收集高质量的数据集。无论是手动操作机器人、录制演示以进行策略训练,还是评估已训练的策略,该系统都能提供灵活的配置选项和高效的数据收集流程。

相关文章:

LeRobot的机器人控制系统(下)

目的和范围 机器人控制系统是 LeRobot 框架的核心组件,提供用于操作、标定和记录物理机器人数据的接口。该系统支持远程操作、记录演示数据集、重放动作以及在真实机器人上运行已训练的策略。它充当用户、物理机器人硬件和训练流程之间的桥梁。本文介绍机器人控制系…...

Linux Docker安装【再探完美版教程】

Dokcer安装 文章目录 Dokcer安装安装前准备安装前设置yum网络镜像源【重要】查看服务器系统版本以及内核版本查看服务器内核版本安装依赖包:设置阿里云docker-ce镜像源 安装Dockerdocker-ce安装启动docker并设置开机自启配置阿里云镜像测试: Docker概念&…...

Java-根据路径获取JSON字符串的value值

实现内容 入参: 一串json的字符串,根据传入的字符串路径和想要获取此路径下的key值 出参: 此路径下的key的value值 实现原理 采用一层一层获取的方式,判断第一层并且获取第一层的数据,放入到数组中,将该数组放到下一次循环,再获取下一层的数据 实现方法 /*** 根据路径获取…...

【小呆的随机振动力学笔记】随机过程基础【一】

文章目录 1. 随机过程基础1.1 随机过程的概率分布1.2 随机过程的统计特征1.3 平稳随机过程1.4 遍历过程平稳随机过程 1. 随机过程基础 \quad\quad 上一节,我们主要回顾了概率论知识,接下来我们来回顾随机过程基础理论(或者叫随机场&#xff0…...

Java 内存模型中的读、写屏障

目录 1. 基本概念 1.1、读屏障 (Load Barrier) 1.2、写屏障 (Store Barrier) 1.3、咖啡店例子 2. 常见内存屏障 2.1、volatile 1、缓存可见性 2、指令重排序 3、内存屏障 2.2、final 2.3、synchronized关键字 2.4、手动内存屏障 3、不同屏障类型对比 4、实…...

AI 多 Agent 图形化开发深度解析:iVX IDE 与主流产品技术架构对比研究

随着人工智能技术的发展,软件开发正从手工编码向智能辅助开发演进。在 AI 多 Agent 图形化开发领域,iVX IDE 与 GitHub Copilot、Tabnine、CodeGeeX 等主流产品代表了不同的技术路线。本文从技术架构、功能实现、性能表现、生态建设等维度,对…...

微服务中的 AKF 拆分原则:构建可扩展系统的核心方法论

在数字化浪潮的推动下,互联网应用规模呈指数级增长,传统单体架构逐渐暴露出难以扩展、维护成本高等问题,微服务架构应运而生并成为企业应对复杂业务场景的主流选择。然而,随着业务的不断扩张和用户量的持续增加,如何确…...

MySQL迁移SSL报错

文章记录了之前tdsql迁移IDC过程中遇到的小问题 环境 xboss业务: tdsql未启用SSL, IDC-mysql启用了SSL: 原因分析 1, 迁移前: 因为tdsql未启用ssl, 且应用未显式配置ssl JDBC默认使用非SSL连接,因此可以正…...

Mysql的主从同步

一主一从 IP地址主机名master节点192.168.10.200mysql200slave节点192.168.10.201mysql201 master节点操作 配置文件增加两行参数 [rootmysql200 ~]# tail -n 2 /etc/my.cnf.d/mysql-server.cnf log-bin/mylog/mysql200 server-id200 [rootmysql200 ~]# systemctl restart …...

云原生微服务的前世今生

目录 Part1 时代背景 Part2 何为微服务? Part3 微服务出现的意义​ Part4 企业应用 京东:国内电商领域的微服务实践​ 阿里:微服务在复杂业务场景中的应用​ Part5 Istio:服务网格时代的微服务治理中枢​ Istio 的技术定位…...

Python之虚拟环境

文章目录 Python之虚拟环境虚拟环境核心概念为什么需要虚拟环境?虚拟环境注意事项 创建虚拟环境使用 venv (Python 3.3 内置)使用 virtualenv (第三方工具,支持Python 2/3)与 venv创建方式的区别Python 版本支持功能与兼容性依赖关系和性能命令行工具创建…...

【Java高阶面经:数据库篇】15. 零停机数据迁移:从双写到一致性校验

一、迁移架构设计:双写+增量同步的三层防护模型 1.1 核心架构流程图 #mermaid-svg-MfnakvBNrtFScrMe {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MfnakvBNrtFScrMe .error-icon{fill:#552222;}#mermaid-svg-Mf…...

车载以太网网络测试-27【SOME/IP-SD简述】

文章目录 1 摘要2 SOME/IP-SD协议介绍2.1 定义与作用2.2 SOMEIP/SD协议通俗易懂的理解2.2.1 SOMEIP/SD协议是什么?2.2.2 通信流程(简化)2.2.3 车载功能示例2.2.4 类比理解 2.3 SOME/IP-SD报文结构2.3.1 Flags2.3.1.1 REBOOT (Bit 7)2.3.1.2 U…...

Ubuntu 22.04上升级Node.js版本

在Ubuntu 22.04上升级Node.js版本有几种方法,推荐使用NVM(Node Version Manager),因为它可以让你轻松管理多个Node.js版本。 方法1: 使用NVM(推荐) 1. 安装NVM # 下载并安装NVM curl -o- https://raw.gi…...

软件设计师“面向对象设计”真题考点分析——求三连

一、考点分值占比与趋势分析 综合知识历年考察统计 年份考题数分值占比考察重点2018334%继承类型、设计原则2019445.3%多态实现、类关系2020556.7%设计模式应用、接口隔离2021334%消息通信、封装特性2022668%开闭原则、组合模式2023556.7%模板方法、适配器模式2024445.3%单一…...

flutter dart 函数语法

以下是 Dart 语言中函数语法的 详细实例说明,涵盖了所有常用写法 基本语法参数类型(必选、可选、命名、默认值)匿名函数、箭头函数高阶函数(函数作为参数/返回值)异步函数(async / await) 1. …...

鸿蒙Flutter实战:24-混合开发详解-4-初始化Flutter

概述 将 Flutter 模块添加至宿主鸿蒙项目中后,接下需要实现页面跳转、消息通信等功能,本文重点介绍如何初始化 Flutter。 项目配置 添加依赖 编辑 ohos_app/oh-package.json 文件 如果通过 Har 包方式引入 Flutter 模块,则需要添加如下内…...

微信小程序之Promise-Promise初始用

我们来尝试使用Promise。 1、需求&#xff0c;做个抽奖的按钮&#xff0c; 抽奖规则&#xff1a; 30%的几率中奖&#xff0c;中奖会提示恭喜恭喜&#xff0c;奖品为10万 RMB 劳斯莱斯优惠券&#xff0c;没中奖会提示再接再厉。 2、先搭界面&#xff1a; <view class&qu…...

工业 / 农业 / AR 场景怎么选?Stereolabs ZED 双目3D相机型号对比与选型建议

Stereolabs ZED 相机系列为视觉感知领域提供了多种创新解决方案&#xff0c;适用于不同应用场景。选择合适的 ZED 相机型号&#xff0c;需综合考虑分辨率、深度感知范围、接口类型等因素。 Stereolabs ZED 相机产品系列概览 ZED&#xff1a;首款立体视觉相机&#xff0c;专为高…...

(Git) 稀疏检出(Sparse Checkout) 拉取指定文件

文章目录 &#x1f3ed;作用&#x1f3ed;指令总览&#x1f477;core.sparseCheckout&#x1f477;sparse-checkout 文件 &#x1f3ed;实例演示⭐END&#x1f31f;交流方式 &#x1f3ed;作用 类似于 .gitignore 进行文件的规则匹配。 一般在需要拉取大型项目指定的某些文件…...

Nginx 部署前端项目dist文件到局域网然后ngrok部署到公网

①项目里面 npm run build 生成的dist文件 ②下载nginx: download 将dist文件夹放入html文件夹中 ③conf修改配置 里面有nginx.conf 文本修改④在此目录下 打开cmd 输入 start nginx.exe 启动代理 ⑤http://localhost:90/index.html即可或者域名换成你的ip地址也可以 …...

【sylar-webserver】9 网络模块

目录 Address 类图 知识点 常用结构体 常用函数 Socket 类图 主要功能 初始化 socket 流程&#xff1a; ByteArray 知识点 zigzag 算法 TLV 编码结构 Stream 类图 Stream 流结构&#xff0c;提供字节流读写接口 SocketStream TcpServer 类图 主要功能 Address…...

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit2

RKNN Toolkit2是用来将onnx模型转成rknn专用模型&#xff0c;并可通过RKNN Toolkit Lite2或者RKNPU调用NPU进行加速计算的工具。 一开始我安装很多次都无法成功安装。后来跟售后技术对接&#xff0c;必须是PC平台的Linux环境才可以。我的电脑是windows&#xff0c;所以我需要用…...

第六部分:阶段项目 5:构建 NestJS RESTful API 服务器

现在&#xff0c;是时候将你学到的 NestJS 知识付诸实践&#xff0c;构建一个简单的 RESTful API 服务器了。我们将基于第四阶段的项目&#xff08;博客文章 API 或任务管理 API&#xff09;&#xff0c;使用 NestJS 的方式重新实现它。 选择以下一个项目&#xff1a; 项目选…...

【工作流】Fastgpt配置豆包模型-火山引擎

V4.9.7 Fastgpt现在不通过oneapi 来配置模型和渠道了&#xff0c; 可以直接在页面进行设置 首先在账号- 模型提供商里面 填入豆包的信息&#xff1a; 渠道名随便填&#xff0c;厂商选豆包&#xff0c; 然后选3个模型&#xff0c;如图所示 如果没有填入模型映射的话是没办法 …...

vite搭建vue3项目及相关配置

1.npm create vite 设置你的项目名&#xff0c;选择框架&#xff0c;选择语言 我此处选的为Vue typescripe 2.按照命令去执行 cd vite-vue3-app 进入项目文件&#xff0c;npm install 安装依赖&#xff0c;npm run dev 运行项目 此处由于node、npm版本导致报错问题如图 在…...

web实验(2)

实验1 搭建nginxssl的加密认证web服务器 第一步&#xff1a;准备工作 # 恢复快照 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# systemctl disable firewalld [rootserver ~]# yum install nginx mod_ssl -y [r…...

数字孪生技术如何重塑能源产业?

近年来&#xff0c;全球能源行业正步入一个前所未有的转型期。一方面&#xff0c;“双碳”目标驱动能源结构向低碳化、清洁化发展&#xff1b;另一方面&#xff0c;新能源比例快速上升&#xff0c;给传统电力系统带来巨大的不确定性。与此同时&#xff0c;数字化浪潮也席卷能源…...

你通俗易懂的理解——线程、多线程与线程池

一&#xff1a;异常处理 1.1 异常概述 &#xff08;1&#xff09;场景 &#xff08;2&#xff09;定义 &#xff08;3&#xff09;异常抛出机制 Java把不同的异常用不同的类表示 &#xff08;4&#xff09;如何对待异常 1.2 常见异常类 &#xff08;1&#xff09;Throwable &am…...

spring+tomcat 用户每次发请求,tomcat 站在线程的角度是如何处理用户请求的,spinrg的bean 是共享的吗

对于 springtomcat 用户每次发请求&#xff0c;tomcat 站在线程的角度是如何处理的 比如 bio nio apr 等情况 tomcat 配置文件中 maxThreads 的数量是相对于谁来说的&#xff1f; 以及 spring Controller 中的全局变量:各种bean 对于线程来说是共享的吗&#xff1f; 一、Tomca…...

机器人坐标系标定

机器人坐标系标定 机器人坐标系标定 1. 知识目标 理解机器人坐标系的定义掌握机器人坐标系的分类 2. 技能目标 能够正确标定机器人坐标系 3. 机器人坐标系的作用 代表不同的物体或边界示例&#xff1a; 相对于桌子、弓箭、坯料、其他机器或边界移动 用途&#xff1a; 使用…...

VR光伏车棚虚拟仿真系统:开启绿色能源新视界​

VR 光伏车棚虚拟仿真系统&#xff0c;是一种集成了先进计算机技术与前沿虚拟现实技术的创新工具。它的核心在于&#xff0c;通过数字化手段高度逼真地模拟光伏车棚电站从规划建设到实际运行的全流程情境 &#xff0c;为相关人员提供一个沉浸式、交互式的虚拟操作空间。​ 借助 …...

阿里云服务器 篇十三(加更):Web书签(链接共享和迷你导航):改为使用宿主机DB等优化

文章目录 系列文章搭建 LinkAce将docker-compose配置迁移到项目目录添加脚本只保留最新备份改为使用宿主机DB获取当前LinkAce数据库备份导入LinkAce数据库备份创建数据库账号修改容器内MySQL客户端连接配置:禁用SSL连接修改 Docker 相关配置回滚和彻底清除数据卷改为使用宿主机…...

Typescript学习教程,从入门到精通,TypeScript 包装类与包装对象语法知识点及案例代码(10)

TypeScript 包装类与包装对象语法知识点及案例代码 在 TypeScript 中&#xff0c;包装类&#xff08;Wrapper Classes&#xff09;和包装对象&#xff08;Wrapper Objects&#xff09;是处理基本数据类型&#xff08;如 Boolean、Number、String&#xff09;的重要概念。这些包…...

若依代码生成

1。数据库&#xff0c;自己先创建好表和数据 启动访问页面&#xff0c;导入你的表 圈红的改成自己的业务名 生成后压缩&#xff0c;执行数据库脚本.sql文件 2。前台导入直接复制粘贴src 3。后台导入 复制main文件夹下的两个文件夹到 ruoyi-admin\src\main 如果不能访问在修改…...

Vue3 打印表格、Element Plus 打印、前端打印、表格导出打印、打印插件封装、JavaScript 打印、打印预览

&#x1f680; Vue3 高级表格打印工具封装&#xff08;支持预览、分页、样式美化&#xff09; 关键词&#xff1a;Vue3 打印表格、Element Plus 打印、前端打印、表格导出打印、打印插件封装、JavaScript 打印、打印预览 在企业级应用中&#xff0c;我们经常遇到打印报表、导出…...

实现一个前端动态模块组件(Vite+原生JS)

1. 引言 在前面的文章《使用Vite创建一个动态网页的前端项目》中我们实现了一个动态网页。不过这个动态网页的实用价值并不高&#xff0c;在真正实际的项目中我们希望的是能实现一个动态的模块组件。具体来说&#xff0c;就是有一个页面控件同时在多个页面中使用&#xff0c;那…...

面向对象编程在 JavaScript 中的实践

引言 前端开发正随着应用复杂度增加而向更严谨的架构模式演进。JavaScript 作为一种多范式语言&#xff0c;其面向对象特性为构建可维护、可扩展的大型应用提供了强大基础。 一、JavaScript 中的对象模型演化 对象字面量&#xff1a;最基础的封装 对象字面量是 JavaScript …...

Android 内存溢出(OOM)的 Kotlin 排查与优化指南

内存溢出&#xff08;Out Of Memory, OOM&#xff09;是 Android 开发中常见且棘手的问题&#xff0c;尤其在处理大图、复杂数据或内存泄漏时。本文将通过 Kotlin 代码示例 和工具使用&#xff0c;提供一套比较完整的排查与优化方案。 一、检测工具&#xff1a;定位内存问题根源…...

Docker常用命令介绍

Docker常用命令 1、本地镜像管理 save 命令 将一个或多个 Docker 镜像保存到一个 tar 归档文件中&#xff0c;以便在其他环境中分发或备份。 # 语法&#xff1a;docker save [OPTIONS] IMAGE [IMAGE...]# 保存单个镜像到文件 docker save -o myimage.tar myimage:latest# 保…...

(高级)高级前端开发者指南:框架运用与综合实战

当您已经掌握了HTML5、CSS3和JavaScript的基础知识后&#xff0c;接下来就是学习现代前端框架和性能优化的高级阶段。本文将重点介绍Vue.js/React的组件化开发、状态管理和路由配置&#xff0c;以及前端性能优化的核心技巧。通过丰富的代码示例和详细讲解&#xff0c;帮助您在实…...

边缘计算正在重新定义物联网的未来——你的设备还在“等云“吗?⚡

“数据不动算法动,算法不动代码动”——这句话正在成为物联网时代的新铁律。 当我们谈论物联网设备性能优化时,大多数开发者第一反应还是"上云"。但现实往往残酷:网络延迟让实时控制变成了"实时等待",带宽成本让企业CFO眉头紧锁,数据安全让合规部门夜…...

std::initialzer_list 与花括号{}数据列表

author: hjjdebug date: 2025年 05月 22日 星期四 15:50:23 CST descrip: std::initialzer_list 与花括号{}数据列表 文章目录 1.{数值列表}是什么?1.1 数组初始化 时 &#xff0c; 称为数组初始化列表1.2. 当用于容器时, 称为容器初始化列表1.3. 对于结构体或类&#xff0c;{…...

C++初阶-list的使用2

目录 1.std::list::splice的使用 2.std::list::remove和std::list::remove_if的使用 2.1remove_if函数的简单介绍 基本用法 函数原型 使用函数对象作为谓词 使用普通函数作为谓词 注意事项 复杂对象示例 2.2remove与remove_if的简单使用 3.std::list::unique的使用 …...

从单链表 list 中删除第 i 个元素--Python

从单链表 list 中删除第 i 个元素 一、问题引入二、解题步骤1.思维导图2.解题步骤 三、代码实现四、个人总结 一、问题引入 请编写程序&#xff0c;将 n 个整数顺次插入一个初始为空的单链表的表头。随后对任意给定的位序 i&#xff0c;删除链表中第 i 个结点。注意&#xff1…...

GraphPad Prism工作表的基本操作

《2025新书现货 GraphPad Prism图表可视化与统计数据分析&#xff08;视频教学版&#xff09;雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism中包含5种工作表&#xff0c;每种工作表的基本操…...

C++初阶-list的使用1

目录 1.std::list简介 2.成员函数 2.1构造函数的使用 2.2list::operator的使用 3.迭代器 4.容量 4.1list::empty函数的使用 4.2list::size函数的使用 4.3list::max_size函数的使用 5.元素访问 6.修饰符 6.1list::assign函数的使用 6.2push_back和pop_back和push_fr…...

文献解读-病理影像多模态模型预测乳腺癌新辅助化疗的病理完全反应

期刊&#xff1a;Science Advances 影响因子&#xff1a;11.7&#xff0c;中科院1区Top 发表时间&#xff1a;2025年4月30日 概要&#xff1a;首都医科大学宣武医院放射科卢洁教授团队近日&#xff08;2025年5月&#xff09;在中科院1区top期刊《Sci Adv》&#xff08;IF11.7&a…...

Docker-Mysql

查看容器的详细信息 docker inspect mysql-8.4.5 Docker 启动 local-mysql 的完整命令 docker run -d \--name local-mysql \-e MYSQL_ROOT_PASSWORDyour_root_password \-v /AllenDocker/mysql/data:/var/lib/mysql \-p 3306:3306 \--restart unless-stopped \mysql:8.4.5 验…...

鸿蒙进阶——CMakelist、GN语法简介及三方库通用移植指南

文章大纲 引言一、GN常用的内置变量二、GN常用的内置函数三、CMake 重要语法1、生成动态库2、生成静态库3、生成OBJECT 库4、重要的函数和模块4.1、add_definitions4.2、execute_process4.3、add_dependencies4.4、install4.5、FetchContent 四、GN 重要语法1、编译Target2、预…...