File size: 1,598 Bytes
0c8beaf
5ed0597
 
0c8beaf
5ed0597
 
 
 
 
 
0c8beaf
5ed0597
 
 
 
 
 
 
 
 
 
 
 
 
0c8beaf
5ed0597
0c8beaf
5ed0597
 
 
 
 
 
0c8beaf
5ed0597
 
 
 
 
 
0c8beaf
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import gradio as gr
from lerobot.robots import LeFeetech
import time

# Inicializa conexión con robot Feetech
try:
    robot = LeFeetech(port="/dev/ttyUSB0")  # Cambia este puerto si es necesario
    motors = robot.motors
except Exception as e:
    raise RuntimeError(f"Error al conectar con el robot: {e}")

# Función para mover los motores desde los sliders
def controlar_robot(motor1_pos, motor2_pos, motor3_pos):
    try:
        # Envía posición a cada motor (ajusta según IDs reales)
        motors[0].goto(motor1_pos)
        motors[1].goto(motor2_pos)
        motors[2].goto(motor3_pos)
        
        time.sleep(0.5)  # espera para que el robot se mueva
        # Podrías agregar aquí sensores o cámara para devolver imagen
        return f"Motor1: {motor1_pos}, Motor2: {motor2_pos}, Motor3: {motor3_pos}"
    except Exception as err:
        return f"Error: {err}"

# Interfaz
with gr.Blocks() as demo:
    gr.Markdown("# Control en Tiempo Real del Robot LeRobot con Feetech")
    
    with gr.Row():
        motor1 = gr.Slider(0, 1023, value=512, label="Motor 1")
        motor2 = gr.Slider(0, 1023, value=512, label="Motor 2")
        motor3 = gr.Slider(0, 1023, value=512, label="Motor 3")

    estado = gr.Textbox(label="Estado del Robot")
    
    # Actualiza cada vez que se mueva algún slider
    motor1.change(fn=controlar_robot, inputs=[motor1, motor2, motor3], outputs=estado)
    motor2.change(fn=controlar_robot, inputs=[motor1, motor2, motor3], outputs=estado)
    motor3.change(fn=controlar_robot, inputs=[motor1, motor2, motor3], outputs=estado)

demo.launch()