Spaces:
Sleeping
Sleeping
| #!/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()) | |