三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

06-静态物体精准抓取:检测+坐标转换+机械臂运动调用

06-静态物体精准抓取:检测+坐标转换+机械臂运动调用

静态物体精准抓取:检测+坐标转换+机械臂运动调用

作者:黒漂技术佬
场景:智慧农业果蔬采摘、无人售货柜商品分拣、工控产线零件取放


一、静态抓取到底在干什么?

先说人话:静态抓取就是物体不动,机械臂去把它拿起来

听起来简单,但拆开来看,这背后是一条完整的工程链路:

摄像头拍照 → YOLO检测目标 → 像素坐标转机械臂坐标 → 逆运动学算关节角 → 运动规划 → 夹爪执行

每一步都可能出错,任何一环偏差1厘米,到末端就是"抓了个寂寞"。所以咱们一步一步掰开揉碎讲。


二、步骤一:YOLO检测目标位置

摄像头拍到的图像是二维的,YOLO(You Only Look Once)做的就是把目标框出来,告诉你这个物体在图像中的像素坐标 (u, v)

fromultralyticsimportYOLOimportcv2# 加载训练好的模型model=YOLO("best.pt")# 读取摄像头画面frame=cv2.imread("scene.png")results=model(frame,verbose=False)# 提取第一个检测框的中心像素坐标forboxinresults[0].boxes:x1,y1,x2,y2=box.xyxy[0].tolist()u=int((x1+x2)/2)# 像素中心xv=int((y1+y2)/2)# 像素中心yconf=box.conf[0].item()print(f"目标像素坐标: ({u},{v}), 置信度:{conf:.2f}")

小白必问:像素坐标是啥?

你的屏幕分辨率1920×1080,每个点就是一个像素。YOLO输出的(u, v)就是目标在图像里的行列号。但机械臂不认识像素,它只认"毫米",所以下一步必须做坐标转换。


三、步骤二:手眼标定——像素坐标转机械臂坐标

这是整个流程里最容易翻车的一步

机械臂有自己的基坐标系(Base Frame),摄像头有自己的相机坐标系(Camera Frame)。你要把像素坐标翻译成机械臂能理解的(X, Y, Z)三维坐标,靠的就是手眼标定矩阵

标定矩阵长什么样?

标定得到一个 4×4 的齐次变换矩阵:

[H_camera_to_base] = | R(3x3) T(3x1) | | 0 0 0 1 |
  • R是旋转矩阵,描述相机和机械臂之间的角度关系
  • T是平移向量,描述两者之间的位置偏移

坐标转换代码

importnumpyasnpdefpixel_to_arm_coords(u,v,depth,H_cam2base,camera_matrix,dist_coeffs):""" 像素坐标 -> 相机三维坐标 -> 机械臂基坐标 depth: 目标到相机的距离(毫米),通过深度相机或已知高度获取 """
← 返回列表