第 2.1 节: 机器人仿真环境选择与配置 (Gazebo, MuJoCo, PyBullet)
在真实机器人硬件上进行开发和测试既耗时又存在风险(硬件损坏、安全问题)。机器人仿真环境提供了一个虚拟的沙盒,让开发者能够在计算机中模拟机器人的物理行为、传感器读数和环境互动,极大地加速了开发、测试和调试过程。特别是对于像人形机器人这样复杂的平台,先在仿真环境中验证算法是必不可少的步骤。
本节将介绍几种主流的机器人仿真环境,分析它们的特点和对 Python 的支持,并推荐适合 G1 人形机器人足球项目的平台,指导你如何通过 Python 接口控制仿真机器人。
2.1.1 介绍不同仿真环境的特点、优劣势及其对 Python 的支持程度
选择合适的仿真环境取决于你的项目需求、对物理精度的要求以及偏好的开发生态系统。以下是几种常见的机器人仿真器:
-
Gazebo
- 特点: 功能强大的 3D 动态仿真器,集成了高性能的物理引擎(如 ODE, Bullet, Simbody, DART),先进的图形渲染,以及丰富的传感器模型仿真(摄像头、Lidar、IMU、力/力矩传感器等)。特别值得一提的是,Gazebo 与 ROS (Robot Operating System) 深度集成,是 ROS 生态系统中最常用的仿真器。
- 优劣势:
- 优势: 与 ROS 集成紧密,易于模拟基于 ROS 的真实机器人系统;仿真传感器模型丰富且真实;支持多种机器人模型格式(URDF, SDF);拥有庞大的用户社区和资源;适合复杂场景和多机器人仿真;可视化效果较好。
- 劣势: 安装和配置可能相对复杂,尤其是在非 Ubuntu 系统上;对计算机硬件要求较高;有时物理仿真精度需要仔细调整;XML 格式的机器人和世界文件(URDF/SDF)可能比较冗长。
- Python 支持程度: Gazebo 本身不是直接用 Python 控制的。你通常通过 ROS 的 Python API (rospy) 来与 Gazebo 中的机器人模型交互。例如,通过 ROS 话题发送关节指令,订阅传感器数据,或者调用 ROS 服务来控制仿真环境(如生成物体)。通过
ros_control
等 ROS 包,Python 可以非常方便地控制 Gazebo 中的关节执行器。对 Python 的支持非常成熟,但依赖于 ROS。
-
MuJoCo (Multi-Joint dynamics with Contact)
- 特点: 一个物理仿真引擎,专注于高性能、高精度的物理模拟,特别擅长处理复杂的接触动力学。它最初是为机器人控制和生物力学研究设计的,在强化学习 (Reinforcement Learning - RL) 领域因其稳定的物理表现而备受青睐。
- 优劣势:
- 优势: 物理仿真速度快且精度高,尤其在处理接触和约束方面表现出色;对于需要精确物理模型的控制和 RL 任务非常适用;有官方提供的 Python 接口。
- 劣势: 相比 Gazebo,原生可视化功能较弱(虽然可以与其他渲染库结合);对标准机器人软件框架(如 ROS)的原生支持不如 Gazebo ;搭建复杂的环境和传感器模型可能不如 Gazebo 直观方便;虽然现在是开源的,但曾经是商业软件,用户群体在通用机器人应用方面可能不如 Gazebo 广泛。
- Python 支持程度: 官方提供高质量的 Python 绑定,可以直接在 Python 环境中初始化仿真、加载模型、运行物理步进、获取状态和发送控制指令。对 Python 的支持非常直接和高效。
-
PyBullet
- 特点: 开源的 Python 库,提供快速的物理仿真(基于 Bullet 物理引擎)和 OpenGL 渲染。它设计得易于安装和使用,特别适合快速原型开发、机器人学入门教学以及强化学习。
- 优劣势:
- 优势: 完全基于 Python,安装和使用极其方便 (
pip install pybullet
);物理仿真速度快,适合大规模实验(如 RL);支持常见的机器人模型格式 (URDF, SDF, MJCF);内置可视化工具;可以进行软体物理仿真;对 Python 的支持非常原生和友好。 - 劣势: 相比 Gazebo,传感器模型和环境编辑功能相对基础;可视化效果可能不如 Gazebo 精致;社区和生态系统不如 Gazebo 庞大(但在 RL 领域很受欢迎);与 ROS 的集成不如 Gazebo 紧密(虽然可以通过桥接实现)。
- 优势: 完全基于 Python,安装和使用极其方便 (
- Python 支持程度: 原生 Python 库,所有功能都通过 Python API 调用实现。对 Python 的支持是其最大的特点和优势之一。
2.1.2 选择适合 G1 和足球项目的仿真平台 (推荐 Gazebo + ROS 或 PyBullet)
考虑到 G1 人形机器人可能使用的软件栈以及足球项目的需求,我们推荐以下平台:
-
首选推荐: Gazebo + ROS
- 理由:
- 与 G1 实际平台的高匹配度: Unitree Robotics 的机器人通常提供 ROS 支持。如果在仿真环境中使用 Gazebo + ROS,你的代码和对机器人的控制思路将与未来在真实 G1 硬件上使用 ROS 时保持高度一致,极大地降低了从仿真到真实机器人的迁移难度。
- 强大的传感器仿真: 足球项目需要精确的视觉(摄像头)和可能的距离(Lidar)感知,Gazebo 能够很好地模拟这些传感器,生成接近真实的仿真数据。
- ROS 生态系统优势: 可以方便地利用 ROS 中现有的感知、规划、控制等功能包和工具。
- 关节控制方便: 通过标准的
ros_control
框架,可以使用 Python (rospy) 发送关节位置、速度或力矩指令,并获取关节状态。 - 环境搭建: 可以在 Gazebo 中方便地搭建带有球门、边界的足球场地环境。如果 Unitree 提供 G1 的 Gazebo 模型,那就更方便了。即使没有,也可以使用标准的 URDF 或 SDF 格式加载机器人模型。
- 理由:
-
备选推荐: PyBullet
- 理由:
- 易于上手和快速原型: 如果你希望快速开始用 Python 进行仿真实验,或者对 ROS 不熟悉/暂时不打算深入,PyBullet 是一个非常好的选择。安装简单,全 Python API 调用直观。
- 适合控制和 RL: 如果你的足球项目侧重于开发新的步态算法、平衡控制或使用强化学习来训练踢球策略,PyBullet 的物理性能和 Python 原生支持非常有吸引力。
- 模型兼容性: 支持加载 URDF 等机器人模型,理论上可以使用 G1 的模型文件。
- 限制: 与 G1 实际 ROS 软件栈的直接对应性不如 Gazebo + ROS;需要自己实现或寻找传感器数据到足球任务所需信息的转换逻辑。
- 理由:
总结: 对于与 G1 机器人实际开发流程紧密结合,并充分利用 ROS 生态系统而言,Gazebo + ROS 是更推荐的学习平台。如果你的主要目标是快速进行物理仿真实验或强化学习研究,PyBullet 也是一个优秀且易用的选择。本教程后续内容将以 Gazebo + ROS 作为主要的仿真环境进行讲解和实践示例,因为它更贴近大多数现代机器人平台的开发流程。
2.1.3 Python 相关: 学习使用 Python 接口控制仿真环境
选择了仿真环境后,下一步就是学习如何用 Python 编写代码来控制仿真中的 G1 机器人。
使用 Gazebo + ROS + Python 控制 G1 (通过 ros_control):
这是最常见的控制方式。你的 Python 代码是一个 ROS 节点,通过 ROS 话题和消息与 Gazebo 中运行的 G1 机器人模型进行通信。机器人模型的关节执行器通常由 Gazebo 的 ros_control
插件驱动。
- 核心思想:
- 你的 Python 节点发布关节指令消息(如目标位置、速度或力矩)到
ros_control
监听的 ROS 话题。 - 你的 Python 节点订阅关节状态、IMU、摄像头、Lidar 等传感器数据话题。
ros_control
控制器接收指令,计算出力/力矩,驱动 Gazebo 中的仿真关节。- Gazebo 进行物理仿真,更新关节状态和传感器数据,并通过 ROS 话题发布出去。
- 你的 Python 节点发布关节指令消息(如目标位置、速度或力矩)到
- Python API (rospy) 的使用:
- 如 1.3 节所述,你需要使用
rospy
库来初始化 ROS 节点,创建话题发布者和订阅者。 - 发送关节指令:
- 如果你使用位置控制,可能需要发布
trajectory_msgs/JointTrajectory
消息(对于轨迹)或简单的自定义消息。 - 如果你使用力矩控制(对于人形机器人更常用),可能需要发布包含每个关节目标力矩的自定义消息类型(例如 G1 厂家提供的消息类型,如 1.3 节示例中的
unitree_msgs/MotorCmd
)。 - 你需要知道你的 G1 Gazebo 模型上运行的是哪种
ros_control
控制器(如 PositionJointInterface, EffortJointInterface)以及它们对应的 ROS 话题名称。这些信息通常在 G1 的 ROS 包或 Gazebo 模型文件中定义。
# 概念代码 - 发送关节力矩指令 (假设话题和消息类型) import rospy from unitree_msgs.msg import MotorCmd # 假设的消息类型# ... 初始化 ROS 节点 ... joint_command_pub = rospy.Publisher('/g1/joint_controller/commands', MotorCmd, queue_size=10) # 假设话题名# ... 在循环或函数中 ... cmd_msg = MotorCmd() cmd_msg.joint_name = ["joint1", "joint2", ...] # 关节名称列表 cmd_msg.tau_ff = [tau1, tau2, ...] # 前馈力矩列表joint_command_pub.publish(cmd_msg)
- 如果你使用位置控制,可能需要发布
- 读取传感器数据:
- 订阅
/g1/joint_states
话题(消息类型sensor_msgs/JointState
)获取关节位置、速度、力矩。 - 订阅
/g1/imu
话题(消息类型sensor_msgs/Imu
)获取 IMU 数据。 - 订阅摄像头话题(通常是
/g1/camera/image_raw
,消息类型sensor_msgs/Image
)和 Lidar 话题(通常是/g1/scan
或/g1/pointcloud
,消息类型sensor_msgs/LaserScan
或sensor_msgs/PointCloud2
)。
# 概念代码 - 订阅并读取关节状态 (回调函数如 1.3 节所示) import rospy from sensor_msgs.msg import JointState# ... 初始化 ROS 节点和回调函数 ... rospy.Subscriber('/g1/joint_states', JointState, joint_state_callback) # 假设话题名# ... 在主循环中保持 ROS 运行 ... rospy.spin()
- 订阅
- 如 1.3 节所述,你需要使用
- 实践步骤 (需要提前安装 ROS, Gazebo, G1 Gazebo 模型):
- 安装 ROS 和 Gazebo: 遵循官方 ROS Wiki 的安装教程在你选择的 Ubuntu 版本上安装 ROS 和 Gazebo。
- 安装 G1 机器人的 ROS/Gazebo 包: 通常由 Unitree Robotics 提供。你需要获取并将其放置在你的 ROS 工作空间中进行编译。这些包会包含 G1 的机器人模型文件 (URDF/SDF)、
ros_control
配置以及 Gazebo 启动文件。 - 启动 Gazebo 仿真环境: 打开终端,source 你的 ROS 工作空间,然后使用 ROS 的
roslaunch
命令启动 G1 机器人的 Gazebo 仿真。例如:roslaunch g1_description g1.launch
或roslaunch g1_gazebo g1_empty_world.launch
(具体命令取决于 G1 包的结构)。 - 启动
ros_control
控制器: 可能需要单独启动控制管理器和特定的关节控制器。例如:roslaunch g1_control g1_control.launch
。 - 编写和运行 Python 控制节点: 创建一个 Python 脚本,按照 1.3 节和本节介绍的 ROS Python API 使用方法,编写你的控制逻辑。在另一个终端中运行你的 Python 节点:
rosrun your_package_name your_script_name.py
。
使用 PyBullet + Python 控制 G1:
这种方式更直接,完全在 Python 环境中完成。
- 核心思想:
- 你的 Python 脚本直接调用 PyBullet 库提供的函数来加载模型、运行仿真步进、获取状态和发送控制指令。
- Python API (PyBullet) 的使用:
- 安装:
pip install pybullet
- 基本使用流程: Python
# 概念代码 - 使用 PyBullet 控制 G1 (需要 G1 的 URDF/SDF 文件) import pybullet as p import pybullet_data import time import numpy as np# 1. 连接到物理服务器 # p.connect(p.GUI) # GUI 模式,显示仿真窗口 p.connect(p.DIRECT) # DIRECT 模式,无 GUI,适合高速运行或 RL# 2. 添加资源路径(可选,如果模型文件在特定目录) p.setAdditionalSearchPath(pybullet_data.getDataPath()) # 添加 PyBullet 内置模型路径# 3. 设置仿真环境参数 p.setGravity(0, 0, -9.81) # 设置重力 p.setTimeStep(1./240.) # 设置仿真步长# 4. 加载地面模型 (可选) planeId = p.loadURDF("plane.urdf")# 5. 加载 G1 机器人模型 # !!! 你需要获取 G1 机器人的 URDF 或 SDF 文件路径 !!! g1_start_pos = [0, 0, 1.0] # 机器人起始位置 g1_start_orientation = p.getQuaternionFromEuler([0, 0, 0]) # 起始姿态 # 假设 G1 模型文件名为 'g1_robot.urdf' 并且在 pybullet 可以访问到的路径中 try:g1_id = p.loadURDF("g1_robot.urdf", g1_start_pos, g1_start_orientation)rospy.loginfo("G1 robot model loaded in PyBullet.") except p.error as e:rospy.logerr(f"Failed to load G1 URDF: {e}. Make sure 'g1_robot.urdf' is in a searchable path.")exit() # 如果模型加载失败则退出# 获取关节信息 num_joints = p.getNumJoints(g1_id) joint_names = [p.getJointInfo(g1_id, i)[1].decode('utf-8') for i in range(num_joints)] print(f"Loaded G1 with {num_joints} joints: {joint_names}")# 查找特定关节的 ID (示例,你需要知道关节的准确名称) try:left_shoulder_pitch_id = joint_names.index("left_shoulder_pitch_joint") # 假设关节名称 except ValueError:left_shoulder_pitch_id = -1 # 关节未找到print("Warning: left_shoulder_pitch_joint not found.")# 6. (可选) 加载足球模型和球门模型 ball_start_pos = [2.0, 0, 0.1] # 假设球的起始位置 # 假设球的模型是 sphere2.urdf (PyBullet 内置) 或你自己的模型 ball_id = p.loadURDF("sphere2.urdf", basePosition=ball_start_pos, globalScaling=0.1) # 调整 scaling 使球大小合适# 球门模型可能需要自己创建或加载# 7. 仿真主循环 print("Starting PyBullet simulation loop...") for i in range(1000): # 运行 1000 个仿真步# --- 感知:获取传感器数据/状态 ---# 获取所有关节状态 (位置, 速度, 反馈力矩, 电机扭矩)joint_states = p.getJointStates(g1_id, list(range(num_joints)))# 你可以根据索引或名称解析出特定关节的状态# 例如:left_shoulder_pitch_state = joint_states[left_shoulder_pitch_id]# print(f"Step {i}: Joint '{joint_names[left_shoulder_pitch_id]}' position: {joint_states[left_shoulder_pitch_id][0]:.2f}") # 示例打印关节位置# 获取 IMU 数据 (通常需要计算,基于 link 的速度和姿态)# 获取 base link (躯干) 的姿态和速度base_state = p.getBasePositionAndOrientation(g1_id)base_velocity, base_angular_velocity = p.getBaseVelocity(g1_id)# 姿态是四元数 base_state[1],角速度是 base_angular_velocity# 线加速度需要跟踪一段时间的速度变化来计算# 获取足部力/力矩 (通常通过末端关节的接触点计算)# contact_points = p.getContactPoints(bodyA=g1_id, bodyB=planeId, linkIndexA=left_foot_link_id) # 假设有足部 link ID# ... 处理接触点数据计算力 ...# 获取球的位置ball_pos, _ = p.getBasePositionAndOrientation(ball_id)# print(f"Step {i}: Ball position: {ball_pos}")# --- 规划与决策 ---# 根据获取的状态信息 (关节角度, IMU, 球位置等), 在这里编写你的控制算法# 例如:简单的位置控制指令target_pos = 0.8 # 目标角度 (弧度)max_force = 10.0 # 最大电机力# --- 执行器控制:发送控制指令 ---# PyBullet 支持多种控制模式 (位置, 速度, 力矩)if left_shoulder_pitch_id != -1:p.setJointMotorControl2(g1_id,left_shoulder_pitch_id,p.POSITION_CONTROL, # 控制模式targetPosition=target_pos, # 目标位置maxVelocity=1.0, # 最大速度 (可选)positionGain=0.5, # P 控制增益 (可选)velocityGain=0.0, # D 控制增益 (可选)force=max_force) # 施加的最大力/力矩# --- 仿真步进 ---p.stepSimulation()# --- 可视化延迟 (如果使用 GUI) ---if p.getConnectionInfo()["gui"]:time.sleep(p.getPhysicsEngineParameters()["timeStep"]) # 根据仿真步长进行延迟# 8. 断开连接 p.disconnect() print("PyBullet simulation finished.")
- 安装:
- 实践步骤 (需要提前安装 PyBullet 和获取 G1 URDF/SDF 文件):
- 安装 PyBullet: 打开终端,运行
pip install pybullet
。 - 获取 G1 机器人的 URDF 或 SDF 文件: 这是必需的。你需要从 Unitree Robotics 获取或自己创建 G1 的机器人模型文件。将其放置在你的 Python 脚本可以找到的路径,或者添加到 PyBullet 的搜索路径中。
- 编写 Python 脚本: 参照上面的概念代码结构,编写你的控制逻辑。
- 运行 Python 脚本: 在终端中运行你的 Python 脚本:
python your_script_name.py
。
- 安装 PyBullet: 打开终端,运行
总结:
- 使用 Gazebo + ROS + Python 更接近真实的机器人开发流程,特别是如果你的 G1 最终将在 ROS 环境下工作。你需要熟悉 ROS 的概念(节点、话题、服务)以及如何使用
rospy
与它们交互。 - 使用 PyBullet + Python 则更加直接,你直接调用 PyBullet 的 Python API 进行仿真控制。它对于快速验证算法和进行 RL 实验非常方便。
选择哪种仿真器取决于你的具体需求和学习目标。无论是哪种,Python 都将是你与仿真机器人交互,实现足球项目逻辑的核心工具。从这里开始,你就可以在安全的仿真环境中开始编写代码,让虚拟的 G1 机器人动起来,并尝试实现寻球、带球和射门的功能了!
相关文章:
第 2.1 节: 机器人仿真环境选择与配置 (Gazebo, MuJoCo, PyBullet)
在真实机器人硬件上进行开发和测试既耗时又存在风险(硬件损坏、安全问题)。机器人仿真环境提供了一个虚拟的沙盒,让开发者能够在计算机中模拟机器人的物理行为、传感器读数和环境互动,极大地加速了开发、测试和调试过程。特别是对…...
网络开发基础(游戏)之 粘包分包
粘(nin)包、分包 在网络通信中,TCP协议是面向流的协议,没有消息边界概念,粘包和分包是常见的问题。在某种情况下(例如网络环境不稳定)就会导致"粘包"和"分包"问题…...
联邦元学习实现个性化物联网的框架
随着数据安全和隐私保护相关法律法规的出台,需要直接在中央服务器上收集和处理数据的集中式解决方案,对于个性化物联网而言,训练各种特定领域场景的人工智能模型已变得不切实际。基于此,中山大学,南洋理工大学…...
使用 Nacos 的注意事项与最佳实践
📹 背景 Nacos 凭借其强大💪的服务发现、配置管理和服务管理能力,成为构建分布式系统的得力助手。然而,要充分发挥 Nacos 的优势,实现系统的高性能、高可用,掌握其使用过程中的注意事项和最佳实践至关…...
在Pytorch中使用Tensorboard可视化训练过程
【在Pytorch中使用Tensorboard可视化训练过程】 https://www.bilibili.com/video/BV1Qf4y1C7kz/?share_sourcecopy_web&vd_sourcef00bfb41b3b450c3767070ed82f30ac8 主要功能: 1.保存网络结构图 2.保存训练集的损失Loss,验证集的正确性Accuracy以…...
15.电感特性在EMC设计中的运用
电感特性在EMC设计中的运用 1. 共模电感与差模电感的差异2. 电感的高频等效特性3. 电感在EMC设计中的使用注意事项3.1 LC滤波计算3.2 并联型多级浪涌防护的电感退耦 1. 共模电感…...
代理设计模式:从底层原理到源代码 详解
代理设计模式(Proxy Pattern)是一种结构型设计模式,它通过创建一个代理对象来控制对目标对象的访问。代理对象充当客户端和目标对象之间的中介,允许在不修改目标对象的情况下添加额外的功能(如权限控制、日志记录、延迟…...
25、简述.NET程序集(Assembly)
.NET 程序集(Assembly) .NET 程序集(Assembly) 是 .NET 应用程序的基本部署单元,包含以下核心内容: 类型与代码: 存储类、接口等类型的定义及实现(以中间语言 IL 形式)。…...
JavaScript 笔记 --- part 5 --- Web API (part 3)
(webAPI part3) BOM 操作 JS 执行机制 javascript 是单线程的, 也就是说, 只能同时执行一个任务。 为了解决这个问题, 利用多核 CPU 的计算能力, HTML5 提出 Web Worker API, 允许 JavaScript 脚本创建多个线程, 并将任务分配给这些线程。 于是, JS 出现了同步和异步的概念。…...
HCIP(OSPF)(3)
OSPF 报文结构 公共头部:包含版本(8bit)、类型(8bit)、报文长度(16bit)、路由器 ID(32bit)、区域 ID(32bit)、校验和(16bit࿰…...
Docker:重塑应用开发与部署的未来[特殊字符]
Docker:重塑应用开发与部署的未来🚀 在数字化转型的浪潮中🌊,应用开发与部署面临着诸多挑战,如环境一致性差、资源利用率低、运维复杂等。而Docker,作为容器技术领域的明星产品🌟,凭…...
逻辑回归:损失和正则化技术的深入研究
逻辑回归:损失和正则化技术的深入研究 引言 逻辑回归是一种广泛应用于分类问题的统计模型,尤其在机器学习领域中占据着重要的地位。尽管其名称中包含"回归",但逻辑回归本质上是一种分类算法。它的核心思想是在线性回归的基础上添…...
如何改电脑网络ip地址完整教程
更改电脑的网络IP地址以满足特定的网络需求,本文将为您提供一份详细的步骤指南。其实,改变IP地址并不是一件复杂的事,能解决因为IP限制带来的麻烦。以下是操作指南: 方法一:Windows 系统,通过图形界面修改 …...
Scenario Dreamer:用于生成驾驶模拟环境的矢量化潜扩散模型
25年3月来自加拿大 Mila AI研究院、蒙特利尔大学、蒙特利尔理工、普林斯顿、加拿大 CIFAR AI Chair 计划和 Torc 机器人公司的论文“Scenario Dreamer: Vectorized Latent Diffusion for Generating Driving Simulation Environments”。 Scenario Dreamer,是一个完…...
# 基于PyTorch的食品图像分类系统:从训练到部署全流程指南
基于PyTorch的食品图像分类系统:从训练到部署全流程指南 本文将详细介绍如何使用PyTorch框架构建一个完整的食品图像分类系统,涵盖数据预处理、模型构建、训练优化以及模型保存与加载的全过程。 1. 系统概述 本系统实现了一个基于卷积神经网络(CNN)的…...
【MCP Node.js SDK 全栈进阶指南】初级篇(1):MCP开发环境搭建详解
引言 Model Context Protocol (MCP) 是一种开放标准,旨在规范模型与应用程序之间的交互方式。本文作为MCP TypeScript-SDK系列的第一篇,将详细介绍如何搭建MCP开发环境,包括Node.js与TypeScript环境配置、SDK安装、开发工具推荐以及项目结构设计,帮助你快速入门MCP应用开发…...
unity脚本-FBX自动化模型面数校验
根据目前模型资源平均面数预算进行脚本制作,自动化校验模型面数是否符合规范。 *注:文件格式为.cs。需要放置在unity资源文件夹Assets>Editor下。 测试效果(拖一个fbx文件进unity时自动检测): 以下为完整代码 us…...
压力容器的优化设计
1 优化设计概述 优化设计是一种寻找确定最优设计方案的技术。所谓“最优设计”,指的是一种方案可以满足所有的设计要求,而且所需的支出(如重量,面积,体积,应力,费用等)最小。也就是…...
在Windows上安装Git
一、安装 Git 下载 Git地址:Git - Downloads (git-scm.com) 1、在页面中找到适用于 Windows 系统的最新版本安装包(通常为.exe 格式文件),点击下载链接。 出于访问Git官网需要科学上网,不会的可以私信我要软件包&…...
python包管理器,conda和uv 的区别
python包管理器,conda和uv 的区别 以下是 conda 和 uv 在 Python 包管理中的深度对比,结合知识库内容进行分析: 1. 核心设计理念 conda 以“环境为中心”,强调跨语言支持(如 Python、R、Julia)和严格的依赖…...
Oracle在ERP市场击败SAP
2024年,甲骨文(Oracle)以87亿美元的ERP收入和6.63%的市场份额,首次超越SAP,成为全球最大的ERP应用软件供应商,结束了SAP自上世纪80年代以来在该领域的长期霸主地位。据APPS RUN THE WORLD的市场调研&#x…...
Kafka 消息积压监控和报警配置的详细步骤
Kafka 消息积压监控和报警配置的详细步骤示例,涵盖常用工具(如 Prometheus Grafana、云服务监控)和自定义脚本方法: 一、监控配置 方法1:使用 Prometheus Grafana kafka-exporter 步骤1:部署 kafka-ex…...
记录一次使用面向对象的C语言封装步进电机驱动
简介 (2025/4/21) 本库对目前仅针对TB6600驱动下的42步进电机的基础功能进行了一定的封装, 也是我初次尝试以面向对象的思想去编写嵌入式代码, 和直流电机的驱动步骤相似在调用stepmotor_attach()函数和stepmotor_init()函数之后仅通过结构体数组stepm然后指定枚举变量中的id即…...
QTextDocument 入门
一、QTextDocument QTextDocument 是 Qt 中用于处理富文本文档的核心类,支持文本格式、图片、表格等复杂内容。 1. QTextDocument 入门 1.1 基本概念 QTextDocument 是 Qt 中用于处理富文本内容的核心类,它提供了: 结构化文本存储(段落、列表、表格等) 文本格式支持(…...
Arthas进阶用法
目录 查看已加载的类反编译代码动态执行代码排查 HTTP 请求问题热更新代码获取 Spring Context 并操作查看 JVM 信息自定义命令Web Console重置与退出 查看已加载的类 sc 命令 :可以查找所有 JVM 已经加载到的类。如果搜索的是接口,还会搜索所有的实现类…...
三生原理与现有密码学的核心区别?
AI辅助创作: 三生原理与现有密码学的核心区别 一、哲学基础与设计逻辑 动态生成 vs 静态分析 三生原理以“阴阳动态平衡”为核心,通过参数化生成(如素数构造中的阴阳元联动公式)模拟系统演化过程,而现有密码…...
定义python中的函数和类
1.函数 在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回 1.1 定义函数 def showshow(sex):if sex1:return manelse:retu…...
明远智睿2351开发板四核1.4G Linux处理器:驱动创新的引擎
在科技日新月异的今天,创新成为了推动社会进步的核心动力。而在这场创新的浪潮中,一款性能卓越、功能全面的处理器无疑是不可或缺的引擎。今天,我们介绍的这款四核1.4G处理器搭配Linux系统的组合,正是这样一款能够驱动未来创新的强…...
【前端】【业务逻辑】【面试】JSONP处理跨域原理与封装
🧠 一、JSONP 是什么? 项目内容📌 全称JSON with Padding📍 用途跨域请求数据的一种方式,绕过同源策略📦 本质通过 <script> 标签加载远程 JS 文件,这个文件执行一个回调函数并传入数据 …...
深入探索RAG:用LlamaIndex为大语言模型扩展知识,实现智能检索增强生成
大型语言模型(LLM),如ChatGPT和Llama,在回答问题方面表现出色,但它们的知识仅限于训练时所获取的信息。它们无法访问私有数据,也无法在训练截止日期之后学习新知识。那么,核心问题就是……我们如…...
移远通信智能模组助力东成“无边界智能割草机器人“闪耀欧美市场
2025年4月21日,移远通信宣布,旗下SC206E-EM智能模组已成功应用于江苏东成电动工具有限公司旗下的DCK TERRAINA无边界智能割草机器人。 这款智能模组高度集成计算、通信、定位等多元能力,以小型化、低功耗、实时性强和低成本等综合优势&#…...
测试-时间规模化定律可以改进世界基础模型吗?
25年3月来自 UT Austin、UW Madison 和 Nvidia 的论文“Can Test-Time Scaling Improve World Foundation Model?”。 世界基础模型(WFM)通过根据当前的观察和输入预测未来状态来模拟物理世界,已成为许多物理智能(PI)…...
VMwaer虚拟机复制粘贴、ROS系统安装
一、VMwaer虚拟机复制粘贴设置:设置完记得重启VMwaer 1.首先确定 虚拟机设置-->选项-->客户机隔离-->勾选 启用拖放 启用复制粘贴 2.如果还是不能粘贴 可能是 没有 VMware Tools 可参考 怎么在linux安装vmware tools-CSDN博客 设置完记得重启VMwaer。…...
安装 vmtools
第2章 安装 vmtools 1.安装 vmtools 的准备工作 1)现在查看是否安装了 gcc 查看是否安装gcc 打开终端 输入 gcc - v 安装 gcc 链接:https://blog.csdn.net/qq_45316173/article/details/122018354?ops_request_misc&request_id&biz_id10…...
HCIP(综合实验2)
1.实验拓补图 2.实验要求 1.根据提供材料划分VLAN以及IP地址,PC1/PC2属于生产一部员工划分VLAN10,PC3属于生产二部划分VLAN20 2.HJ-1HJ-2交换机需要配置链路聚合以保证业务数据访问的高带宽需求 3.VLAN的放通遵循最小VLAN透传原则 4.配置MSTP生成树解决二层环路问题…...
机器学习第一篇 线性回归
数据集:公开的World Happiness Report | Kaggle中的happiness dataset2017. 目标:基于GDP值预测幸福指数。(单特征预测) 代码: 文件一:prepare_for_traning.py """用于科学计算的一个库…...
Spark-Streaming简介及核心编程
一、核心概念: 1.Spark-Streaming 是流式数据处理框架,基于 **DStream(离散化流)** 抽象,将实时数据划分为多个时间区间的 RDD 序列。 DStream 本质是RDD 序列,每个时间区间数据对应一个 RDD。 2.特点&a…...
优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论
优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论 目录 优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论信息论信息熵明确问题主题提供具体细节限定回答方向规范语言表达概率论最优化理论信息论 原理:信息论中的熵可以衡量信息的不确定性。…...
Sqlserver安全篇之_Sqlcmd命令使用windows域账号认证sqlserver遇到问题如何处理的案例
sqlcmd https://learn.microsoft.com/zh-cn/sql/tools/sqlcmd/sqlcmd-connect-database-engine?viewsql-server-ver16 sqlcmd -S指定的数据库连接字符串必须有对应的有效的SPN信息,否则会报错SSPI Provider: Server not found in Kerberos database. 正常连接 1、…...
基于华为云 ModelArts 的在线服务应用开发(Requests 模块)
基于华为云 ModelArts 的在线服务应用开发(Requests 模块) 一、本节目标 了解并掌握 Requests 模块的特点与用法学会通过 PythonRequests 访问华为云 ModelArts 在线推理服务熟悉 JSON 模块在 Python 中的数据序列化与反序列化掌握 Python 文件 I/O 的基…...
Graph Database Self-Managed Neo4j 知识图谱存储实践1:安装和基础知识学习
Neo4j 是一个原生图数据库,这意味着它在存储层实现了真正的图模型。它不是在其他技术之上使用“图抽象”,而是以您在白板上绘制想法的相同方式在Neo4j中存储数据。 自2007年以来,Neo4j已经发展成为一个丰富的工具、应用程序和库的生态系统。…...
【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1:配置虚拟环境案例2:智能代码补全案例3:调试配置 运行结果…...
vscode:Live Server Preview插件
这个插件不用另外打开浏览器;它是直接在Vscode里面预览html的,并且是自动实时更新的,不用不停地CtrlS保存查看 使用方法:F1 -> 弹出一个窗口输入live,选择即可。 运行结果如下:...
关于在Springboot中设置时间格式问题
目录 1-设置全局时间格式1.Date类型的时间2.JDK8时间3.使Date类和JDK8时间类统统格式化时间 2-关于DateTimeFormat注解 1-设置全局时间格式 1.Date类型的时间 对于老项目来说,springboot中许多类使用的是Date类型的时间,没有用到LocalDateTime等JDK8时…...
双周报Vol.70: 运算符重载语义变化、String API 改动、IDE Markdown 格式支持优化...多项更新升级!
2025-04-21 语言更新 async 函数的调用处语法改为和 error 相同的 f!(..),原语法 f!!(..) 将触发警告 运算符重载的语义从基于方法迁移到了基于 trait,以后重载运算符需要通过给 moonbitlang/core/builtin 中对应的 trait 添加 impl 的形式。各个运算符…...
AI 技术发展:从起源到未来的深度剖析
一、AI 的起源与早期发展 人工智能(AI)作为计算机科学的重要分支,其诞生可以追溯到 20 世纪中叶。1943 年,艾伦・图灵提出图灵机的概念,为计算机科学和 AI 理论奠定了基础。1950 年,图灵又提出著名的图灵…...
【前端】【业务逻辑】 数据大屏自适应方案汇总
前端数据大屏自适应设计方案全解析 在前端数据大屏的开发中,自适应设计是关键环节,它能确保大屏在不同设备和屏幕尺寸上都能呈现出良好的视觉效果和交互体验。除了常见的 transform: scale、rem/vw、Flex/Grid 等方案外,还有其他有效的方法可…...
Java基础复习(JavaSE进阶)第六章 IO流体系
6-1 File类 01 122、File、IO流概述 02 123、File类:对象的创建 03 124、File类:判断、判断信息相关的方法 04 125、File类:创建、删除文件的方法 05 126、File类:遍历文件夹的方法 6-2 前置知识 01 127、前置知识:方…...
kvm下的ceph主机启动io请求统计
背景 假如一个主机存储在ceph里面,我们想统计下一次启动过程中的io读取的情况,那么可以通过下面的方法来统计 启动时间也可以通过在宿主机里面去查看,通过日志这边要方便一点,无需登录到虚拟机内部 日志开启 [global] fsid 406…...
go-Casbin使用
本次测试代码是基于单租户的RBAC鉴权 依赖 github.com/casbin/casbin/v2 github.com/casbin/gorm-adapter/v2文件存储规则文件 model.pml [request_definition] r sub, obj, act[policy_definition] p sub, obj, act[role_definition] g _, _ # 用户,角色[polic…...