Spaces:
Sleeping
Sleeping
| title: LeRobot Arena Transport Server | |
| emoji: π€ | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: docker | |
| app_port: 7860 | |
| suggested_hardware: cpu-upgrade | |
| suggested_storage: small | |
| short_description: Real-time robotics control | |
| tags: | |
| - robotics | |
| - control | |
| - websocket | |
| - fastapi | |
| - svelte | |
| - real-time | |
| - video-streaming | |
| - transport-server | |
| pinned: true | |
| fullWidth: true | |
| # π€ LeRobot Arena Transport Server with UI | |
| A complete Docker deployment of the LeRobot Arena Transport Server with integrated web UI. This combines the FastAPI backend with a SvelteKit frontend in a single container, inspired by the [LeRobot Arena Hugging Face Space](https://huggingface.co/spaces/blanchon/LeRobot-Arena). | |
| ## π Quick Start with Docker | |
| The easiest way to run the complete LeRobot Arena Transport Server is using Docker, which sets up both the frontend and backend automatically. | |
| ### Prerequisites | |
| - [Docker](https://www.docker.com/get-started) installed on your system | |
| - [Docker Compose](https://docs.docker.com/compose/install/) (usually included with Docker Desktop) | |
| ### Step-by-Step Instructions | |
| 1. **Navigate to the transport server directory** | |
| ```bash | |
| cd services/transport-server | |
| ``` | |
| 2. **Build the Docker image** | |
| ```bash | |
| docker build -t lerobot-arena-transport . | |
| ``` | |
| 3. **Run the container** | |
| ```bash | |
| docker run -p 7860:7860 -e SERVE_FRONTEND=true lerobot-arena-transport | |
| ``` | |
| 4. **Access the application** | |
| - **Frontend**: http://localhost:7860 | |
| - **Backend API**: http://localhost:7860/api | |
| - **API Documentation**: http://localhost:7860/api/docs | |
| 5. **Stop the container** | |
| ```bash | |
| # Find the container ID | |
| docker ps | |
| # Stop the container | |
| docker stop <container_id> | |
| ``` | |
| ### Alternative Build & Run Options | |
| **One-liner build and run:** | |
| ```bash | |
| docker build -t lerobot-arena-transport . && docker run -p 7860:7860 -e SERVE_FRONTEND=true lerobot-arena-transport | |
| ``` | |
| **Run with custom environment variables:** | |
| ```bash | |
| docker run -p 8080:7860 \ | |
| -e SERVE_FRONTEND=true \ | |
| -e PORT=7860 \ | |
| -e HOST=0.0.0.0 \ | |
| lerobot-arena-transport | |
| ``` | |
| **Run with volume mounts for logs:** | |
| ```bash | |
| docker run -p 7860:7860 \ | |
| -e SERVE_FRONTEND=true \ | |
| -v $(pwd)/logs:/home/user/app/logs \ | |
| lerobot-arena-transport | |
| ``` | |
| ## π οΈ Development Setup | |
| For local development with hot-reload capabilities: | |
| ### Backend Development | |
| ```bash | |
| # Navigate to server directory | |
| cd server | |
| # Install Python dependencies (using uv) | |
| uv sync | |
| # Start the backend server only | |
| python api.py | |
| ``` | |
| ### Frontend Development | |
| ```bash | |
| # Navigate to demo directory | |
| cd demo | |
| # Install dependencies | |
| bun install | |
| # Start the development server | |
| bun run dev | |
| ``` | |
| ### Client Library Development | |
| ```bash | |
| # Navigate to client library | |
| cd client/js | |
| # Install dependencies | |
| bun install | |
| # Build the client library | |
| bun run build | |
| ``` | |
| ## π Project Structure | |
| ``` | |
| services/transport-server/ | |
| βββ server/ # Python FastAPI backend | |
| β βββ src/ # Source code | |
| β βββ api.py # Main API application | |
| β βββ launch_with_ui.py # Combined launcher | |
| β βββ pyproject.toml # Python dependencies | |
| βββ demo/ # SvelteKit frontend | |
| β βββ src/ # Frontend source code | |
| β βββ package.json # Node.js dependencies | |
| β βββ svelte.config.js # SvelteKit configuration | |
| βββ client/js/ # TypeScript client library | |
| β βββ src/ # Client library source | |
| β βββ package.json # Client dependencies | |
| βββ Dockerfile # Docker configuration | |
| βββ docker-compose.yml # Docker Compose setup | |
| βββ README.md # This file | |
| ``` | |
| ## π³ Docker Information | |
| The Docker setup includes: | |
| - **Multi-stage build**: Optimized for production using Bun and uv | |
| - **Client library build**: Builds the TypeScript client first | |
| - **Frontend build**: Compiles SvelteKit app to static files | |
| - **Backend integration**: FastAPI serves both API and static files | |
| - **Port mapping**: Single port 7860 for both frontend and API | |
| - **User permissions**: Properly configured for Hugging Face Spaces | |
| - **Environment variables**: Configurable via environment | |
| ### Environment Variables | |
| - `SERVE_FRONTEND=true`: Enable frontend serving (default: false) | |
| - `PORT=7860`: Port to run the server on (default: 7860) | |
| - `HOST=0.0.0.0`: Host to bind to (default: 0.0.0.0) | |
| ## π What's Included | |
| ### Backend Features | |
| - **Real-time Robot Control**: WebSocket-based communication | |
| - **Video Streaming**: WebRTC video streaming capabilities | |
| - **REST API**: Complete robotics control API | |
| - **Room Management**: Create and manage robot control sessions | |
| - **Health Monitoring**: Built-in health checks and logging | |
| ### Frontend Features | |
| - **Dashboard**: Server status and room overview | |
| - **Robot Control**: 6-DOF robot arm control interface | |
| - **Real-time Monitoring**: Live joint state visualization | |
| - **Workspace Management**: Isolated environments for different sessions | |
| - **Modern UI**: Responsive design with Tailwind CSS | |
| ### Architecture | |
| - **Frontend**: Svelte 5, TypeScript, Tailwind CSS | |
| - **Backend**: FastAPI, Python 3.12, uvicorn | |
| - **Client Library**: TypeScript with WebSocket support | |
| - **Build System**: Bun for frontend, uv for Python | |
| - **Container**: Multi-stage Docker build | |
| ## π§ API Endpoints | |
| ### Health Check | |
| - `GET /health` - Server health status | |
| - `GET /api/health` - API health status | |
| ### Robotics API | |
| - `GET /api/robotics/rooms` - List active rooms | |
| - `POST /api/robotics/rooms` - Create new room | |
| - `DELETE /api/robotics/rooms/{room_id}` - Delete room | |
| - `WebSocket /api/robotics/ws/{room_id}` - Real-time control | |
| ### Video API | |
| - `GET /api/video/rooms` - List video rooms | |
| - `WebSocket /api/video/ws/{room_id}` - Video streaming | |
| ## π§ͺ Testing the Setup | |
| Run the included test script to verify everything works: | |
| ```bash | |
| ./test-docker.sh | |
| ``` | |
| This script will build the image, start a container, test all endpoints, and clean up automatically. | |
| ## π¨ Troubleshooting | |
| ### Port Conflicts | |
| If port 7860 is already in use: | |
| ```bash | |
| # Check what's using the port | |
| lsof -i :7860 | |
| # Use different port | |
| docker run -p 8080:7860 -e SERVE_FRONTEND=true lerobot-arena-transport | |
| ``` | |
| ### Container Issues | |
| ```bash | |
| # View logs | |
| docker logs <container_id> | |
| # Rebuild without cache | |
| docker build --no-cache -t lerobot-arena-transport . | |
| # Run with verbose logging | |
| docker run -p 7860:7860 -e SERVE_FRONTEND=true -e LOG_LEVEL=debug lerobot-arena-transport | |
| ``` | |
| ### Development Issues | |
| ```bash | |
| # Clear node modules and reinstall (for local development) | |
| cd demo | |
| rm -rf node_modules | |
| bun install | |
| # Clear SvelteKit cache | |
| rm -rf .svelte-kit | |
| bun run dev | |
| # Re-link client library (if needed for local development) | |
| cd ../client/js | |
| bun link | |
| cd ../../demo | |
| bun link lerobot-arena-client | |
| ``` | |
| ### Client Library Issues | |
| ```bash | |
| # Rebuild client library | |
| cd client/js | |
| bun run clean | |
| bun run build | |
| ``` | |
| ## π Hugging Face Spaces Deployment | |
| This project is configured for deployment on Hugging Face Spaces: | |
| 1. **Fork** this repository to your GitHub account | |
| 2. **Create a new Space** on Hugging Face Spaces | |
| 3. **Connect** your GitHub repository | |
| 4. **Select Docker SDK** (should be auto-detected) | |
| 5. **Set the Dockerfile path** to `services/transport-server/Dockerfile` | |
| 6. **Deploy** | |
| The Space will automatically build and run both the frontend and backend. | |
| ### Hugging Face Spaces Configuration | |
| Add this to your Space's README.md frontmatter: | |
| ```yaml | |
| --- | |
| title: LeRobot Arena Transport Server | |
| emoji: π€ | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: docker | |
| app_port: 7860 | |
| dockerfile_path: services/transport-server/Dockerfile | |
| suggested_hardware: cpu-upgrade | |
| suggested_storage: small | |
| short_description: Real-time robotics control and video streaming | |
| tags: | |
| - robotics | |
| - control | |
| - websocket | |
| - fastapi | |
| - svelte | |
| pinned: true | |
| fullWidth: true | |
| --- | |
| ``` | |
| ## π― Use Cases | |
| ### Development & Testing | |
| - **API Development**: Test robotics control APIs | |
| - **Frontend Development**: Develop robotics UIs | |
| - **Integration Testing**: Test real-time communication | |
| ### Production Deployment | |
| - **Robot Control**: Remote robot operation | |
| - **Multi-user**: Multiple operators on same robot | |
| - **Monitoring**: Real-time robot state monitoring | |
| ### Education & Demos | |
| - **Learning**: Robotics programming education | |
| - **Demonstrations**: Showcase robotics capabilities | |
| - **Prototyping**: Rapid robotics application development | |
| ## π€ Contributing | |
| 1. **Fork** the repository | |
| 2. **Create feature branch** (`git checkout -b feature/amazing-feature`) | |
| 3. **Make changes** and add tests | |
| 4. **Test with Docker** (`./test-docker.sh`) | |
| 5. **Commit changes** (`git commit -m 'Add amazing feature'`) | |
| 6. **Push to branch** (`git push origin feature/amazing-feature`) | |
| 7. **Open Pull Request** | |
| ## π License | |
| This project is licensed under the MIT License - see the LICENSE file for details. | |
| --- | |
| **Built with β€οΈ for the robotics community** π€ | |
| For more information, visit the [main LeRobot Arena project](https://github.com/lerobot-arena/lerobot-arena). |