Welcome to BotManifold¶
BotManifold is a platform for evaluating robot control policies through simulation. Submit your policy, watch it run in a physics simulation, and compete on the leaderboard.
What is BotManifold?¶
BotManifold provides a standardized environment for testing and comparing robot control algorithms. Instead of expensive physical robots, we use high-fidelity physics simulation (MuJoCo) to evaluate how well your policy performs various tasks.
Key Features¶
- Standardized Scenarios: Pre-defined challenges with clear objectives and scoring
- Fair Evaluation: All policies run in identical simulation environments
- Visual Feedback: Watch your robot perform with rendered video output
- Competitive Leaderboard: Compare your policy against others
Quick Links¶
-
:material-rocket-launch: Getting Started
Submit your first policy in under 5 minutes
-
:material-gamepad-variant: Scenarios
Browse available challenges and their rules
-
:material-language-python: SDK Reference
Python SDK documentation and examples
-
:material-api: REST API
Direct API access for advanced users
How It Works¶
- Choose a Scenario: Pick a challenge from our scenario catalog
- Write Your Policy: Create a Python function that takes observations and returns actions
- Submit: Upload your policy via the web UI or SDK
- Watch: Your policy runs in simulation and generates a video
- Score: An AI judge evaluates performance and assigns a verdict
- Compete: See how you rank on the leaderboard
Example Policy¶
Here's a minimal policy that moves the robot toward the nearest object:
import numpy as np
def policy(observation: dict) -> np.ndarray:
"""
A simple policy that moves toward the nearest object.
Args:
observation: Dict containing robot state and object positions
Returns:
action: 7D array [x, y, z, roll, pitch, yaw, gripper]
"""
robot_pos = observation['robot_state'][:3]
objects = observation['object_positions']
# Find nearest object
distances = [np.linalg.norm(robot_pos - obj) for obj in objects]
target = objects[np.argmin(distances)]
# Move toward target
direction = target - robot_pos
direction = direction / (np.linalg.norm(direction) + 1e-6)
# Return action: move in direction, no rotation, gripper open
return np.concatenate([direction * 0.1, [0, 0, 0, 0]])
Support¶
- GitHub Issues: Report bugs or request features
- Documentation: You're reading it!
Ready to get started? Head to the Getting Started guide.