Saltar al contenido principal

Guía para desarrolladores del simulador web de reBot Arm B601-RS y ROS 2/MuJoCo

reBot Arm B601-RS

License: Apache 2.0ROS2 JazzyNode.js 18+Three.js r128Version v1.0.0Platform

Visualización con Three.js · ROS 2 · SocketCAN · Simulación MuJoCo · Control LLM/MCP

El proyecto reBot Arm B601-RS integra una consola web basada en Three.js, un driver ROS 2 para el robot real, una escena dinámica MuJoCo específica para RS, detección visual, trayectoria y cinemática inversa, y un agente de agarre LLM/MCP opcional. Esta guía explica cómo instalar, iniciar y desarrollar sobre todo el sistema.

Nota importante de seguridad

Antes de poner en marcha el robot real, fija el brazo, despeja el área de trabajo, confirma que el paro de emergencia físico funciona y valida primero las acciones en simulación. Para la primera prueba con el robot real, mantén el límite de velocidad en 0.2-0.4 rad/s y mueve una articulación cada vez.

Funciones del proyecto

  1. Modelo de brazo específico para RS

    La consola web y ROS 2 usan ReBot_Arm_RS.urdf y sus mallas STL correspondientes. El servidor web lee primero el modelo desde el espacio de trabajo rebotarm_ros2_RS y mantiene una copia local de respaldo.

  2. Enlace con robot real mediante RobStride + SocketCAN

    El robot real utiliza la interfaz Linux SocketCAN can0 a 1 Mbps por defecto. El controlador se comunica con los motores RobStride a través de reBotArm_control_py.

  3. Control en línea MIT a 125 Hz

    La consola web actualiza los objetivos hasta 60 Hz, mientras que el controlador del robot real genera una referencia en línea limitada por velocidad, aceleración y jerk a 125 Hz y envía comandos MIT q/dq/kp/kd/tau. Las actualizaciones de objetivos desde la web no bloquean el bucle de control de los motores.

  4. Aislamiento de espacios de nombres para robot real y simulación

    El robot real usa /rebotarm por defecto y la simulación usa /rebotarm_rs. La misma consola web puede cambiar los objetivos de control, y puedes ejecutar el robot real y el Fake Driver al mismo tiempo para comparar interfaces.

  5. Escena MuJoCo específica para RS

    MuJoCo admite modos physics y kinematic. El modo physics por defecto incluye gravedad, contacto, objetos sobre la mesa, una cámara cenital, detección de color y validación física del agarre.

  6. Animación web basada en retroalimentación

    En modo de robot real, el modelo sólido muestra la retroalimentación real y el modelo translúcido muestra el objetivo de control. La consola web aplica filtrado paso bajo adaptativo, una zona muerta de retroalimentación e interpolación de visualización a las mediciones de rosbridge para que la animación local no se confunda con la pose real del brazo.

  7. Máquina de estados de seguridad

    El sistema arbitra trayectorias, compensación de gravedad, homing seguro y comandos continuos desde la web. La desactivación desde una pose distinta de cero ejecuta primero un homing seguro y lo verifica; si la verificación falla, el brazo permanece habilitado para evitar una caída repentina.

  8. Agarre visual y LLM/MCP Agent

    La escena de simulación proporciona objetos rojos, azules y amarillos con detección cenital, IK, agarre, validación de elevación y soporte para colocar. Las herramientas MCP pueden usarse de forma independiente o conectarse a un modelo de lenguaje grande para invocar operaciones estructuradas del robot mediante lenguaje natural.

Notas sobre cableado y red

Cableado CAN del robot real RS

  1. Asegura el brazo y despeja su rango de movimiento.
  2. Conecta el bus CAN de los motores RobStride, la fuente de alimentación y el adaptador USB-CAN.
  3. Verifica que CAN_H, CAN_L y GND estén cableados correctamente y configura la resistencia de terminación según los requisitos de hardware.
  4. Después de encender, confirma que el adaptador CAN de destino aparece en Ubuntu.

Configura can0:

sudo ip link set can0 down 2>/dev/null || true
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
ip -details link show can0

Observa las tramas del bus en modo solo lectura:

candump can0

Las tramas CAN continuas significan que la interfaz está recibiendo datos. Pulsa Ctrl+C para salir de candump.

Si la interfaz entra en BUS-OFF, primero revisa la alimentación, la puesta a tierra, la velocidad en baudios, las resistencias de terminación, los ID de los motores y el cableado CAN. No enmascares fallos de hardware reiniciando el controlador repetidamente.

Red para Web y ROS 2

La consola web se comunica con ROS 2 a través del WebSocket de rosbridge, usando el puerto 9090 por defecto:

Web console: http://<Ubuntu-IP>:3002
rosbridge: ws://<Ubuntu-IP>:9090
MCP Server: http://<Ubuntu-IP>:8081/mcp
Text Agent: http://<Ubuntu-IP>:8082

Puedes usar localhost cuando la consola web y ROS 2 se ejecutan en la misma máquina. Al acceder desde otro ordenador en la LAN, no introduzcas el localhost del propio ordenador con el navegador; usa en su lugar la IP del host Ubuntu que ejecuta los servicios ROS 2.

El script de arranque del proyecto establece por defecto el rango de descubrimiento de ROS 2 en LOCALHOST, de modo que el roaming por Wi-Fi o los cambios de IP no dividan los nodos de la misma máquina en diferentes redes DDS. Esto no afecta al acceso a los puertos HTTP/WebSocket desde otros dispositivos. Para permitir que otro ordenador se una directamente al grafo ROS, establece el mismo valor en las terminales correspondientes:

export REBOTARM_ROS_DISCOVERY_RANGE=SUBNET

Requisitos del entorno

ElementoRequisito recomendado
SO de backendUbuntu 24.04
ROS 2Jazzy
Entorno de referencia compatibleUbuntu 22.04 + ROS 2 Humble (el uso con robot real requiere tus propias pruebas de regresión)
Python3.12 (Jazzy) o 3.10 (Humble)
Node.js18 o más reciente
NavegadorVersión estable actual de Chrome, Chromium, Edge o Firefox
Herramientas CANiproute2, can-utils
CAN para robot realcan0, 1 Mbps
MuJoCoInstalado por el entorno Python del proyecto

Pasos de instalación

Paso 1: Obtener el proyecto

git clone https://github.com/Yang-Ci/ReBot_Arm_web_RS.git ~/reBot_Arm_Mujoco-RS
cd ~/reBot_Arm_Mujoco-RS

Los comandos siguientes usan ~/reBot_Arm_Mujoco-RS como directorio del proyecto. Si tu directorio es diferente, sustituye las rutas en consecuencia.

Paso 2: Comprobación de entorno de solo lectura

cd ~/reBot_Arm_Mujoco-RS
./setup.sh --check

Este comando solo comprueba el sistema y no modifica el entorno. Las comprobaciones incluyen:

  • Versiones de Ubuntu, Python y Node.js;
  • ROS 2, rosbridge, MoveIt y herramientas de compilación;
  • Herramientas SocketCAN y can0;
  • El entorno virtual de Python y módulos clave;
  • Resultados de compilación del espacio de trabajo ROS 2;
  • El package.json web y .env.

Paso 3: Instalación y compilación con un solo clic

./setup.sh --yes
./rebotarm doctor

El script de instalación instala las dependencias que falten de ROS 2, Node.js, SocketCAN y compilación, crea rebotarm_ros2_RS/.venv, instala las dependencias de Python para el robot real RS, MuJoCo y Agent, ejecuta rosdep y compila el espacio de trabajo ROS 2 con:

colcon build --symlink-install

El SDK de control y los modelos MuJoCo son rastreados por el repositorio principal como archivos ordinarios. No son submódulos de Git y no contienen repositorios Git anidados. Los archivos .env, SDK y modelos existentes no se restablecen mediante el script de instalación.

Si las dependencias del sistema ya están completas, solo necesitas preparar y recompilar el espacio de trabajo ROS:

./scripts/setup_rs_workspace.sh

Tras modificar paquetes de Python, normalmente esto es suficiente:

source scripts/rs_env.sh
cd rebotarm_ros2_RS
colcon build --symlink-install

Paso 4: Configurar variables de entorno web

En la primera instalación, reBotArm_simulator-RS/.env se crea a partir de .env.example. Campos clave:

PORT=3002
HTTPS=0
REBOTARM_TEXT_AGENT_URL=http://localhost:8082
REBOTARM_MCP_URL=http://localhost:8081/mcp
MOTORBRIDGE_WS_URL=ws://127.0.0.1:9002
MOTORBRIDGE_WS_TOKEN=

Si la consola web y ROS 2/Agent no están en la misma máquina, cambia las direcciones del proxy a la IP de la máquina de backend. Las claves de API y los tokens solo deben almacenarse en variables de entorno o en el .env local no versionado.

Puesta en marcha del proyecto

Inicia solo el servidor web de Node.js, sin rosbridge ni ROS 2:

cd ~/reBot_Arm_Mujoco-RS/reBotArm_simulator-RS
npm start

Abre el navegador en:

http://localhost:3002

Este modo es adecuado para desarrollar el modelo 3D, la interfaz de usuario, las poses predefinidas y las funciones de front-end. Sin el backend ROS 2, la consola web no puede controlar el robot real ni la escena completa de MuJoCo.

Interfaz del simulador web de reBot Arm B601-RS

Línea de comandos unificada

ComandoDescripción
./rebotarm doctorComprobación de entorno de solo lectura, equivalente a ./setup.sh --check
./rebotarm start webInicia o reutiliza rosbridge e inicia el servidor web
./rebotarm start rs_simInicia toda la pila de simulación RS MuJoCo
./rebotarm start rsInicia el controlador del robot real RS; se requiere la variable de confirmación de hardware
./rebotarm statusVer procesos registrados, puertos y can0
./rebotarm stopDetiene los procesos hijo web/rosbridge registrados por start web

Los procesos de simulación y robot real que se ejecutan en primer plano deben finalizarse normalmente con Ctrl+C en sus propias terminales.

Arquitectura del proyecto

reBot_Arm_Mujoco-RS/
|-- setup.sh One-click check, install, and build
|-- rebotarm Unified start, status, and stop entry
|-- requirements-rs-hardware.txt RS real-robot Python dependencies
|-- requirements-rs-mujoco.txt MuJoCo/Agent Python dependencies
|-- scripts/
| |-- rs_env.sh Load ROS, venv, and workspace
| |-- setup_rs_workspace.sh Prepare and build the ROS 2 workspace
| |-- start_rs_sim.sh Full RS simulation stack
| |-- start_rs_hardware.sh RS real-robot controller
| |-- start_rs_dual.sh Real-robot/Fake dual-namespace startup
| `-- start_rs_text_agent.sh Text Agent HTTP service
|-- rebotarm_ros2_RS/
| |-- src/rebotarmcontroller/ Real-robot controller and Fake Driver
| |-- src/rebotarm_msgs/ Custom msg/srv/action
| |-- src/rebotarm_bringup/ Config, URDF, meshes, and launch
| |-- src/rebotarm_mujoco_rs/ RS MuJoCo, camera, detection, and tasks
| |-- src/rebotarm_agent/ MCP Server and Text Agent
| |-- src/rebotarm_moveit_config/ MoveIt configuration
| |-- src/rebotarm_moveit_demos/ Trajectory and picking/placing examples
| `-- third_party/reBotArm_control_py/ Plain-source control SDK
`-- reBotArm_simulator-RS/
|-- server.js Static server and Agent proxy
|-- public/index.html Web entry point
|-- public/js/rebot-sim.js Three.js, IK, scene, and animation
|-- public/js/ros/rebot-ros-client.js rosbridge client
|-- public/js/ros/rebot-ros-ui.js ROS UI, control, and feedback logic
|-- public/js/rebot-llm.js LLM chat UI
|-- description/ Standalone fallback model for the web
`-- split_meshes/grouped_gripper/ Optional web gripper meshes

Flujo de datos del sistema

Comandos web hacia el robot real RS

User drags a joint slider or TCP handle
-> Three.js / browser DLS IK
-> 30 ms slider damping, 1 deg input dead zone, max 60 Hz throttle
-> rosbridge WebSocket
-> JointMitCmd ROS topic
-> command state arbitration
-> 125 Hz velocity/acceleration/jerk-limited online reference
-> MIT q/dq/kp/kd/tau
-> reBotArm_control_py
-> MotorBridge + SocketCAN can0
-> RobStride motors

Un nuevo objetivo web solo actualiza el punto final de la trayectoria en línea. Incluso si el navegador deja temporalmente de enviar el siguiente fotograma, el bucle de control de 125 Hz sigue generando una referencia continua. La profundidad de QoS del comando es 1, por lo que un nuevo objetivo sobrescribe el objetivo antiguo no procesado y evita reproducir una cola de posiciones después de que se detenga el arrastre.

Realimentación del robot real RS hacia la web

RobStride encoder/status
-> SocketCAN can0
-> SDK status cache
-> 20 Hz real-robot sync query
-> 60 Hz ROS JointState publication
-> rosbridge subscription throttle
-> adaptive low-pass + feedback dead zone
-> 32-120 ms display interpolation
-> Three.js solid feedback model

El modelo translúcido representa el objetivo de control. La sombra del objetivo desaparece automáticamente cuando los errores de articulaciones y pinza son lo suficientemente pequeños. El filtrado de visualización solo afecta a la imagen web y no cambia los objetivos enviados a los motores.

Cadena de simulación MuJoCo

Web console or Agent
-> ROS 2 commands, services, or actions
-> Fake RS Driver (100 Hz)
-> MuJoCo Sync (250 Hz)
-> RS MJCF dynamics and collision
-> joint/object states, overhead camera, and color detection
-> Web console and MCP Agent

Notas sobre el control web

Objetivo de control y espacio de nombres

ModoNamespaceOrigen del modelo web
Robot real RS/rebotarmRealimentación real del robot /joint_states
Simulación RS/rebotarm_rsUsa primero el estado real de MuJoCo

Después de cambiar de modo, la consola web recrea el cliente rosbridge y las rutas de interfaz según el espacio de nombres objetivo.

Articulaciones y pinza

  • J1-J6 se controlan en radianes, con límites coherentes con el URDF de RS.
  • El rango de velocidad web es 0.05-1.50 rad/s con un valor predeterminado de 1.2 rad/s.
  • J1-J6 usan un amortiguamiento del deslizador de 30 ms y una zona muerta de entrada de 1 deg por defecto; la posición final se confirma de forma forzada cuando sueltas el deslizador.
  • J7/la pinza se muestra como anchura de apertura en la web, con un rango de 0-71.5 mm.
  • La pinza se convierte al rango de motor RS 0-5 rad al publicar, y la realimentación de ROS se convierte de nuevo a milímetros.
  • J7 no pasa por el amortiguamiento en radianes ni la zona muerta de entrada de J1-J6; solo se envía el objetivo más reciente por fotograma de renderizado del navegador.

Arrastre del TCP e IK

La consola web usa mínimos cuadrados amortiguados (DLS) para resolver objetivos de TCP. La versión RS adapta el amortiguamiento según el nivel de singularidad y luego envía la solución de articulaciones a través de la misma cadena de control en línea MIT.

La escena web de Three.js usa eje Y hacia arriba y ROS usa eje Z hacia arriba. La lógica de conversión de coordenadas está en rebot-sim.js; al ampliar funciones de pose, reutiliza la conversión existente en lugar de intercambiar directamente los valores de los formularios.

La entrada de pose usa metros: X es hacia delante, Y es hacia la izquierda y Z es hacia arriba. Si un objetivo es inalcanzable, primero aumenta Z o reduce la distancia horizontal, luego comprueba las restricciones de orientación y los límites de las articulaciones.

Enseñanza y reproducción de trayectorias

La consola web puede registrar trayectorias de articulaciones y llamar a:

/<namespace>/follow_joint_trajectory

El servidor de acciones del robot real RS usa referencias continuas de posición/velocidad cúbicas de Hermite monótonas y amplía automáticamente los segmentos de trayectoria que son demasiado cortos, manteniendo las velocidades de trayectoria ordinarias del robot real por debajo de aproximadamente 0.60 rad/s. Los llamadores deben esperar el resultado de la acción o la realimentación del robot real y no deben finalizar la animación de reproducción antes de tiempo según la duración original de la solicitud.

Enable, homing seguro y disable

  • El controlador del robot real debe habilitarse después de cada arranque.
  • safe_home vuelve suavemente a cero y valida ángulo y velocidad.
  • Hacer clic en disable desde una pose distinta de cero entra primero en SAFE_HOMING.
  • Si la validación de homing falla, los motores permanecen habilitados y se devuelve un resultado de fallo.
  • set_zero reescribe el punto cero del motor y no es un botón de homing normal. Solo llámalo cuando la estructura mecánica esté realmente en la pose calibrada.

Compensación de gravedad

La compensación de gravedad de RS comienza desde la pose medida actualmente y cambia a MIT articulación por articulación, de modo que la pose cero no se confunda con el objetivo. Los inicios repetidos son idempotentes; al detenerse se mantiene la última posición medida.

Los comandos web de articulación, TCP, trayectoria y pinza se rechazan durante la compensación de gravedad. Servicios relacionados:

/<namespace>/gravity_compensation/start
/<namespace>/gravity_compensation/stop
/<namespace>/gravity_compensation/status

Interfaces ROS 2

Los ejemplos siguientes usan el /rebotarm del robot real. Para la simulación, reemplaza el prefijo por /rebotarm_rs.

Tópicos de estado

TópicoTipoDescripción
/rebotarm/joint_statessensor_msgs/msg/JointStateEstado unificado de seis ejes y pinza
/rebotarm/joints/<name>/staterebotarm_msgs/msg/JointMotorStatePosición, velocidad, par y código de estado de un solo motor
/rebotarm/gripper/staterebotarm_msgs/msg/JointMotorStateEstado bruto del motor de la pinza
/rebotarm/control_targetsensor_msgs/msg/JointStateObjetivo final desde la consola web o la capa de acciones
/rebotarm/control_referencesensor_msgs/msg/JointStateMuestra ROS de la referencia de trayectoria en línea de 125 Hz; effort transporta la aceleración de referencia
/rebotarm/arm_statusrebotarm_msgs/msg/ArmStatusEstado de habilitación, modo, máquina de estados y códigos de error

Tópicos de comandos de bajo nivel

TópicoTipoDescripción
/rebotarm/joints/<joint1..joint6>/cmd/mitrebotarm_msgs/msg/JointMitCmdComando de articulación predeterminado desde la consola web para el robot real
/rebotarm/joints/<joint1..joint6>/cmd/pos_velrebotarm_msgs/msg/JointPosVelCmdComando de posición-velocidad
/rebotarm/gripper/cmd/mitrebotarm_msgs/msg/JointMitCmdComando MIT de la pinza RS
/rebotarm/gripper/cmd/pos_velrebotarm_msgs/msg/JointPosVelCmdComando de posición-velocidad de la pinza
/rebotarm/mujoco/target_posegeometry_msgs/msg/PoseStampedPose objetivo del TCP

Antes de publicar tú mismo comandos de bajo nivel, revisa arm_status.state_machine. No interrumpas el control durante GRAVITY_COMP, SAFE_HOMING o la ejecución de trayectorias.

Servicios

ServicioTipoDescripción
/rebotarm/enablestd_srvs/srv/TriggerHabilitar el brazo
/rebotarm/disablestd_srvs/srv/TriggerDeshabilitar de forma segura; primero hace homing cuando es necesario
/rebotarm/safe_homestd_srvs/srv/TriggerHoming seguro con validación
/rebotarm/set_zerorebotarm_msgs/srv/SetZeroEscribir el punto cero del motor; usar con precaución
/rebotarm/gravity_compensation/startstd_srvs/srv/TriggerIniciar la compensación de gravedad
/rebotarm/gravity_compensation/stopstd_srvs/srv/TriggerDetener la compensación de gravedad
/rebotarm/gravity_compensation/statusstd_srvs/srv/TriggerConsultar el estado de la compensación de gravedad
/rebotarm/move_to_pose_ikrebotarm_msgs/srv/MoveToPoseIKResolución de IK de pose
/rebotarm/gripper/setrebotarm_msgs/srv/SetGripperControl de posición de la pinza
/rebotarm/gripper/openrebotarm_msgs/srv/GripperCommandAbrir la pinza
/rebotarm/gripper/closerebotarm_msgs/srv/GripperCommandCerrar la pinza

Ejemplo:

source scripts/rs_env.sh
ros2 service call /rebotarm/gravity_compensation/status std_srvs/srv/Trigger '{}'
ros2 service call /rebotarm/safe_home std_srvs/srv/Trigger '{}'

Acciones

AcciónTipoDescripción
/rebotarm/follow_joint_trajectorycontrol_msgs/action/FollowJointTrajectoryTrayectoria de articulaciones
/rebotarm/gripper/commandcontrol_msgs/action/GripperCommandAcción de la pinza
/rebotarm/move_to_poserebotarm_msgs/action/MoveToPoseMovimiento de pose cartesiana

Interfaces de MuJoCo y visión

InterfazTipo/Uso
/rebotarm_rs/mujoco/joint_statesEstados reales de articulaciones de MuJoCo
/rebotarm_rs/mujoco/object_statesEstados de objetos de la escena como JSON
/rebotarm_rs/mujoco/overhead_rgb/image_rawCámara RGB cenital
/rebotarm_rs/vision/color_blocks/detectionsDetección de objetos por color en JSON
/rebotarm_rs/mujoco/resetReiniciar la simulación
/rebotarm_rs/mujoco/record/startIniciar la grabación
/rebotarm_rs/mujoco/record/stopDetener la grabación
/rebotarm_rs/mujoco/record/replayReproducir una grabación
/rebotarm_rs/mujoco/record/clearBorrar grabaciones

Agarre visual

La simulación completa incluye por defecto un cubo rojo, un cuboide azul y un cilindro amarillo. La consola web puede seleccionar un color objetivo o elegir automáticamente, luego realizar alineación, pre-agarre, descenso, cierre, elevación y colocación.

El éxito del agarre no se trata solo de completar la trayectoria. El sistema también comprueba si el objeto de MuJoCo fue realmente levantado, evitando un informe de éxito falso cuando la pinza se cierra vacía o la trayectoria se completa sin recoger el objeto.

Solucionar problemas de agarre visual:

source scripts/rs_env.sh
ros2 topic echo /rebotarm_rs/vision/color_blocks/detections --once
ros2 topic echo /rebotarm_rs/mujoco/object_states --once
ros2 service list | grep rebotarm_rs

Si la pinza se cierra pero no levanta el objeto:

  • confirma que se usa el modo physics;
  • comprueba si la cámara y la detección de color están publicando continuamente;
  • revisa el ancho, la orientación y la altura de agarre del objetivo;
  • revisa en los registros la estabilidad de contacto y los resultados de validación de elevación física;
  • evita iniciar múltiples solicitudes de agarre o IK al mismo tiempo.

Control de texto LLM/MCP

Arquitectura

Web rebot-llm.js
-> Node.js /api/llm/chat
-> Text Agent (default :8082)
-> MCP Server (default :8081/mcp)
-> ROS 2 service/action/topic

El LLM entiende el lenguaje natural, y la capa MCP restringe la intención en llamadas de herramientas estructuradas. Sin una configuración de LLM, las herramientas MCP de detección, IK, articulaciones, pinza y agarre aún se pueden llamar directamente.

Iniciar el agente de texto

La simulación completa inicia el Agente MCP de forma predeterminada. Para habilitar el punto de entrada en lenguaje natural, abre otra terminal:

cd ~/reBot_Arm_Mujoco-RS
export DASHSCOPE_API_KEY='your-key'
export REBOTARM_LLM_MODEL='qwen-plus'
./scripts/start_rs_text_agent.sh

Direcciones predeterminadas:

MCP Server: http://127.0.0.1:8081/mcp
Dashboard: http://localhost:8082

En la consola web puedes:

  • consultar el estado del brazo y de ROS;
  • abrir o cerrar la pinza;
  • comprobar si una pose objetivo es alcanzable;
  • moverte a una pose especificada;
  • agarrar un objeto de un color especificado.

Antes de habilitar herramientas de movimiento en un entorno de robot real, comprueba explícitamente el permiso de movimiento y el espacio de nombres del Agente. El punto de entrada en lenguaje natural no puede eludir la máquina de estados de seguridad del backend del brazo ni reemplazar la parada de emergencia física.

Parámetros clave de control

La configuración predeterminada del robot real se encuentra en:

rebotarm_ros2_RS/src/rebotarm_bringup/config/rebotarm_hardware.yaml

Parámetros clave actuales de RS:

rate: 125
control:
arm_control_mode: mit
mit_kp: [80, 150, 150, 50, 50, 50]
mit_kd: [5, 10, 10, 5, 4, 4]
stream_acceleration_limit: 4.0
stream_jerk_limit: 30.0
stream_natural_frequency: 8.0
gravity_compensation:
kp: 2.0
kd: 1.0

Otras frecuencias predeterminadas:

CapaFrecuencia predeterminadaDescripción
Objetivo de articulación webHasta 60 HzLos deslizadores y el IK de TCP actualizan continuamente el objetivo
Consulta de retroalimentación de sincronización del robot real20 HzActualizar la caché de medición de RobStride
Estado ROS del robot real60 HzPublicar retroalimentación, objetivo y referencia desde la caché
Control MIT de RS125 HzSuavizado en línea y comandos de motor
Fake Driver100 HzControl y estado de simulación
Sincronización MuJoCo250 HzSincronización de dinámica predeterminada
Estado de objetos MuJoCo30 HzEscena y Agente
Cámara cenital8 HzImagen RGB
Detección de color10 HzResultados de detección

Antes de ajustar ganancias, registra todo lo siguiente al mismo tiempo:

/rebotarm/control_target
/rebotarm/control_reference
/rebotarm/joint_states

Si el objetivo es discontinuo, revisa la capa de entrada web; si la referencia es discontinua, revisa la trayectoria en línea; si la referencia es continua pero la retroalimentación se sobrepasa, revisa las ganancias MIT, la carga, la fricción, la corriente y el aumento de temperatura; solo revisa el filtrado de retroalimentación y los intervalos de llegada de rosbridge cuando solo la animación web presenta vibraciones.

Guía de desarrollo secundario

Modificar límites de articulación web o poses preestablecidas

Archivo:

reBotArm_simulator-RS/public/js/rebot-sim.js

Las definiciones de articulaciones están en jointDefs y los preajustes en presets. Al modificar los límites de articulación, verifica conjuntamente el URDF de RS, la configuración del SDK y los límites mecánicos reales; no cambies solo el rango de visualización en la web.

Modificar la frecuencia, el filtrado y el amortiguamiento de comandos web

Archivo:

reBotArm_simulator-RS/public/js/ros/rebot-ros-ui.js

Este archivo gestiona la limitación de comandos web, el filtrado de retroalimentación del robot real, la zona muerta de retroalimentación, la interpolación, la sombra del objetivo, los bloqueos de control y la lógica de visión. No compenses la latencia de animación web aumentando las ganancias MIT del robot real.

Añadir interfaces ROS personalizadas

El contenedor del cliente se encuentra en:

reBotArm_simulator-RS/public/js/ros/rebot-ros-client.js

Añade rutas de Topic, Service o Action en la capa de UI y llama a subscribe(), callService() o sendActionGoal() del cliente. Las interfaces siempre deben generarse a partir del namespace actual para evitar enviar comandos de simulación al robot real.

Modificar el URDF o la malla de RS

Modelos principales de ROS 2:

rebotarm_ros2_RS/src/rebotarm_bringup/description/urdf/ReBot_Arm_RS.urdf
rebotarm_ros2_RS/src/rebotarm_bringup/description/meshes_rs/

El servidor web lee primero los modelos anteriores. Si el directorio web se copia y ejecuta por separado, usa:

reBotArm_simulator-RS/description/urdf/ReBot_Arm_RS.urdf
reBotArm_simulator-RS/description/meshes_rs/

Mantén ambas copias sincronizadas al modificarlas y comprueba las mayúsculas y minúsculas de los nombres de archivo en Linux.

Modificar MuJoCo

Archivo/directorioFunción
rebotarm_ros2_RS/src/rebotarm_mujoco_rs/models/MJCF y STL de RS
rebotarm_mujoco_rs/mujoco_sync.pyFrecuencia de sincronización, dinámica y PD
rebotarm_mujoco_rs/scene_camera.pyCámara cenital
rebotarm_mujoco_rs/scene_detector.pyDetección de color
rebotarm_mujoco_rs/task_server.pyTareas, grabación y reproducción
rebotarm_mujoco_rs/launch/mujoco_rs.launch.pyParámetros de lanzamiento

Ampliar las herramientas MCP

El servidor MCP se encuentra en:

rebotarm_ros2_RS/src/rebotarm_agent/rebotarm_agent/rebotarm_mcp_server.py

Al añadir una herramienta:

  1. define un esquema de entrada y unidades claros;
  2. separa las herramientas de solo lectura de las herramientas de movimiento;
  3. valida el espacio de nombres, el estado y el permiso de movimiento en las herramientas de movimiento;
  4. llama al backend mediante ROS 2 Service/Action/Topic en lugar de omitir el controlador directamente;
  5. recompila el espacio de trabajo y prueba las rutas de error, tiempo de espera y cancelación en simulación.

Comandos de verificación

source scripts/rs_env.sh
python3 -m pytest rebotarm_ros2_RS/src/rebotarmcontroller/test -q

bash -n setup.sh rebotarm scripts/*.sh

node --check reBotArm_simulator-RS/server.js
node --check reBotArm_simulator-RS/public/js/rebot-sim.js
node --check reBotArm_simulator-RS/public/js/ros/rebot-ros-client.js
node --check reBotArm_simulator-RS/public/js/ros/rebot-ros-ui.js
node --check reBotArm_simulator-RS/public/js/rebot-llm.js

Comprobaciones en tiempo de ejecución:

./rebotarm status
ros2 node list
ros2 topic list | grep rebotarm
ros2 service list | grep rebotarm
ros2 action list | grep rebotarm

Preguntas frecuentes

1. La página web se queda en la pantalla de carga del modelo

Abre el panel Network de las herramientas de desarrollador del navegador y comprueba si estas solicitudes devuelven 200:

/api/urdf
/api/description/meshes/*.STL

Causas comunes:

  • el URDF o STL de RS no existe;
  • el directorio web se movió solo y el modelo de reserva está incompleto;
  • el mapeo de package:// en el URDF es incorrecto;
  • las mayúsculas y minúsculas del nombre de archivo en Linux no coinciden;
  • el orden de carga de Three.js, STLLoader o URDFLoader es incorrecto.

2. ROS muestra "disconnected"

ss -ltnp | grep 9090
ros2 node list
./rebotarm status

Confirma que rosbridge escucha en 0.0.0.0:9090 y que la dirección WebSocket comienza con ws://. Los navegadores remotos deben introducir la IP de Ubuntu, no el localhost del ordenador del navegador.

3. La consola web se conecta, pero los deslizadores no pueden controlar el robot real

Comprueba en este orden:

  1. La consola web está en el robot real RS /rebotarm.
  2. El WebSocket de ROS está conectado.
  3. El bloqueo de control web está habilitado.
  4. El brazo está habilitado.
  5. arm_status no está en GRAVITY_COMP, TRAJ_RUNNING o SAFE_HOMING.
  6. No hay errores de CAN o del motor en el controlador del robot real.

4. El modelo web vibra o la sombra del objetivo persiste

  • Confirma que solo existen un controlador y un publicador de estado para el mismo espacio de nombres.
  • Comprueba si /joint_states tiene múltiples publicadores.
  • Registra control_target, control_reference y joint_states al mismo tiempo.
  • Comprueba los contadores de errores de CAN y los intervalos de llegada de la retroalimentación.
  • No ejecutes la reproducción de trayectorias y el arrastre manual continuo al mismo tiempo.

Una sombra de objetivo de larga duración suele significar que la retroalimentación real no ha alcanzado el objetivo; esto no es necesariamente un problema de renderizado web.

5. No hay retroalimentación CAN, o BUS-OFF

ip -details -statistics link show can0
candump can0

Comprueba:

  • si la velocidad en baudios es 1 Mbps;
  • si CAN_H/CAN_L están invertidos;
  • las resistencias de terminación en ambos extremos;
  • la alimentación de los motores y la masa común;
  • los ID de los motores y la configuración del SDK;
  • el controlador USB-CAN y el nombre de la interfaz.

Detén inmediatamente la prueba con el robot real si el contador de errores sigue aumentando.

6. El brazo no se apaga inmediatamente después de hacer clic en deshabilitar

Si el brazo no está cerca de la pose cero, el controlador realiza primero un homing seguro y lo valida. Este es el comportamiento esperado. Si el homing falla, el sistema mantiene el brazo habilitado para evitar que caiga desde una pose distinta de cero. Usa la parada de emergencia física en caso de emergencia.

7. La compensación de gravedad no se inicia o no puede controlar

  • Confirma que el brazo está habilitado.
  • Consulta /gravity_compensation/status.
  • Confirma que no se está ejecutando ninguna trayectoria ni homing seguro.
  • Otros comandos de movimiento se rechazan durante la compensación de gravedad.
  • Soporta cualquier carga que pueda caer al cambiar de modo.

8. La sujeción visual no funciona

Confirma que el rs_sim completo se está ejecutando en modo physics, luego comprueba:

ros2 topic echo /rebotarm_rs/mujoco/overhead_rgb/image_raw --once
ros2 topic echo /rebotarm_rs/vision/color_blocks/detections --once
ros2 topic echo /rebotarm_rs/mujoco/object_states --once

Si el botón muestra que hay una tarea en cola, espera a que termine la acción en serie actual y no inicies varias solicitudes de sujeción repetidamente.

9. El asistente LLM no se puede conectar

Confirma que el Text Agent está iniciado:

./scripts/start_rs_text_agent.sh

Comprueba REBOTARM_TEXT_AGENT_URL y REBOTARM_MCP_URL en reBotArm_simulator-RS/.env. La consola web comprueba el backend a través de /api/llm/health. No escribas claves de API en el código fuente web ni las confirmes en el repositorio.

10. La página sigue mostrando una versión antigua después de modificar el front-end

La consola web de RS incluye compatibilidad con Service Worker/PWA. Primero usa Ctrl+Shift+R para una recarga forzada; si aún no se actualiza, borra los datos del sitio o anula el registro del Service Worker en las herramientas de desarrollador del navegador y luego vuelve a cargar la página.

11. setup.sh o colcon build falla

  • Confirma que las versiones de Ubuntu, ROS 2 y Python coinciden.
  • Confirma que rosdep está inicializado y puede actualizarse.
  • Ejecuta ./setup.sh --check para ver los elementos que faltan.
  • Confirma que numpy, scipy, mujoco, pinocchio, motorbridge y fastmcp se pueden importar en rebotarm_ros2_RS/.venv.
  • Haz copia de seguridad de los archivos de usuario antes de eliminarlos o restablecerlos, y no resuelvas problemas de compilación con comandos destructivos.

Tabla rápida de comandos

# Check and install
./setup.sh --check
./setup.sh --yes
./rebotarm doctor

# Full simulation
./rebotarm start rs_sim
./rebotarm start web

# Natural-language Agent
export DASHSCOPE_API_KEY='your-key'
./scripts/start_rs_text_agent.sh

# RS real robot
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
REBOTARM_RS_HARDWARE_CONFIRM=I_UNDERSTAND_RS_WILL_MOVE ./rebotarm start rs

# Status and stop
./rebotarm status
./rebotarm stop

Referencias

Loading Comments...