Skip to main content

Cómo importar y controlar el kit SO100Arm en Isaac Sim

Introducción

El SO-100ARM es un proyecto de brazo robótico totalmente de código abierto lanzado por TheRobotStudio. Incluye el brazo seguidor y el brazo robótico líder, y también proporciona archivos de impresión 3D detallados y guías de operación. LeRobot se compromete a proporcionar modelos, conjuntos de datos y herramientas para la robótica del mundo real en PyTorch. Su objetivo es reducir la barrera de entrada de la robótica, permitiendo que todos contribuyan y se beneficien al compartir conjuntos de datos y modelos pre entrenados.

Esta wiki proporciona instrucciones sobre cómo importar el brazo robótico SO100 Arm Kit a la plataforma de simulación Isaac Sim de NVIDIA y controlarlo mediante scripts ROS2 y Python.

Introducción a los proyectos

El SO-ARM100 y el kit de robot inteligente reComputer Jetson AI combinan a la perfección el control del brazo robótico de alta precisión con una potente plataforma informática de IA, proporcionando una solución integral de desarrollo de robots. Este kit se basa en la plataforma Jetson Orin o AGX Orin, combinada con el brazo robótico SO-ARM100 y el marco de IA de LeRobot, ofreciendo a los usuarios un sistema de robot inteligente aplicable a múltiples escenarios como educación, investigación y automatización industrial. Esta wiki proporciona el tutorial de ensamblaje y depuración para SO ARM100 y realiza la recopilación de datos y la capacitación dentro del marco de Lerobot.

Especificaciones

EspecificacionesArm KitArm Kit Pro
TipoArm KitArm Kit Pro
Grados de libertad66
Torque máximo19.5kg.cm 7.4V30kg.cm 12V
ServoSTS3215 Bus ServoSTS3215 Bus Servo
Fuente de alimentación5.5mm*2.1mm DC 5V4A5.5mm*2.1mm DC 12V1A
Encoder12-bit encoder magnético12-bit encoder magnético
Rango de temperatura recomendada0℃~40℃0℃~40℃
ComunicaciónUARTUART
Plataforma de controlPCPC

Lista de materiales

ParteCantidadIncluido
STS3215 Servo112
Placa de control Motor2
Cable USB-21
Fuente de alimentación2
Abrazadera de mesa1
Partes impresas del brazo1

:::Precaución Las piezas impresas en 3D y las abrazaderas de mesa no están incluidas en el producto. Sin embargo, el SO-100ARM proporciona archivos STL de impresión 3D detallados y parámetros de impresión. Además, también ofrecemos las piezas impresas en 3D de la abrazadera de mesa. :::

Prerequisitos

  1. Familiarízate con nuestro tutorial de uso básico de Lerobot SO100Arm.
  2. Instala Isaac Sim según el tutorial.
  3. Completa la instalación y configuración de ROS2 según el tutorial

Instalar el entorno Lerobot

Paso 1. Clonar el proyecto Lerobot

  cd ~/
git clone https://github.com/ZhuYaoHui1998/lerobot.git
cd lerobot

Asegúrate de haber instalado el Entorno Lerobot según el tutorial.

Importar el URDF a Isaac Sim

Paso 1. Abrir Isaac Sim

Asegúrate de que Isaac Sim se haya instalado de acuerdo con el [tutorial oficial] de NVIDIA (https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_workstation.html), [se haya instalado ROS2 y se haya completado la configuración básica del entorno] (https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_ros.html). Abre la interfaz de Isaac Sim con los parámetros que se muestran en la siguiente figura.

Paso 2. Uso del importador URDF

Abre Isaac Utils → Workflows → URDF Importer en la barra de herramientas de Isaac Sim

Paso 3. Importar URDF

Manten los parámetros predeterminados, busca el archivo en Entrada e importa el URDF desde el repositorio clonado de Lerobot en /lerobot/SO-ARM100/URDF/SO_5DOF_ARM100_8j_URDF.SLDASM/urdf/SO_5DOF_ARM100_8j_URDF.SLDASM.urdf

Ahora puedes ver que nuestro brazo robótico SO100 ha sido importado a Isaac Sim.

Paso 4. Añade elementos de Física

En la barra de herramientas de Isaac Sim, navega hasta Crear → Física y agrega Escena física y Plano terrestre para configurar el entorno físico y el terreno.

Paso 5. Eliminar la Raíz de articulación de root_joint

En el panel Escenario de la derecha, busca root_joint. Haz click en él, luego en Propiedades a continuación, busca "Articulation root" en Física y haz click en × a la derecha para eliminar esta raíz.

Paso 6. Agrega la Articulation Root de root_joint

En el panel Escenario, haz click en SO100, haz click derecho y luego Add → Physics → Articulation Root.

Agregar gráfico de acción

Paso 1. En la barra de herramientas, navega hasta Create → Visual Scripting y agrega Action Graph.

Paso 2. Agregar componentes de acción.

En el cuadro de búsqueda, agrega en orden: On Playback Tick, Isaac Read Simulation Time, ROS2 Publish Joint State, Articulation Controller, ROS2 Subscribe Joint State.

Para una comprensión más clara de esta parte, realiza conexiones de acciones y configuraciones de parámetros básicos de acuerdo con el contenido del video.

Paso 3. Ejecuta

Haz click en el botón Reproducir a la derecha para iniciar la acción normalmente. En este punto, usa el comando ros2 topic list para ver la información del tema.

Control mediante Python ROS2 del movimiento del brazo robótico

Ahora puedes ejecutar los siguientes scripts de Python en el entorno ROS2 para controlar el brazo robótico. Los archivos de script se encuentran en lerobot/lerobot/scripts/ como control_motor.py y lerobot_publisher.py.

control_motor.py te permite enviar el ángulo de un servo específico individualmente, con valores de ángulo que oscilan entre -π y π.

control_motor.py
import threading

import rclpy
from sensor_msgs.msg import JointState

rclpy.init()
node = rclpy.create_node('position_velocity_publisher')
pub = node.create_publisher(JointState, 'joint_command', 10)

thread = threading.Thread(target=rclpy.spin, args=(node, ), daemon=True)
thread.start()

joint_state_position = JointState()

joint_state_position.name = ["Rotation", "Pitch","Elbow","Wrist_Pitch","Wrist_Roll","Jaw"]

joint_state_position.position = [0.2,0.2,float('nan'),0.2,0.2,0.2]
#joint_state_position.position = [0.0,0.0,0.0,0.0,0.0,0.0]

rate = node.create_rate(10)
try:
while rclpy.ok():
pub.publish(joint_state_position)

rate.sleep()
except KeyboardInterrupt:
pass
rclpy.shutdown()
thread.join()

lerobot_publisher.py implementa el envío continuo de comandos de acción a los servos.

lerobot_publisher.py
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import JointState
import numpy as np
import time


class TestROS2Bridge(Node):
def __init__(self):

super().__init__("test_ros2bridge")

# Create the publisher. This publisher will publish a JointState message to the /joint_command topic.
self.publisher_ = self.create_publisher(JointState, "joint_command", 10)

# Create a JointState message
self.joint_state = JointState()

self.joint_state.name = [
"Rotation",
"Pitch",
"Elbow",
"Wrist_Pitch",
"Wrist_Roll",
"Jaw"
]


num_joints = len(self.joint_state.name)

# make sure kit's editor is playing for receiving messages
self.joint_state.position = np.array([0.0] * num_joints, dtype=np.float64).tolist()
self.default_joints = [0, 0, 0, 0, 0, 0]

# limiting the movements to a smaller range (this is not the range of the robot, just the range of the movement
self.max_joints = np.array(self.default_joints) + 0.3
self.min_joints = np.array(self.default_joints) - 0.3

# position control the robot to wiggle around each joint
self.time_start = time.time()

timer_period = 0.05 # seconds
self.timer = self.create_timer(timer_period, self.timer_callback)

def timer_callback(self):
self.joint_state.header.stamp = self.get_clock().now().to_msg()

joint_position = (
np.sin(time.time() - self.time_start) * (self.max_joints - self.min_joints) * 0.5 + self.default_joints
)
self.joint_state.position = joint_position.tolist()

# Publish the message to the topic
self.publisher_.publish(self.joint_state)


def main(args=None):
rclpy.init(args=args)

ros2_publisher = TestROS2Bridge()

rclpy.spin(ros2_publisher)

# Destroy the node explicitly
ros2_publisher.destroy_node()
rclpy.shutdown()


if __name__ == "__main__":
main()

Referencias

TheRobotStudio Project: SO-ARM100

Huggingface Project: Lerobot

Dnsty: Jetson Containers

Jetson AI Lab

Diffusion Policy

ACT or ALOHA

TDMPC

VQ-BeT

Soporte Tech y discusión del producto

¡Gracias por elegir nuestros productos! Estamos aquí para darte soporte y asegurar que tu experiencia con nuestros productos sea la mejor posible. Tenemos diversos canales de comunicación para adaptarnos distintas preferencias y necesidades.

Loading Comments...