课程知识点5 大模块 · 成体系

每个模块含教学目标、核心原理、关键步骤、代码解读、常见错误、自学检查清单,并附可下载的配套资料。代码均来自课程现有工程,便于对照讲解。

① 机械臂运动学(理论 · 第1周 D1–D3)

坐标系D-H参数正运动学逆运动学轨迹规划

🎯 教学目标:能用 D-H 参数法建立连杆坐标系,完成正运动学求解,理解逆解多解问题,掌握点到点/直线圆弧插值。

1.1 连杆坐标系与 D-H 参数

为描述相邻连杆间的位姿,给每个关节建立坐标系,用 4 个参数刻画连杆: θ 关节角d 连杆偏距a 连杆长度α 连杆扭角。 建立步骤:确定关节轴 → 找公垂线 → 定原点 → 定 z/x 轴 → 列参数表。

1.2 正运动学

已知各关节角,求末端相对基座的位姿。做法:为每个连杆写出齐次变换矩阵 T,末端位姿 = 各矩阵连乘 T = T₁·T₂·…·Tₙ。矩阵由各连杆的 D-H 参数唯一确定。

1.3 逆运动学

已知末端位姿反求关节角,是控制机械臂到达目标点的前提。难点:常存在多组解( elbow-up / elbow-down 等),并可能遇到奇异构型(失去某个自由度)。解法分解析法(公式,快但难推导)与数值法(迭代,通用)。

1.4 轨迹规划

两点之间如何运动:PTP 点到点(只关心起止,路径不限)、 直线运动圆弧插值,并规划速度/加速度曲线避免冲击。课程用 MATLAB Robotics Toolbox 与 UAV 轨迹示例辅助验证。

⚠️ 常见错误:D-H 参数建系方向不统一导致矩阵符号错;逆解多解时未结合实际构型选解;轨迹规划忽略加速度造成机械冲击。

✅ 自学检查清单:能建 D-H 表 · 能手算 2–3 自由度正解 · 能解释逆解多解 · 能区分 PTP 与直线运动。

📥 本模块资料下载
理论推导 PPT 4.4MB 实验报告模板 114KB Robotics Toolbox(24MB·大文件,请向老师/U盘索取) UAV轨迹示例 74KB 正逆解示例 .m 1KB 工具箱安装说明 347KB

② Python 基础(第1周 D4–D5)

环境语法函数/文件IOnumpypip

🎯 教学目标:能独立配置 Python 环境,写出控制与视觉脚本所需的基础代码。

2.1 环境搭建

推荐 Anaconda + VS Code。用 pip install opencv-python numpy torch 安装课程所需库。建议为课程建独立虚拟环境,避免库版本冲突。

2.2 语法基础

变量与动态类型、列表/字典、if/for/while 流程控制、字符串格式化。课程代码大量使用列表切片(如 img[y:y+h, x:x+w] 做 ROI)。

2.3 函数与文件 IO

def 定义函数;cv2.imread / cv2.imwrite 读写图像;os / shutil 管理文件路径与批量复制(见 TrainData.py 的验证集切分)。

2.4 关键库一览

numpy 数组/矩阵运算 · cv2 视觉处理 · socket arm↔vision 通信 · torch 分类模型推理与训练 · PIL 图像格式转换。

# 环境自检小例 import cv2, numpy as np, torch print(cv2.__version__, np.__version__, torch.__version__)
⚠️ 常见错误:未激活正确环境导致 import 失败;中文路径下 cv2.imread 返回 None(用英文路径或 np.fromfile);numpy 维度顺序与 OpenCV(BGR) 不一致。

✅ 自学检查清单:能建环境装库 · 能写函数与文件读写 · 理解 numpy 数组切片 · 能跑通上面 4 行自检。

③ Dobot 机械臂操作(第2周 D1–D2)

DobotStudioDobotDllTypePTP/直线运动抓取放置

🎯 教学目标:会用 DobotStudio 示教,能用 DobotDllType API 编程控制机械臂完成搬运。

3.1 DobotStudio(图形化)

安装 → 连接设备 → 回零(每次上电必做)→ 点动(Jog)熟悉轴 → 示教记录关键点位 → 保存工程(5.综合调试方案 V2.0.sol 即此类工程)。先示教建立直觉,再进入代码。

3.2 DobotDllType API(编程控制)

DobotDllType.py 是官方 API 封装。核心调用:

api = dType.load() # 加载DLL dType.ConnectDobot(api, "", 115200) # 连接(串口号, 波特率) dType.SetPTPCmd(api, mode, x,y,z,r, queue) # 运动;mode: MOVJ/MOVL/JUMP等 dType.SetEndEffectorSuctionCup(api, 1,1, queue) # 吸盘开关

3.3 抓取放置流程

# 典型搬运:取料点→开吸盘→放料点→关吸盘 dType.SetPTPCmd(api, dType.PTPMode.MOVL, x1,y1,z1,r1, queue) # 到取料点 dType.SetEndEffectorSuctionCup(api, 1, 1, queue) # 吸气抓取 dType.SetPTPCmd(api, dType.PTPMode.MOVL, x2,y2,z2,r2, queue) # 到放料点 dType.SetEndEffectorSuctionCup(api, 0, 0, queue) # 放气释放

3.4 综合调试工程

5.综合调试方案 V2.0.sol 是 DobotStudio 中联合调试的已存工程,后续第3周在此基础上升级为"视觉触发"分拣。

⚠️ 常见错误:未回零直接运动导致坐标偏移;MOVL(直线)在奇异附近报错,可改用 MOVJ(关节);吸盘在移动前未确认已吸住而掉件。

✅ 自学检查清单:能回零与点动 · 能写 SetPTPCmd 到指定坐标 · 能完成"抓取—移动—放置"闭环 · 能打开 .sol 工程。

④ OpenCV 机器视觉(第2周 D3–D5)

灰度/二值形态学轮廓/ROIHaar人脸resnet分类

🎯 教学目标:掌握图像预处理流水线(分拣定位核心),会用 Haar 检测人脸、用 resnet 做分类推理。

4.1 图像基础

img = cv2.imread('path.jpg') # 读图(BGR) cap = cv2.VideoCapture(0) # 摄像头 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度化

4.2 分拣定位流水线(对应 Main.py → image_pre

这是"从图像找到物品并摆正"的核心,逐步为:

① 灰度化 cv2.cvtColor(..., BGR2GRAY) ② 二值化 cv2.threshold(dst, 100, 230, THRESH_BINARY) ③ 形态学开运算 cv2.morphologyEx(dst, MORPH_OPEN, kernel) ④ 轮廓查找 cv2.findContours(opening, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE) ⑤ 最小外接矩形 rect = cv2.minAreaRect(c); box = cv2.boxPoints(rect) ⑥ 旋转校正 M = cv2.getRotationMatrix2D(rect[0], rect[2], 1.0) img_waf = cv2.warpAffine(img, M, (h,w)) ⑦ ROI 裁剪 按 rect 中心与宽高截取目标区域 src_roi

轮廓面积过滤:if area < 300000: continue,跳过过小的误检连通区。

4.3 分类推理(resnet18)

ModelTest.py 加载 resnet18(4 类:白菜/胡萝卜/菠萝/雪梨),对 ROI 做 softmax 取最大概率作为识别结果。模型权重 Model-20210526.pklresnet18.pth 需与代码同目录。

4.4 人脸检测与训练

CutFace.py 用 Haar 级联采集人脸样本;TrainData.py 用 resnet18 微调训练二分类模型(Model-face.pkl)。理解"数据增强→训练→验证"的机器学习闭环。

⚠️ 常见错误:阈值/形态学核大小对光照极敏感,换环境就失效;image_roi 中 ROI 坐标是硬编码的,必须按你的相机视野重新标定;模型文件缺失导致 load_state_dict 报错。

✅ 自学检查清单:能说出流水线 7 步作用 · 能调阈值观察轮廓变化 · 能跑通分类推理 · 理解训练/验证集划分。

📥 本模块资料下载
Main.py(视觉服务端+流水线) 7KB CutFace.py(人脸采集) 2KB ModelTest.py(分类推理) 7KB TrainData.py(模型训练) 3KB 分类模型权重 .pkl(44MB·大文件,请向老师/U盘索取) resnet18 预训练 .pth(46MB·大文件,请向老师/U盘索取) OpenCV 4.1 中文文档 7.4MB

⑤ 联合调试与综合项目(第3周)

TCP通信触发/回传协议分拣系统考核

🎯 教学目标:理解 arm↔vision 的协同架构,跑通分拣系统并完成综合项目。

5.1 系统架构

机械臂端程序 ↔ Main.py(视觉服务端)通过 TCP(127.0.0.1:4000) 通信。两者运行在同一台工控机,机械臂端负责运动与触发,视觉端负责识别与回传。

5.2 通信协议

arm 端: socket_client.send('ok') # 到位后触发视觉 vision端: data = recv(1024) # 收到 'ok' → ROI裁剪 → 预处理 → 分类 vision端: socket_client.send('A'/'B'/'C'/'D') # 回传类别 arm 端: 按类别抓取对应料盘的物品

5.3 DobotVisionStudio

视觉工程配置入口,与 DobotStudio 配合完成"看到→识别→通知机械臂"的闭环。第3周 D2 在此跑通分拣 demo 并调参(ROI、阈值、分类阈值)。

5.4 综合项目

两人一组、一台设备:定义目标(如"视觉识别 + 机械臂分拣 4 类物品")→ 方案设计 → 实现联调 → 演示验收。重点考查系统级集成能力,而非单点操作。

5.5 考核方式

《非试卷方式考核内容、要求与评价标准》:项目报告 + 现场操作 + 演示答辩。过程性作业(作业1–4)计入平时成绩。

⚠️ 常见错误:端口被占用导致 connect 失败(确认只起一个实例);arm 端未等视觉回传就动作(应串行等待);分类阈值设太高致漏检、太低致误抓。

✅ 自学检查清单:能画出 TCP 通信时序 · 能解释 A/B/C/D 含义 · 能独立跑通分拣 demo · 能撰写项目报告。