Spaces:
Sleeping
Sleeping
title: RobotHub TransportServer | |
emoji: 🤖 | |
colorFrom: blue | |
colorTo: purple | |
sdk: docker | |
app_port: 8000 | |
suggested_hardware: cpu-upgrade | |
suggested_storage: small | |
short_description: Real-time robotics control and video streaming platform | |
tags: | |
- robotics | |
- control | |
- websocket | |
- fastapi | |
- svelte | |
- real-time | |
- video-streaming | |
- transport-server | |
- robothub | |
pinned: true | |
fullWidth: true | |
# 🤖 RobotHub TransportServer | |
A high-performance, real-time communication platform for robotics control and video streaming. Built for multi-tenant environments with WebSocket and WebRTC technologies. | |
## 🚀 Overview | |
RobotHub TransportServer enables real-time, bidirectional communication between robotics systems, cameras, and control interfaces. It provides a unified platform for: | |
- **Real-time robot joint control** via WebSocket connections | |
- **Live video streaming** via WebRTC technology | |
- **Multi-workspace isolation** for secure multi-tenant deployments | |
- **Producer/Consumer architecture** for scalable robotics applications | |
- **Cross-platform client libraries** (JavaScript/TypeScript and Python) | |
## 🏗️ Architecture | |
### Core Components | |
``` | |
┌─────────────────────────────────────────────────────────────┐ | |
│ RobotHub TransportServer │ | |
├─────────────────────────────────────────────────────────────┤ | |
│ 🌐 REST API │ 🔌 WebSocket │ 📹 WebRTC │ | |
│ - Room management │ - Real-time control │ - Video │ | |
│ - Workspace control │ - Joint updates │ - Streaming│ | |
│ - Status & health │ - State sync │ - P2P conn │ | |
├─────────────────────────────────────────────────────────────┤ | |
│ Multi-Workspace & Room Management │ | |
│ workspace_1/ workspace_2/ workspace_n/ │ | |
│ ├── robotics_room_1 ├── robotics_room_1 ├── ... │ | |
│ ├── robotics_room_2 ├── video_room_1 │ │ | |
│ └── video_room_1 └── video_room_2 │ │ | |
└─────────────────────────────────────────────────────────────┘ | |
``` | |
### Producer/Consumer Pattern | |
**Robotics Control:** | |
- **Producer**: Sends joint commands and control signals | |
- **Consumer**: Receives commands and executes robot movements | |
**Video Streaming:** | |
- **Producer**: Streams camera feeds or screen content | |
- **Consumer**: Receives and displays video streams | |
## 🛠️ Key Features | |
### ✅ Real-time Robotics Control | |
- Joint-level robot control with normalized values | |
- Emergency stop mechanisms | |
- State synchronization between multiple clients | |
- Support for 6-DOF robotic arms (extensible) | |
### ✅ WebRTC Video Streaming | |
- Low-latency video streaming | |
- Multiple camera support | |
- Screen sharing capabilities | |
- Automatic quality adaptation | |
### ✅ Multi-Workspace Architecture | |
- Complete isolation between workspaces | |
- UUID-based workspace identification | |
- Scalable room management within workspaces | |
### ✅ Cross-Platform Clients | |
- **JavaScript/TypeScript**: Browser and Node.js support | |
- **Python**: AsyncIO-based client for robotics applications | |
- Consistent API across all platforms | |
### ✅ Production Ready | |
- Docker containerization | |
- Health monitoring endpoints | |
- Comprehensive logging | |
- Error handling and recovery | |
## 🚀 Quick Start | |
### Using Docker (Recommended) | |
```bash | |
# Clone the repository | |
git clone https://github.com/julien-blanchon/RobotHub-TransportServer | |
cd RobotHub-TransportServer | |
# Build and run with Docker | |
docker build -t robothub-transport-server . | |
docker run -p 8000:8000 robothub-transport-server | |
``` | |
### Development Setup | |
```bash | |
# Install Python dependencies | |
cd server | |
uv venv | |
source .venv/bin/activate | |
uv sync | |
uv pip install -e . | |
# Start the server | |
uv run launch_with_ui.py | |
# The server will be available at: | |
# - API: http://localhost:8000/api | |
# - Demo UI: http://localhost:8000 | |
``` | |
## 📚 Client Libraries | |
### JavaScript/TypeScript | |
```bash | |
cd client/js | |
bun install | |
bun run build | |
``` | |
```typescript | |
import { robotics, video } from '@robothub/transport-server-client'; | |
// Robotics control | |
const producer = new robotics.RoboticsProducer('http://localhost:8000'); | |
await producer.connect(workspaceId, roomId); | |
await producer.sendJointUpdate([ | |
{ name: 'joint_1', value: 45.0 }, | |
{ name: 'joint_2', value: -30.0 } | |
]); | |
// Video streaming | |
const videoProducer = new video.VideoProducer('http://localhost:8000'); | |
await videoProducer.connect(workspaceId, roomId); | |
await videoProducer.startCamera(); | |
``` | |
### Python | |
```bash | |
cd client/python | |
uv venv | |
source .venv/bin/activate | |
uv sync | |
uv pip install -e . | |
``` | |
```python | |
import asyncio | |
from transport_server_client import RoboticsProducer | |
from transport_server_client.video import VideoProducer | |
async def main(): | |
# Robotics control | |
producer = RoboticsProducer('http://localhost:8000') | |
await producer.connect(workspace_id, room_id) | |
await producer.send_joint_update([ | |
{'name': 'joint_1', 'value': 45.0}, | |
{'name': 'joint_2', 'value': -30.0} | |
]) | |
# Video streaming | |
video_producer = VideoProducer('http://localhost:8000') | |
await video_producer.connect(workspace_id, room_id) | |
await video_producer.start_camera() | |
asyncio.run(main()) | |
``` | |
## 🎮 Interactive Demo | |
The included demo application showcases all features: | |
```bash | |
cd demo | |
bun install | |
bun run dev | |
``` | |
Visit `http://localhost:5173` to access: | |
- **Workspace Management**: Create and manage isolated environments | |
- **Robotics Control**: Real-time robot arm control interface | |
- **Video Streaming**: Camera and screen sharing demos | |
- **Multi-room Support**: Manage multiple concurrent sessions | |
## 🔧 API Reference | |
### REST Endpoints | |
#### Workspaces & Rooms | |
``` | |
GET /robotics/workspaces/{workspace_id}/rooms | |
POST /robotics/workspaces/{workspace_id}/rooms | |
DELETE /robotics/workspaces/{workspace_id}/rooms/{room_id} | |
GET /robotics/workspaces/{workspace_id}/rooms/{room_id}/state | |
GET /video/workspaces/{workspace_id}/rooms | |
POST /video/workspaces/{workspace_id}/rooms | |
DELETE /video/workspaces/{workspace_id}/rooms/{room_id} | |
``` | |
#### WebSocket Connections | |
``` | |
WS /robotics/workspaces/{workspace_id}/rooms/{room_id}/ws | |
WS /video/workspaces/{workspace_id}/rooms/{room_id}/ws | |
``` | |
### Message Types | |
#### Robotics Messages | |
- `joint_update`: Send/receive joint position commands | |
- `state_sync`: Synchronize complete robot state | |
- `emergency_stop`: Emergency stop signal | |
- `heartbeat`: Connection health monitoring | |
#### Video Messages | |
- `stream_started`: Video stream initiated | |
- `stream_stopped`: Video stream ended | |
- `webrtc_offer/answer/ice`: WebRTC signaling | |
- `video_config_update`: Stream configuration changes | |
## 🔌 Integration Examples | |
### ML/AI Robotics Pipeline | |
```python | |
# Example: AI model controlling robot via TransportServer | |
import asyncio | |
from transport_server_client import RoboticsProducer | |
from transport_server_client.video import VideoConsumer | |
class AIRobotController: | |
def __init__(self, server_url, workspace_id): | |
self.robot_producer = RoboticsProducer(server_url) | |
self.camera_consumer = VideoConsumer(server_url) | |
self.workspace_id = workspace_id | |
async def start_control_loop(self): | |
# Connect to robot control room | |
await self.robot_producer.connect(self.workspace_id, 'robot_control') | |
# Connect to camera feed | |
await self.camera_consumer.connect(self.workspace_id, 'camera_feed') | |
# Set up frame processing | |
self.camera_consumer.on_frame_update(self.process_frame) | |
async def process_frame(self, frame_data): | |
# AI inference on camera frame | |
joint_commands = await self.ai_model.predict(frame_data) | |
# Send robot commands | |
await self.robot_producer.send_joint_update(joint_commands) | |
``` | |
### Multi-Robot Coordination | |
```typescript | |
// Example: Coordinating multiple robots | |
import { robotics } from '@robothub/transport-server-client'; | |
class MultiRobotCoordinator { | |
private robots: Map<string, robotics.RoboticsProducer> = new Map(); | |
async addRobot(robotId: string, workspaceId: string, roomId: string) { | |
const producer = new robotics.RoboticsProducer(); | |
await producer.connect(workspaceId, roomId); | |
this.robots.set(robotId, producer); | |
} | |
async coordinatedMovement(positions: Map<string, JointUpdate[]>) { | |
// Send synchronized commands to all robots | |
const promises = Array.from(positions.entries()).map(([robotId, joints]) => { | |
const producer = this.robots.get(robotId); | |
return producer?.sendJointUpdate(joints); | |
}); | |
await Promise.all(promises); | |
} | |
} | |
``` | |
## 📁 Project Structure | |
``` | |
RobotHub-TransportServer/ | |
├── server/ # FastAPI backend server | |
│ ├── src/ | |
│ │ ├── robotics/ # Robotics control logic | |
│ │ ├── video/ # Video streaming logic | |
│ │ └── api.py # Main API routes | |
│ └── launch_with_ui.py # Server launcher | |
├── client/ | |
│ ├── js/ # JavaScript/TypeScript client | |
│ └── python/ # Python client library | |
├── demo/ # SvelteKit demo application | |
├── Dockerfile # Container configuration | |
└── README.md | |
``` | |
## 🚢 Deployment | |
### Production Docker Deployment | |
```bash | |
# Build production image | |
docker build -t robothub-transport-server . | |
# Run with custom configuration | |
docker run -d \ | |
--name robothub-transport-server \ | |
-p 8000:8000 \ | |
-e LOG_LEVEL=info \ | |
robothub-transport-server | |
``` | |
### Development Setup | |
```bash | |
# Clone repository | |
git clone https://github.com/julien-blanchon/RobotHub-TransportServer | |
cd RobotHub-TransportServer | |
# Server development | |
cd server | |
uv venv && source .venv/bin/activate | |
uv sync | |
# Client development | |
cd client/js | |
bun install | |
# Demo development | |
cd demo | |
bun install | |
``` | |