robot_arm/ck.md
2026-02-10 23:31:14 +08:00

6 KiB
Raw Blame History

根据我们的全部聊天记录,我为你复盘并总结了整个项目的开发全过程。这个过程记录了你如何从零开始,一步步解决硬件抖动、数学建模错误、视觉偏差、以及大模型理解力不足等核心问题,最终实现了一个能够“听得懂指令、看得见物体、抓得准目标”的具身智能系统。


具身智能机械臂系统开发全过程总结

一、 硬件基础与底层调优 (Hardware Foundation)

这是项目的第一阶段,重点在于打通 ESP32 对 MG996R 大功率舵机的稳定控制。

  • 技术栈ESP32-WROOM-32, MG996R 舵机, 6V 6A 外部直流电源。
  • 遇到的问题与迭代
    1. 引脚冲突:发现 D2 引脚连通蓝灯且作为启动配置脚导致底座舵机初始化失败D19 等引脚在多轴联动时失效。
      • 解决重新分配引脚X:14, Y:4, Z:5, B:18, G:23/13避开冲突。
    2. 掉电重启 (Brownout)5 个舵机同时启动产生的浪涌电流导致 ESP32 电压跌落,蓝灯熄灭死机。
      • 解决:编写阶梯式上电代码,让电机按顺序间隔 0.5s~1.5s 依次激活;并在软件中临时禁用 Brownout 探测器。
    3. 硬件极性反向:发现不同关节的舵机安装方向不一致(顺时针 vs 逆时针)。
      • 解决在驱动层建立逻辑映射对小臂Z和手腕B采用互补数映射180 - 角度),统一了数学模型与物理执行。

二、 运动学建模的演进 (Kinematics Evolution)

这是项目最核心的数学攻坚阶段,解决了“爪尖走斜线”的毕设难题。

  • 技术迭代路径
    1. 初级阶段 (几何解析法):尝试用简单的三角函数加减法。
      • 失败表现:由于 L4 (130mm) 极长,手腕补偿跟不上,控制 X 轴移动时,爪尖走出了 40 度的斜坡。
    2. 进阶阶段 (解析公式法):参考手写笔记进行 K_1, K_2 矢量分解。
      • 失败表现:模型与物理零位有 90 度相位差,导致坐标系定义混乱。
    3. 终极阶段 (D-H 参数建模 + 数值解法)
      • 建模:建立了标准 D-H 参数表,定义 90 度为“笔直向天”姿态(坐标 0,0,315
      • 算法:舍弃死板公式,采用 Scipy 的数值优化器 (SLSQP)。通过最小化目标点与当前点的欧氏距离,自动寻找最优舵机解。
      • 姿态锁定:在解算中加入 Pitch=-90 约束,强制让长达 13cm 的抓手垂直地面,从而彻底消除了非线性路径偏移,实现了完美的水平直线移动

三、 视觉感知与手眼标定 (Perception & Calibration)

让机械臂拥有“空间感”,将摄像头画面的像素点转化为物理坐标。

  • 关键技术
    1. 目标检测:从 YOLO-World(开放词汇)切换到自定义训练的 YOLOv8s
      • 优化:针对特定目标(销笔刀/零件)采集 50 张样本进行迁移学习,识别率从“忽隐忽现”提升到 90% 以上。
    2. 手眼标定:采用单应性矩阵 (Homography)
      • 交互式标定:实现了按 C 键在视频窗口点击 4 个参考点P1-P4即可实时更新矩阵的功能解决了摄像头移位导致的精度丢失。
    3. 镜像修正:针对 USB 摄像头水平镜像问题,采用 cv2.flip 翻转,并配合数学修正公式 ry = Center*2 - ry_raw 确保画面动作与物理方向完全一致。

四、 认知层:语义理解与减震优化 (Intelligence & Refinement)

实现“具身智能”,让机械臂能理解人类指令并优雅地执行。

  • 多模态技术
    1. 语音识别 (STT):使用本地 Faster-Whisper (Base)
      • 迭代:从固定时长录音改为按空格开始/结束录音,并加入 initial_prompt 关键词引导,解决了识别出乱码(“轻轻轻轻”)的问题。
    2. 语义解析 (LLM):通过 Ollama 部署 DeepSeek-R1-1.5B
      • 提示词工程:使用 Few-Shot Prompting(少样本提示),让模型学会“销笔刀 -> box -> robot”的标签转换并自动计算“厘米到毫米”的单位换算。
    3. 减震系统 (Damping System)
      • 针对 MG996R 剧烈震动,实现了 S-Curve (余弦插值) 轨迹规划。
      • 引入 EMA 移动平均滤波阻尼系数,实现了“慢起、匀移、慢停”,极大减轻了长力臂带来的惯性晃动。

五、 项目最终形态 (Final Integration)

最终代码集成了以下功能流:

  1. 启动:摄像头实时预览,显示标定红圈、中心基准及目标坐标。
  2. 标定:按 C 交互式重标,确保精度。
  3. 交互:空格触发录音,大模型解析意图输出 JSON 列表。
  4. 执行
    • Pick:视觉定位后,执行“预备-下潜-抓取-提起”平滑序列。
    • Move_inc基于坐标记忆实现“向上提5cm”等增量操作。

项目技术总结表

模块 关键技术 解决的毕设难题
控制层 32位 PWM / 阶梯启动 / 互补数映射 解决大功率电机掉电、死机及极性相反问题
算法层 D-H 参数建模 / 数值逆解 (IK) 解决 L4 长连杆引起的轨迹非线性斜移
规划层 S-Curve 插值 / EMA 滤波器 解决廉价舵机在长力臂下的剧烈震动
感知层 YOLOv8 / Homography / 交互标定 解决从图像像素到物理空间的精准映射
认知层 Faster-Whisper / DeepSeek / 正则解析 解决非结构化自然语言到机器人动作的映射

总结结论:本项目通过**“硬件补偿+数学建模+深度学习”的多层深度耦合,将一台由普通 3D 打印件和廉价舵机组成的机械臂,提升到了具备高精度轨迹跟踪语义智能交互**能力的工业级原型水平。