mirror of
https://github.com/m1ngsama/robot_arm.git
synced 2026-03-25 19:53:49 +00:00
77 lines
No EOL
6 KiB
Markdown
77 lines
No EOL
6 KiB
Markdown
根据我们的全部聊天记录,我为你复盘并总结了整个项目的开发全过程。这个过程记录了你如何从零开始,一步步解决硬件抖动、数学建模错误、视觉偏差、以及大模型理解力不足等核心问题,最终实现了一个能够“听得懂指令、看得见物体、抓得准目标”的具身智能系统。
|
||
|
||
---
|
||
|
||
# 具身智能机械臂系统开发全过程总结
|
||
|
||
## 一、 硬件基础与底层调优 (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 打印件和廉价舵机组成的机械臂,提升到了具备**高精度轨迹跟踪**和**语义智能交互**能力的工业级原型水平。 |