# LeRobot Arena Examples This directory contains example scripts demonstrating various aspects of the LeRobot Arena robotics system. ## Prerequisites Before running these examples, ensure you have: 1. **Server running**: Start the LeRobot Arena server ```bash # From the server directory uvicorn src.api.main:app --reload ``` 2. **Dependencies installed**: Install the Python client ```bash # From client/python directory pip install -e . ``` ## Examples Overview ### 1. `basic_producer.py` **Basic Producer Usage** Demonstrates core producer functionality: - Creating a room - Connecting as a producer - Sending joint updates - Sending state synchronization - Basic error handling ```bash python examples/basic_producer.py ``` ### 2. `basic_consumer.py` **Basic Consumer Usage** Shows how to connect as a consumer and receive data: - Connecting to an existing room - Setting up event callbacks - Receiving joint updates and state sync - Getting current room state ```bash python examples/basic_consumer.py # You'll need to enter a room ID from a running producer ``` ### 3. `room_management.py` **Room Management Operations** Demonstrates REST API operations: - Listing all rooms - Creating rooms (auto-generated and custom IDs) - Getting room information and state - Deleting rooms ```bash python examples/room_management.py ``` ### 4. `producer_consumer_demo.py` **Complete Producer-Consumer Demo** Comprehensive demonstration featuring: - Producer and multiple consumers working together - Realistic robot movement simulation - Emergency stop functionality - State synchronization - Connection management and cleanup ```bash python examples/producer_consumer_demo.py ``` ### 5. `context_manager_example.py` **Context Managers and Advanced Patterns** Shows advanced usage patterns: - Using clients as context managers for automatic cleanup - Exception handling with proper resource management - Factory functions for quick client setup - Managing multiple clients ```bash python examples/context_manager_example.py ``` ## Running Examples ### Quick Start (All-in-One Demo) For a complete demonstration, run: ```bash python examples/producer_consumer_demo.py ``` ### Step-by-Step Testing 1. **Start with room management**: ```bash python examples/room_management.py ``` 2. **Run producer in one terminal**: ```bash python examples/basic_producer.py ``` 3. **Run consumer in another terminal**: ```bash python examples/basic_consumer.py # Use the room ID from the producer ``` ### Advanced Examples For more sophisticated patterns: ```bash python examples/context_manager_example.py ``` ## Key Concepts Demonstrated ### Producer Capabilities - **Room Creation**: Creating and managing robotics rooms - **Joint Control**: Sending individual joint position updates - **State Synchronization**: Sending complete robot state - **Emergency Stop**: Triggering safety stops - **Error Handling**: Managing connection and communication errors ### Consumer Capabilities - **Real-time Updates**: Receiving joint position updates - **State Monitoring**: Getting current robot state - **Event Callbacks**: Responding to various message types - **Multiple Consumers**: Supporting multiple clients per room ### Connection Management - **WebSocket Communication**: Real-time bidirectional communication - **Auto-reconnection**: Handling connection failures - **Resource Cleanup**: Proper disconnection and cleanup - **Context Managers**: Automatic resource management ### Error Handling - **Connection Failures**: Graceful handling of network issues - **Invalid Operations**: Handling invalid commands or states - **Emergency Scenarios**: Safety system demonstrations - **Resource Management**: Proper cleanup in error conditions ## Example Output When running the examples, you'll see detailed logging output showing: - Connection status and events - Data being sent and received - Error conditions and handling - Resource cleanup operations Example log output: ``` INFO:__main__:Created room: abc123-def456-ghi789 INFO:__main__:[Producer] Connected! INFO:__main__:[visualizer] Joint update #1: 4 joints INFO:__main__:[logger] Joint update #1: 4 joints INFO:__main__:🚨 [Producer] Sending emergency stop! INFO:__main__:[safety-monitor] ERROR: Emergency stop: Demo emergency stop ``` ## Troubleshooting ### Common Issues 1. **Connection Failed**: Ensure the server is running on `http://localhost:8000` 2. **Import Errors**: Make sure you've installed the client package (`pip install -e .`) 3. **Room Not Found**: Check that the room ID exists (run `room_management.py` to see active rooms) 4. **Permission Denied**: Only one producer per room is allowed ### Debug Mode Enable debug logging for more detailed output: ```python logging.basicConfig(level=logging.DEBUG) ``` ## Next Steps After running these examples, you can: - Integrate the client into your own robotics applications - Modify the examples for your specific robot hardware - Build custom visualizers or control interfaces - Implement safety monitoring systems - Create automated testing scenarios