Pre-launch preview — prices, stock and shipping rates shown here are provisional and online payment is not open yet. Questions: service@nenpower.com
English

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 模型文件随硬件一同提供。请把订单确认邮件发送到以下邮箱获取:

→ service@nenpower.com

最后更新 21 Sep 2026