Saltar al contenido principal

Demostración de agarre visual con reBot Arm B601-DM

reBot Arm B601-DM

License: MITPython VersionPlatformCameraYOLO

Percepción de profundidad · Detección de objetos · Calibración mano-ojo · Agarre autónomo · Totalmente de código abierto

YOLO es una familia ampliamente utilizada de modelos de detección de objetos en tiempo real que puede localizar y clasificar objetivos en una sola pasada hacia adelante. Este tutorial usa YOLO junto con la cámara de profundidad Orbbec Gemini 2 para construir una demostración funcional de agarre visual de escritorio para el reBot Arm B601-DM, que cubre la configuración del entorno, la integración de la cámara, la calibración mano-ojo y la validación del agarre.

Características del proyecto

  1. Estimación directa de la pose de agarre desde YOLO + OBB
    El flujo de trabajo usa directamente las cajas de detección o los rectángulos de área mínima OBB y toma el eje corto como la dirección de apertura de la pinza, evitando el procesamiento complejo de nubes de puntos 3D.

  2. Integración ligera del brazo robótico y la pinza
    El script principal de agarre reutiliza la interfaz RebotArm e integra IK, control de trayectoria y la máquina de estados de la pinza.

  3. Código abierto y extensible
    Todo el código fuente es abierto y los usuarios pueden personalizar los algoritmos de control y los efectos según sus propias necesidades.

Especificaciones

El hardware para este tutorial es proporcionado por Seeed Studio

ParámetroEspecificación
Modelo de brazo robóticoreBot Arm B601-DM
Grados de libertad6-DOF + pinza
Modelo de cámaraOrbbec Gemini 2
Método de detecciónYOLO + rectángulo de área mínima OBB
Método de comunicaciónBus CAN mediante adaptador USB2CAN; conexión de cámara USB 3.0
Tensión de funcionamiento24V CC
Plataforma hostPC con Ubuntu 22.04+
Versión recomendada de PythonPython 3.10

Lista de materiales (BOM)

ComponenteCantidadIncluido
Brazo robótico reBot Arm B601-DM1
Pinza1
Puente serie USB2CAN1
Adaptador de corriente (24V)1
Cable USB-C / comunicación1
Cámara de profundidad Orbbec Gemini 21
Conector de cámara Gemini 2 / soporte de montaje1

Cableado

  1. Conecta la Gemini 2 al host mediante USB 3.0.
  2. Conecta el adaptador USB2CAN al bus CAN del brazo.
  3. Asegúrate de que la fuente de alimentación de 24V, la cámara y el brazo robótico estén conectados de forma segura.
  4. Establece los permisos:
sudo chmod a+rw /dev/bus/usb/*/*
sudo chmod 666 /dev/ttyUSB0

Requisitos del entorno

ElementoRequisito
Sistema operativoUbuntu 22.04+
Python3.10
Entorno recomendadoconda
Carpeta de trabajo recomendadarebot_grasp
Entorno conda recomendadorebotarm

Pasos de instalación

Paso 0. Completa primero la preparación básica del brazo robótico

Antes de comenzar este tutorial, termina el contenido de reBot Arm B601-DM Quick Start, incluyendo el montaje del brazo robótico, la inicialización del punto cero, la configuración de los ID de los motores y las comprobaciones básicas de conectividad.

Paso 1. Clonar el repositorio

git clone https://github.com/Seeed-Projects/reBot-DevArm-Grasp.git rebot_grasp
cd rebot_grasp

Paso 2. Crear el entorno de Python

conda create -n rebotarm python=3.10 -y
conda activate rebotarm

Paso 3. Instalar las dependencias del proyecto

pip install -r requirements.txt

Paso 4. Instalar el SDK del brazo robótico

git clone https://github.com/vectorBH6/reBotArm_control_py.git sdk/reBotArm_control_py
cd sdk/reBotArm_control_py
pip install -e .
cd ../..

Paso 5. Instalar el SDK Orbbec Gemini 2

Este proyecto depende de pyorbbecsdk. El repositorio no incluye sdk/pyorbbecsdk por defecto, por lo que debes clonar tú mismo el repositorio oficial dentro de sdk/ o instalarlo de otra manera.

sudo apt-get update
sudo apt-get install -y cmake build-essential libusb-1.0-0-dev

cd sdk
git clone https://github.com/orbbec/pyorbbecsdk.git
cd pyorbbecsdk
pip install -e .

También puedes usar el mirror de Gitee:

cd sdk
git clone https://gitee.com/orbbecdeveloper/pyorbbecsdk.git
cd pyorbbecsdk
pip install -e .

Para el primer uso, se recomienda instalar las reglas udev:

sudo bash scripts/install_udev_rules.sh
sudo udevadm control --reload-rules
sudo udevadm trigger

Paso 6. Verificar las dependencias

python -c "import pyorbbecsdk; print('pyorbbecsdk OK')"
python -c "import motorbridge; print('motorbridge OK')"

Para el primer uso de la cámara Orbbec, se recomienda ejecutar scripts/install_udev_rules.sh dentro de tu directorio pyorbbecsdk instalado; de lo contrario, es posible que la cámara no se abra correctamente.

Calibración mano-ojo

Antes de ejecutar el flujo completo de agarre, completa primero la calibración mano-ojo Eye-in-Hand.

python scripts/collect_handeye_eih.py

Antes de ejecutarlo, asegúrate de que el siguiente parámetro de tamaño de ArUco en config/default.yaml coincida con el marcador impreso real:

calibration:
aruco:
marker_length_m: 0.1

En el modo automático, el brazo recorre 50 poses preestablecidas y registra una muestra siempre que el marcador ArUco se detecta de forma estable. Incluso si interrumpes el proceso con c o q, el script sigue intentando calcular el resultado de calibración a partir de las muestras recopiladas.

Si quieres mover el brazo robótico manualmente durante la recopilación, usa el modo manual:

python scripts/collect_handeye_eih.py --manual

En el modo manual, el brazo entra en modo de compensación de gravedad. Mueve el efector final a un ángulo de visión adecuado, pulsa Enter para capturar y pulsa c o q para finalizar y calcular el resultado.

El resultado de la calibración se guarda en:

config/calibration/orbbec_gemini2/hand_eye.npz

Recuento de muestras recomendado:

  • Mínimo: 5 muestras
  • Recomendado: al menos 15 muestras

Ejecución y depuración

1. Verificar solo la detección de objetos

python scripts/object_detection.py

Si necesitas cambiar el modelo de detección o las clases, modifica config/default.yaml:

yolo:
model_name: "yoloe-26l-seg.pt"
device: "cpu"
use_world: true
custom_classes:
- "yellow banana"
- "water bottle"
- "cup"

Este paso es útil para confirmar:

  • Que la cámara se abre correctamente
  • Que el modelo YOLO se carga correctamente
  • Que la detección de objetos con YOLO funciona como se espera

2. Verificar solo la estimación de agarre

python scripts/ordinary_grasp_pipeline.py

Si necesitas ajustar la frecuencia de inferencia de agarre o la distancia de retirada previa al agarre, modifica:

grasp_pipeline:
infer_every_live: 3
grasp:
depth_quantile: 0.6
pregrasp_offset_m: 0.080

Este script no se conecta al brazo robótico. Solo se usa para verificar:

  • Si el OBB o el rectángulo de área mínima es razonable
  • Si el punto de agarre se encuentra cerca del área central del objetivo
  • Si la dirección del eje corto coincide con la dirección de apertura esperada de la pinza

Controles clave:

  • Botón izquierdo del ratón: inspeccionar la profundidad en el píxel seleccionado
  • G: imprimir la pose de agarre óptima actual
  • Q / Esc: salir

3. Ejecutar el programa principal de agarre

python scripts/main.py

Si solo quieres validar la pose objetivo sin mover el brazo robótico:

python scripts/main.py --dry-run

Se recomienda verificar primero la pose y el espacio de trabajo alcanzable con --dry-run antes de ejecutar un agarre real.

Si reBotArm_control_py no está en la ubicación predeterminada, especifícalo en config/default.yaml:

robot:
repo_root: null

Mantenerlo como null suele ser suficiente porque el programa intentará detectar automáticamente primero sdk/reBotArm_control_py.

Flujo principal del programa:

  1. Inicializar el brazo robótico y la pinza
  2. Mover a la pose de preparado. Si quieres cambiar la pose inicial de preparado, modifica config/default.yaml:
robot:
ready_pose:
x: 0.3
y: 0.0
z: 0.3
roll: 0.0
pitch: 1.0
duration: 3.0
  1. Detectar en tiempo real los objetivos sobre la mesa
  2. Estimar la pose de agarre a partir del eje corto
  3. Pulsar G para capturar el fotograma actual y ejecutar el agarre

Teclas en tiempo de ejecución:

  • G: agarrar el mejor objetivo actual
  • R: reanudar la vista previa en vivo
  • Q / Esc: salir

Preguntas frecuentes (FAQ)

1. ModuleNotFoundError: No module named 'motorbridge'

Esto normalmente significa que las dependencias del SDK del brazo robótico no están instaladas en el entorno actual de Python. Por favor, comprueba:

conda activate rebotarm
pip install -r requirements.txt
cd sdk/reBotArm_control_py && pip install -e .

2. Al pulsar G no se ejecuta el agarre

Causas comunes:

  • hand_eye.npz no existe
  • El modo de calibración mano-ojo no es eye_in_hand
  • La pose objetivo no es alcanzable por IK

Se recomienda ejecutar:

python scripts/main.py --dry-run

3. La profundidad de agarre es inestable

Puedes intentar ajustar:

  • grasp_pipeline.grasp.depth_quantile
  • La altura de instalación de la cámara con respecto al área de trabajo
  • Las propiedades reflectantes de la superficie objetivo

Contacto

Referencias

Loading Comments...