边缘AI抓取机器人:zeptoclaw项目解析与轻量级视觉抓取实践

news2026/4/27 14:30:26
1. 项目概述从“zeptoclaw”看边缘AI抓取机器人的新范式最近在机器人开源社区里一个名为“bkataru/zeptoclaw”的项目引起了我的注意。乍一看这个标题可能会觉得有点陌生但拆解一下就能发现它的野心不小。“Zepto”是国际单位制中的前缀代表10的负21次方也就是“极微小”的意思而“claw”则是爪子、机械爪。合在一起“Zeptoclaw”直译就是“极微小的爪子”。这名字起得相当贴切因为它本质上是一个为微型、低功耗计算平台比如树莓派Zero 2 W、Jetson Nano这类设备设计的用于控制机械爪进行物体抓取的开源软件栈。更核心的是它集成了基于深度学习的视觉感知和抓取规划能力让一个成本可能只有几百块钱的“小玩意儿”也能具备一定程度的自主抓取智能。这和我们传统印象中那些在工厂里轰鸣的、由工控机或大型PLC控制的工业机械臂完全不同。zeptoclaw瞄准的是边缘侧、资源受限场景下的灵巧操作需求。想象一下一个嵌入在智能货架里的小型分拣机器人一个在桌面上帮你整理文具的桌面助手或者一个用于教育、展示的轻量级机器人平台。在这些场景下你不可能塞进去一台高性能的工控机对功耗、体积和成本都有着极其苛刻的要求。zeptoclaw正是为了解决这个问题而生——它试图在“算力、功耗、成本”这个不可能三角中为轻量级抓取应用找到一个最优的平衡点。我花了一些时间深入研究它的代码仓库和文档发现它的设计思路非常清晰硬件上极度轻量化软件上高度集成化算法上追求实时性与鲁棒性的平衡。它不追求处理最复杂的抓取任务而是在一个明确的约束边界内如特定尺寸、重量范围内的规则/半规则物体提供一套开箱即用、稳定可靠的解决方案。对于机器人爱好者、教育工作者、创客甚至是某些特定行业的原型开发人员来说这无疑是一个极具吸引力的起点。接下来我就结合自己的理解和一些测试经验来详细拆解一下这个项目的核心构成、实现逻辑以及在实际部署中可能遇到的“坑”。2. 核心架构与设计哲学拆解2.1 为什么是“边缘”与“轻量级”在深入代码之前我们必须先理解zeptoclaw的设计哲学。当前机器人抓取领域的主流方案尤其是涉及复杂视觉和深度学习模型的大多运行在拥有GPU的工作站或服务器上。图像通过摄像头采集后经由网络有时甚至是无线网络传输到云端或本地服务器进行处理计算出的抓取位姿再传回机器人执行。这个流程在实验室或固定工业环境中没问题但存在几个固有缺陷延迟网络传输和服务器排队会引入不可控的延迟对于需要快速反应的动态抓取场景是致命的。可靠性网络一旦不稳定整个系统就会瘫痪。在仓储、零售等复杂无线环境中这风险很高。成本与功耗维持一个常开的高性能计算服务器电费和硬件成本不菲。隐私与数据安全将工作环境的图像数据持续上传到外部在很多场景下是不可接受的。zeptoclaw的“边缘AI”思路就是将感知、决策、规划的全部或大部分计算下沉到机器人本体搭载的微型计算机上。树莓派Zero 2 W的算力虽然无法与RTX 4090相提并论但处理一路640x480分辨率的图像运行一个精心裁剪和优化的神经网络并完成简单的运动学解算是完全可以胜任的。这种“自给自足”的模式带来了近乎零的通信延迟、更高的系统可靠性、更低的整体功耗和更好的数据隐私性。注意选择边缘方案也意味着要在算法精度和模型复杂度上做出妥协。zeptoclaw不会去挑战抓取一堆杂乱缠绕的电线或者极度反光的物体它的目标场景是预先定义好的比如抓取货架上的标准包装盒、分拣桌面上的小型零件等。明确场景边界是项目成功的前提。2.2 软件栈分层解析从仓库结构来看zeptoclaw的软件栈采用了典型的分层架构清晰地将硬件驱动、核心算法、应用逻辑分离开来。这对于项目的可维护性和可扩展性至关重要。硬件抽象层HAL这一层负责与具体的硬件打交道比如通过PWM或I2C驱动舵机控制板常见如PCA9685来控制机械爪的张开与闭合通过USB或CSI接口读取摄像头如Raspberry Pi Camera Module V2的图像数据或许还包括读取一些简单的传感器如限位开关的状态。这一层的代码通常与硬件品牌、型号强相关zeptoclaw通过提供适配器Adapter或配置文件让用户能够相对容易地更换不同的机械爪或摄像头。视觉感知层这是项目的“眼睛”和“大脑”的结合部也是最核心的部分。它接收来自摄像头的原始图像输出目标物体的抓取位姿通常是机械爪末端在相机坐标系下的位置和姿态有时还包括抓取宽度。这一层一般包含以下模块图像预处理可能是裁剪、缩放、色彩空间转换如转灰度图、滤波去噪等目的是提升后续处理的效率和稳定性。目标检测与分割确定“抓哪里”。对于简单场景可能使用背景减除、颜色阈值等传统视觉方法对于复杂场景则依赖于一个轻量级的深度学习模型如经过剪枝和量化的MobileNet-SSD或YOLO-Tiny用于检测目标物体。抓取位姿生成确定“怎么抓”。这是抓取算法的核心。zeptoclaw可能采用了以下几种策略之一或组合基于几何的抓取对于已知简单几何形状如立方体、圆柱体的物体通过拟合其轮廓来估算抓取点。基于学习的方法使用一个轻量级神经网络如GG-CNN的变种直接回归出图像中每个像素点对应的抓取质量、角度和宽度然后选取最优的抓取点。这是目前边缘抓取的主流研究方向。模板匹配对于已知的、固定的物体可以预先定义好抓取点通过特征匹配找到物体后直接使用预定义的抓取姿态。运动规划与控制层这一层接收视觉层输出的抓取位姿并将其转化为机械爪舵机的具体控制指令。这里涉及坐标变换从相机坐标系转换到机器人基坐标系、简单的运动学计算如果机械臂有多个关节最后生成舵机需要转动的角度序列。对于zeptoclaw常用的二指平行夹爪控制通常简化为一个“张开-移动-闭合”的序列。这一层还需要处理一些基本的逻辑比如防碰撞检测虽然很初级、抓取力控制通过PWM占空比或电流反馈等。应用层与任务调度这是最上层的逻辑定义了机器人的工作流程。例如一个简单的“抓取-放置”循环等待触发信号 - 拍照 - 运行视觉算法 - 规划抓取 - 执行抓取动作 - 移动到放置点 - 松开 - 返回待命位置。这一层可能会用一个简单的状态机来实现。3. 核心模块深度剖析与实操要点3.1 轻量级视觉抓取网络的选择与部署zeptoclaw的性能瓶颈和智能核心很大程度上取决于其采用的视觉抓取网络。在资源受限的边缘设备上模型的选择、优化和部署是一门艺术。模型选型考量仓库中可能集成或推荐了1-2个预训练的抓取检测模型。常见的选择包括GG-CNNGenerative Grasping Convolutional Neural Network这是一个开创性的工作它直接输出一个抓取质量热图、角度图和宽度图。模型很小只有几MB推理速度快非常适合边缘部署。它的输出是像素级的对于平移不变的抓取场景摄像头固定在机械爪上方非常有效。轻量化的YOLO变种如YOLOv5n, YOLOv8n进行目标检测 后续处理先检测出物体边界框然后在框内区域使用更简单的规则如取中心点、计算主方向或一个小型网络来估计抓取姿态。这种方式更灵活可以同时处理多物体但流程稍复杂。专门为嵌入式设备设计的网络如SqueezeNet、MobileNetV3-small作为backbone后面接上抓取检测头。开发者可能对这类网络进行了进一步的剪枝和量化。部署优化实战仅仅有模型文件.pth或 .h5是不够的。在树莓派上直接跑PyTorch或TensorFlow的原生模型即使模型很小速度也可能达不到实时10fps要求。因此模型转换和加速是关键步骤模型量化将模型权重从32位浮点数FP32转换为8位整数INT8。这几乎能减少75%的模型体积和内存占用并能利用某些硬件如树莓派上的NEON SIMD指令集的整数运算加速。PyTorch提供了torch.quantization工具TensorFlow Lite更是为边缘部署量身定做。模型转换将PyTorch或TensorFlow模型转换为专门为边缘推理优化的格式。TensorFlow Lite.tflite是跨平台包括树莓派的首选它拥有轻量级的解释器和针对ARM CPU的优化。另一种选择是ONNX Runtime它同样支持多平台和硬件加速。zeptoclaw的代码中很可能已经包含了加载和运行.tflite或.onnx模型的接口。硬件加速探索对于树莓派可以尝试使用TensorFlow Lite with Delegates。虽然Zero 2 W的GPUVideoCore VI对通用计算支持有限但通过libedgetpu等库如果能接入Google Coral USB加速棒INT8模型的推理速度将得到飞跃式提升。对于Jetson Nano则可以利用其内置的GPU和TensorRT进行加速。实操心得在树莓派Zero 2 W上部署模型时内存是比算力更紧张的资源。务必确保你的模型在量化后其激活值activation在推理过程中不会导致内存溢出。一个实用的技巧是在PC上使用工具如netron可视化模型并估算各层输出的张量大小。尽量选择层数少、特征图尺寸小的网络结构。3.2 机械爪硬件选型与驱动集成zeptoclaw的“claw”部分硬件选型直接决定了系统的抓取能力、精度和成本。常见硬件方案舵机驱动二指夹爪这是最流行、成本最低的方案。用一个或两个舵机如SG90 MG90S来驱动平行二指开合。优点是控制简单PWM信号、价格低廉几十元人民币。缺点是抓取力有限、精度一般舵机有回差、重复精度不高。适用于抓取轻小、不易变形的物体如积木、小包装盒。步进电机/直流电机编码器驱动这种方案能提供更大的抓取力和更高的精度通过编码器可以实现闭环位置控制。但需要额外的电机驱动板如DRV8825电路和控制程序都更复杂。成本也更高。一体化智能夹爪一些厂商提供了集成了驱动和控制器的夹爪通过串口UART或总线如Modbus发送简单的指令如“移动到某位置”、“以某力闭合”即可控制。这种方案集成最简单性能也较好但价格最贵。与zeptoclaw的集成 zeptoclaw的代码库中驱动层应该已经封装了对于常见硬件如通过PCA9685舵机控制板控制舵机的接口。你需要做的是硬件连接正确连接摄像头、舵机控制板到树莓派的GPIO、I2C或USB接口。参数配置修改配置文件如config.yaml或params.py。这里面的参数至关重要相机内参焦距、主点坐标、畸变系数。这需要通过相机标定获得标定不准会导致抓取位置误差巨大。手眼标定参数描述相机坐标系与机械爪基坐标系之间的变换关系。这是实现“看到哪里就抓到哪里”的关键。zeptoclaw可能提供了简单的“四点标定法”脚本让你通过移动机械爪到几个已知点并拍照来计算这个变换矩阵。机械爪参数夹爪的物理尺寸如指尖长度、最大开口宽度、舵机角度与夹爪开口宽度的映射关系、最大/最小PWM值等。运动控制调试编写或调试简单的动作序列脚本。例如grasp(width)函数应该能将夹爪移动到指定的开口宽度。你需要校准这个映射关系确保指令和实际动作一致。一个常见的坑舵机在通电瞬间可能会产生一个“抖舵”现象如果此时机械爪已经接触物体可能会导致物体被弹飞。一个好的实践是在初始化时先让舵机缓慢运动到安全位置如全开然后再开始视觉流程。3.3 坐标系变换与手眼标定实战这是连接“视觉”和“动作”的桥梁也是新手最容易出错的地方。概念上很简单视觉算法给出的是物体在相机坐标系下的位置[X_c, Y_c, Z_c]和姿态。但机械爪需要知道这个点在机器人基坐标系下的位置[X_b, Y_b, Z_b]才能移动过去。这两个坐标系之间的变换关系就是一个4x4的齐次变换矩阵T_b_c表示从相机坐标系到基坐标系的变换。手眼标定方法Eye-to-Hand Configuration zeptoclaw很可能采用眼在手外Eye-to-Hand的配置即相机固定在工作区域上方不随机械爪移动。这是最稳定的配置。标定步骤如下制作一个简单的标定板如棋盘格将其固定在机械爪的末端夹爪上。通过程序控制机械爪移动到工作空间内至少3个推荐4个以上不同的、已知在基坐标系下的位置P_b_i。记录下每个位置。在每个位置上相机拍摄标定板的图像。使用OpenCV的cv2.findChessboardCorners等函数可以计算出标定板在相机坐标系下的位置P_c_i。现在你有了多组对应点P_b_1 - P_c_1,P_b_2 - P_c_2, ...。通过求解一个绝对定向问题Absolute Orientation Problem例如使用SVD奇异值分解方法就可以计算出最优的变换矩阵T_b_c。实操中的细节标定点的选择标定点应尽可能覆盖机械爪整个工作空间并且姿态旋转要有变化这样标定结果才更准确。深度信息单目相机无法直接得到Z_c深度。zeptoclaw可能采用以下几种方式之一已知高度假设如果所有被抓物体都放在一个已知高度的平面上如工作台那么物体的Z_c就是这个已知高度。这是最简单的方法但限制大。双目或RGB-D相机使用树莓派官方的双目相机或一个USB接口的RGB-D相机如Intel RealSense D435i的轻量版可以直接获得深度图。这是最 robust 的方案但成本和计算量会增加。基于模型的估计如果知道物体的近似尺寸比如都是一个型号的罐头可以通过它在图像中的像素大小来反推其深度。这需要额外的先验知识。标定误差评估标定完成后一定要做验证。控制机械爪移动到几个新的位置用标定出的T_b_c将相机检测到的位置转换到基坐标系然后命令机械爪移动过去看实际误差有多大。通常平面内的误差X, Y可以做到几个毫米以内深度方向Z的误差会大一些。4. 系统搭建、调试与性能优化全流程4.1 从零开始的环境搭建与依赖安装假设你拿到了一块树莓派Zero 2 W一个Raspberry Pi Camera Module V2一个PCA9685舵机控制板和一个二指舵机夹爪。以下是搭建zeptoclaw系统的大致步骤操作系统与基础环境给树莓派刷入Raspberry Pi OS Lite无桌面版更节省资源。启用SSH、I2C接口。通过apt安装基础开发工具build-essential,cmake,git,python3-pip。克隆与准备zeptoclaw仓库git clone https://github.com/bkataru/zeptoclaw.git cd zeptoclaw # 仔细阅读README.md和requirements.txtPython虚拟环境与依赖强烈建议使用虚拟环境。python3 -m venv venv source venv/bin/activate pip install --upgrade pip # 根据requirements.txt安装但注意某些包在ARM架构上可能需要从源码编译 pip install -r requirements.txt注意在树莓派上直接pip install opencv-python可能会失败或非常慢。推荐使用apt安装预编译的版本sudo apt install python3-opencv。对于TensorFlow Lite使用pip install tflite-runtime而不是完整的TensorFlow。硬件驱动与权限连接PCA9685到树莓派的I2C引脚SDA, SCL并通过sudo raspi-config或sudo dtparam i2c_armon启用I2C。使用i2cdetect -y 1命令检查设备是否被识别通常地址是0x40。确保用户有访问GPIO和I2C设备的权限通常需要将用户加入gpio和i2c组。连接摄像头并启用CSI接口。模型文件部署将项目提供的预训练模型文件如grasp_model.tflite和对应的标签文件如果有放入项目指定的目录如models/。4.2 配置文件详解与系统校准这是最关键的一步配置文件如config/config.yaml是系统的大脑。你需要像填写实验报告一样仔细配置每一个参数。# 示例配置片段 camera: type: picam # 或 usb, realsense resolution: [640, 480] fps: 30 # 相机内参来自标定 intrinsic_matrix: [[fx, 0, cx], [0, fy, cy], [0, 0, 1]] distortion_coeffs: [k1, k2, p1, p2, k3] gripper: type: servo_pwm servo_controller: pca9685 i2c_address: 0x40 open_pulse: 150 # 对应舵机0度的PWM脉冲宽度 close_pulse: 600 # 对应舵机180度的PWM脉冲宽度 max_width_mm: 80 # 夹爪最大开口宽度毫米 calibration: # 手眼标定矩阵 T_base_cam T_base_cam: [[r11, r12, r13, tx], [r21, r22, r23, ty], [r31, r32, r33, tz], [0, 0, 0, 1]] # 工作平面高度假设物体放在一个平面上 workspace_z: 0.0 # 单位米 grasp_model: path: models/ggcnn_quantized.tflite input_size: [224, 224] num_threads: 4 # TensorFlow Lite推理线程数你需要进行相机标定获取intrinsic_matrix和distortion_coeffs。可以使用OpenCV的标定工具。进行手眼标定获取T_base_cam。运行项目提供的标定脚本并严格按照说明操作。测量并设置夹爪参数用卡尺测量夹爪全开和全闭时的实际宽度对应到舵机的脉冲值填入open_pulse,close_pulse,max_width_mm。4.3 运行测试与闭环调试配置完成后可以开始运行测试程序。项目通常会提供几个示例脚本test_camera.py测试摄像头能否正常打开并显示图像。test_gripper.py测试夹爪能否按指令开合。run_grasp_demo.py主演示程序执行完整的抓取循环。调试是一个迭代过程先分开调确保摄像头、夹爪各自单独工作正常。再开环调运行视觉检测算法让它显示识别出的抓取点可能在图像上画一个矩形或一个抓取姿态的示意。手动将物体放在不同位置观察检测框是否准确、稳定。最后闭环调开启完整的抓取循环。第一次运行时务必确保夹爪下方没有贵重物品并做好急停准备观察机械爪的运动轨迹抓取位置偏差如果总是抓偏问题大概率在手眼标定矩阵T_base_cam不准或者相机内参有误。需要重新标定。深度不对如果夹爪在空中闭合没碰到物体或戳到桌面压得太深问题在深度估计workspace_z设置错误或标定矩阵的Z分量不准。抓取姿态不对如果夹爪的角度不对例如应该水平抓取却斜着下去可能是抓取检测网络输出的角度解析有误或者坐标系旋转的定义不一致。4.4 性能优化与稳定性提升技巧在树莓派Zero 2 W上流畅运行需要一些优化技巧推理引擎优化调整线程数在TensorFlow Lite配置中num_threads设置为树莓派CPU的核心数Zero 2 W是4核。使用XNNPACK委托如果TensorFlow Lite版本支持启用XNNPACK委托可以加速浮点模型在ARM CPU上的推理。对于INT8模型确保使用支持INT8的优化版本。图像处理流水线优化降低分辨率如果640x480下帧率太低可以尝试降到320x240。模型输入尺寸通常更小如224x224降低相机采集分辨率能减少数据传输和处理开销。减少色彩转换如果模型输入是灰度图直接在摄像头采集时设置为灰度模式避免后续的BGR2GRAY转换。使用硬件加速树莓派的Picamera2库如果支持你的摄像头可以利用GPU进行一些图像格式转换和缩放效率比OpenCV的纯CPU处理高。代码层面优化避免不必要的拷贝在Python中尤其是处理图像数据numpy数组时要警惕无意识的数据拷贝。使用np.asarray()或就地操作。预热在正式循环开始前先运行几次推理让TensorFlow Lite运行时完成初始化模型加载到缓存。非阻塞式设计如果抓取动作较慢可以考虑将视觉检测和机械臂运动放在不同的线程中视觉持续检测运动执行上个周期的结果提高系统响应速度。5. 常见问题排查与进阶扩展方向5.1 典型问题速查表在实际部署中你几乎一定会遇到下面这些问题。这里提供一个快速排查指南问题现象可能原因排查步骤与解决方案摄像头无法打开/无图像1. 摄像头未启用或接触不良。2. 摄像头被其他进程占用。3. OpenCV不支持该摄像头型号。1. 运行libcamera-helloPicamera2或v4l2-ctl --list-devicesUSB摄像头检查。2. 重启树莓派确保无其他程序在运行。3. 尝试更换USB口或使用cv2.VideoCapture(0, cv2.CAP_V4L2)。夹爪不动作或动作异常1. I2C通信失败。2. PCA9685供电不足。3. 舵机脉冲参数设置错误。4. 舵机损坏。1. 运行i2cdetect -y 1确认PCA9685地址0x40出现。2. 确保PCA9685的VCC接5V稳压电源且功率足够驱动舵机舵机启动电流大。3. 用示波器或逻辑分析仪测量PWM输出校准open_pulse和close_pulse值。4. 单独给舵机信号线接一个已知好的舵机测试。视觉检测框乱飞或不稳定1. 光照条件变化剧烈。2. 相机镜头有污渍或对焦不准。3. 模型训练数据与当前场景差异大。4. 预处理参数如阈值不合适。1. 提供稳定、均匀的照明避免强光直射和阴影。2. 清洁镜头调整对焦环如果支持。3. 考虑在自己的场景数据上对模型进行微调fine-tune。4. 调整二值化阈值、滤波参数等。抓取位置存在固定偏移1. 手眼标定矩阵T_base_cam不准确。2. 相机内参不准特别是畸变校正未正确应用。3. 机械结构存在回程间隙或柔性变形。1.重新进行手眼标定增加标定点数量10个并覆盖整个工作空间。2.重新进行相机标定使用更多角度、更清晰的标定板图片。3. 检查所有机械连接是否紧固尝试在运动指令中加入微小的反向间隙补偿。系统运行卡顿帧率极低1. 树莓派CPU温度过高降频。2. 内存不足开始使用Swap。3. 模型推理耗时过长。4. 图像采集或处理代码效率低。1. 安装散热片检查vcgencmd measure_temp。2. 运行free -h查看内存使用关闭不必要的后台进程。3. 使用性能分析工具如cProfile找到瓶颈优化模型或降低输入分辨率。4. 检查是否在循环中重复创建大对象如模型解释器。5.2 从Demo到实用化的进阶思考zeptoclaw提供了一个出色的起点但要把它变成一个真正稳定可靠的实用系统还需要考虑更多鲁棒性提升错误处理与恢复程序需要能处理各种异常如检测不到物体、抓取失败通过力传感器或视觉反馈判断、机械臂运动超时等并进入安全的恢复流程。多物体与遮挡处理当前算法可能只处理最显著的一个物体。在实际场景中可能需要识别和排序多个物体并处理部分遮挡的情况。抓取验证抓取后可以通过摄像头再次拍照判断物体是否被成功抓起或者通过夹爪上的压力传感器进行判断。场景自适应与在线学习背景建模对于固定相机场景可以建模背景从而更稳定地检测新放入的物体。增量学习如果系统频繁抓取同一类新物体是否可以收集失败的抓取数据在线微调抓取预测网络这是一个前沿但很有价值的方向。系统集成通信接口为zeptoclaw封装一个ROS节点、一个gRPC服务或者一个简单的HTTP API让它能更容易地集成到更大的机器人系统或调度系统中。状态监控与日志添加详细的日志记录和系统状态监控CPU、内存、温度、抓取成功率统计便于长期运行和维护。硬件升级力/触觉传感在指尖添加薄膜压力传感器实现力控抓取防止抓碎易碎物品或抓不稳光滑物体。更灵活的末端执行器更换为三指夹爪、吸盘或柔性夹爪以应对更多样化的物体。zeptoclaw项目就像一颗精心打磨的种子它展示了在极有限的资源下实现智能抓取的可行性。它的价值不仅在于其开箱即用的代码更在于其清晰的设计范式和可扩展的架构。你可以基于它快速验证一个抓取应用的想法也可以以它为蓝本深入每一个模块进行定制和强化。在这个过程中你会深刻体会到边缘AI机器人开发的挑战与乐趣——在约束中寻求创新在简单中追求可靠。这远比单纯调用一个云端API要复杂但也因此更有成就感。我的建议是不要期望它一开始就完美无缺把它当作一个学习平台和开发基础亲手去调试每一个参数解决每一个出现的问题你获得的将远远超出一个能抓东西的机械爪本身。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…