blanchon's picture
Initial commit
02eac4b
#!/usr/bin/env python3
"""
Basic Consumer Example - LeRobot Arena
This example demonstrates:
- Connecting to an existing room as a consumer
- Receiving joint updates and state sync
- Setting up callbacks
- Getting current state
"""
import asyncio
import logging
from lerobot_arena_client import RoboticsConsumer
# Setup logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
async def main():
"""Basic consumer example."""
# You need to provide an existing room ID
# You can get this from running basic_producer.py first
room_id = input("Enter room ID to connect to: ").strip()
if not room_id:
logger.error("Room ID is required!")
return
# Create consumer client
consumer = RoboticsConsumer("http://localhost:8000")
# Track received updates
received_updates = []
received_states = []
# Set up callbacks
def on_joint_update(joints):
logger.info(f"Received joint update: {joints}")
received_updates.append(joints)
def on_state_sync(state):
logger.info(f"Received state sync: {state}")
received_states.append(state)
def on_error(error_msg):
logger.error(f"Consumer error: {error_msg}")
def on_connected():
logger.info("Consumer connected!")
def on_disconnected():
logger.info("Consumer disconnected!")
# Register all callbacks
consumer.on_joint_update(on_joint_update)
consumer.on_state_sync(on_state_sync)
consumer.on_error(on_error)
consumer.on_connected(on_connected)
consumer.on_disconnected(on_disconnected)
try:
# Connect to the room
success = await consumer.connect(room_id)
if not success:
logger.error("Failed to connect to room!")
return
# Get initial state
initial_state = await consumer.get_state_sync()
logger.info(f"Initial state: {initial_state}")
# Listen for updates for 30 seconds
logger.info("Listening for updates for 30 seconds...")
await asyncio.sleep(30)
# Show summary
logger.info(f"Received {len(received_updates)} joint updates")
logger.info(f"Received {len(received_states)} state syncs")
except Exception as e:
logger.error(f"Error: {e}")
finally:
# Always disconnect
if consumer.is_connected():
await consumer.disconnect()
if __name__ == "__main__":
asyncio.run(main())