Examples
示例项目
4 个完整可运行的项目:简单抓取放置、基于视觉的颜色分拣、传送带跟踪抓取、自定义舵机夹爪集成。
示例项目
4 个完整可运行的项目
项目 1:简单抓取与放置
难度:简单 用时:30 分钟 适合:入门用户
简单抓取放置项目演示
项目目标
从固定位置抓取物体,放到目标位置。
所需材料
-
Delta 机器人完整套件
-
测试物体(小塑料块,≤50g)
完整代码
from serial import Serial
import time
# 连接机器人
robot = Serial('COM3', 115200, timeout=1)
time.sleep(2)
def send_gcode(cmd):
robot.write((cmd + '\n').encode())
print(f"Sent: {cmd}")
time.sleep(0.1)
def pick_place():
"""简单抓取放置演示"""
# 物体位置
object_x, object_y = 30, -20
# 目标位置
target_x, target_y = -40, 30
# 安全高度
safe_z = -160
pick_z = -200
print("Starting pick and place...")
# 1. 回零
send_gcode("G28")
time.sleep(3)
# 2. 移到物体上方
send_gcode(f"G0 X{object_x} Y{object_y} Z{safe_z}")
time.sleep(2)
# 3. 下降到抓取高度
send_gcode(f"G0 Z{pick_z}")
time.sleep(1)
# 4. 吸取
send_gcode("M121") # 开泵
send_gcode("M2") # 关阀(保持真空)
time.sleep(0.5)
# 5. 上升
send_gcode(f"G0 Z{safe_z}")
time.sleep(1)
# 6. 移到目标位置
send_gcode(f"G0 X{target_x} Y{target_y}")
time.sleep(2)
# 7. 下降
send_gcode(f"G0 Z{pick_z}")
time.sleep(1)
# 8. 释放
send_gcode("M1") # 开阀(释放)
time.sleep(0.3)
# 9. 上升并关泵
send_gcode(f"G0 Z{safe_z}")
time.sleep(1)
send_gcode("M122") # 关泵
print("Pick and place completed!")
# 运行
pick_place()
# 关闭串口
robot.close()
预期效果
物体从起点平稳移动到目标位置,无卡顿。
项目 2:基于视觉的分拣
难度:中等 用时:2 小时 适合:进阶用户
按颜色分拣物体
项目目标
用 YOLOv8 识别不同颜色的物体,并分拣到对应的目标区域。
主程序
import cv2
from ultralytics import YOLO
from serial import Serial
import time
import numpy as np
# 初始化
robot = Serial('COM3', 115200)
model = YOLO('yolov8n.pt')
cap = cv2.VideoCapture(0)
H = np.load('homography_matrix.npy')
# 分拣目标位置
sort_bins = {
'red': (-60, 40),
'green': (0, 60),
'blue': (60, 40)
}
def pixel_to_robot(px, py):
"""像素坐标转机器人坐标"""
point = np.array([[[px, py]]], dtype='float32')
result = cv2.perspectiveTransform(point, H)
return result[0][0][0], result[0][0][1]
def sort_object(color, x, y):
"""抓取并分拣到对应位置"""
target_x, target_y = sort_bins[color]
robot.write(b'G28\n')
time.sleep(2)
# 抓取
robot.write(f'G0 X{x:.1f} Y{y:.1f} Z-160\n'.encode())
time.sleep(1)
robot.write(b'G0 Z-200\n')
robot.write(b'M121\n')
robot.write(b'M2\n')
time.sleep(0.5)
robot.write(b'G0 Z-160\n')
# 放置
robot.write(f'G0 X{target_x} Y{target_y}\n'.encode())
time.sleep(1)
robot.write(b'G0 Z-200\n')
robot.write(b'M1\n')
time.sleep(0.3)
robot.write(b'G0 Z-160\n')
robot.write(b'M122\n')
# 主循环
print("Color sorting started...")
while True:
ret, frame = cap.read()
if not ret:
break
# 目标检测
results = model(frame)
for r in results:
boxes = r.boxes
for box in boxes:
# 获取类别与位置
cls = int(box.cls[0])
x1, y1, x2, y2 = box.xyxy[0].tolist()
cx, cy = int((x1 + x2) / 2), int((y1 + y2) / 2)
# 识别颜色(按类别 ID)
color_map = {0: 'red', 1: 'green', 2: 'blue'}
if cls in color_map:
color = color_map[cls]
# 坐标变换
robot_x, robot_y = pixel_to_robot(cx, cy)
# 执行分拣
print(f"Sorting {color} object at ({robot_x:.1f}, {robot_y:.1f})")
sort_object(color, robot_x, robot_y)
# 显示结果
annotated = results[0].plot()
cv2.imshow('Color Sorting', annotated)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
robot.close()
项目 3:传送带跟踪抓取
难度:高级 用时:3 小时 适合:专家用户
从运动中的传送带上抓取
项目目标
从运动的传送带上抓取物体,需要运动补偿与位置预测算法。
核心技术:运动补偿
def predict_position(current_x, current_y, velocity, delay):
"""
预测物体未来位置
参数:
current_x, current_y: 当前位置
velocity: 传送带速度(mm/s)
delay: 机器人响应延迟(s)
返回:
predicted_x, predicted_y: 预测位置
"""
displacement = velocity * delay
predicted_x = current_x + displacement
predicted_y = current_y # 假设只沿 X 轴运动
return predicted_x, predicted_y
项目 4:自定义夹爪集成
难度:中等 用时:2 小时 适合:硬件爱好者
换成舵机驱动的机械夹爪
项目目标
把气动吸盘换成舵机驱动的机械夹爪,用于夹取不规则物体。
固件适配
// 文件:esp32/gripper.cpp
#include
Servo gripper;
#define GRIPPER_PIN 16
void setup() {
gripper.attach(GRIPPER_PIN);
gripper.write(90); // 初始位置(张开)
}
// M7:闭合
void gripperClose() {
gripper.write(30); // 闭合角度
}
// M9:张开
void gripperOpen() {
gripper.write(90); // 张开角度
}
获取完整代码
所有示例项目的完整代码、数据集和 3D 模型文件随硬件一同提供。请把订单确认邮件发送到以下邮箱获取:
最后更新 21 Sep 2026