Initial commit
This commit is contained in:
148
docs/tutorials/robotics/mini-cheetah.md
Normal file
148
docs/tutorials/robotics/mini-cheetah.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# MIT Mini Cheetah URDF Tutorial
|
||||
|
||||
## Overview
|
||||
This tutorial demonstrates serving a URDF (Unified Robot Description Format) file locally to visualize the MIT Mini Cheetah robot in Vuer with animated leg movements.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
Set up your assets directory:
|
||||
|
||||
```
|
||||
assets/mini_cheetah/
|
||||
├── meshes/
|
||||
│ ├── mini_abad.obj
|
||||
│ ├── mini_body.obj
|
||||
│ ├── mini_lower_link.obj
|
||||
│ └── mini_upper_link.obj
|
||||
└── mini_cheetah.urdf
|
||||
```
|
||||
|
||||
## Download Assets
|
||||
|
||||
Use wget to fetch the URDF and mesh files:
|
||||
|
||||
```bash
|
||||
mkdir -p assets/mini_cheetah/meshes
|
||||
cd assets/mini_cheetah
|
||||
|
||||
# Download URDF file
|
||||
wget https://raw.githubusercontent.com/vuer-ai/vuer/main/assets/mini_cheetah/mini_cheetah.urdf
|
||||
|
||||
# Download mesh files
|
||||
cd meshes
|
||||
wget https://raw.githubusercontent.com/vuer-ai/vuer/main/assets/mini_cheetah/meshes/mini_abad.obj
|
||||
wget https://raw.githubusercontent.com/vuer-ai/vuer/main/assets/mini_cheetah/meshes/mini_body.obj
|
||||
wget https://raw.githubusercontent.com/vuer-ai/vuer/main/assets/mini_cheetah/meshes/mini_lower_link.obj
|
||||
wget https://raw.githubusercontent.com/vuer-ai/vuer/main/assets/mini_cheetah/meshes/mini_upper_link.obj
|
||||
```
|
||||
|
||||
## Complete Code Example
|
||||
|
||||
```python
|
||||
import math
|
||||
import asyncio
|
||||
from vuer import Vuer
|
||||
from vuer.schemas import Scene, Urdf, AmbientLight, Movable, PointLight
|
||||
|
||||
# Configure app to serve static files from assets directory
|
||||
app = Vuer(static_root="assets/mini_cheetah")
|
||||
|
||||
@app.spawn(start=True)
|
||||
async def main(session):
|
||||
# Setup scene with lighting
|
||||
session.set @ Scene(
|
||||
AmbientLight(intensity=0.8),
|
||||
Movable(
|
||||
PointLight(
|
||||
intensity=2.0,
|
||||
position=[1, 2, 1],
|
||||
key="point-light-1",
|
||||
)
|
||||
),
|
||||
Movable(
|
||||
PointLight(
|
||||
intensity=2.0,
|
||||
position=[-1, 2, -1],
|
||||
key="point-light-2",
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
# Animation loop
|
||||
for i in range(1000):
|
||||
# Calculate joint angles using sine waves
|
||||
hip_angle = 0.5 * math.sin(i * 0.1)
|
||||
thigh_angle = 0.785 - 0.25 * math.sin(i * 0.1)
|
||||
calf_angle = -1.5 + 0.5 * math.sin(i * 0.1)
|
||||
|
||||
# Update robot with animated joints
|
||||
session.upsert @ Urdf(
|
||||
src="/static/mini_cheetah.urdf",
|
||||
position=[0, 0, 0],
|
||||
rotation=[0, 0, 0],
|
||||
jointValues={
|
||||
# Front Left leg
|
||||
"FL_hip_joint": hip_angle,
|
||||
"FL_thigh_joint": thigh_angle,
|
||||
"FL_calf_joint": calf_angle,
|
||||
|
||||
# Front Right leg
|
||||
"FR_hip_joint": -hip_angle,
|
||||
"FR_thigh_joint": thigh_angle,
|
||||
"FR_calf_joint": calf_angle,
|
||||
|
||||
# Rear Left leg
|
||||
"RL_hip_joint": hip_angle,
|
||||
"RL_thigh_joint": thigh_angle,
|
||||
"RL_calf_joint": calf_angle,
|
||||
|
||||
# Rear Right leg
|
||||
"RR_hip_joint": -hip_angle,
|
||||
"RR_thigh_joint": thigh_angle,
|
||||
"RR_calf_joint": calf_angle,
|
||||
},
|
||||
key="mini-cheetah",
|
||||
)
|
||||
|
||||
# Update at ~60 FPS
|
||||
await asyncio.sleep(0.016)
|
||||
|
||||
app.run()
|
||||
```
|
||||
|
||||
## Joint Control
|
||||
|
||||
The Mini Cheetah has 12 joints (3 per leg):
|
||||
|
||||
- **Hip joint**: Abduction/adduction (side-to-side movement)
|
||||
- **Thigh joint**: Hip flexion/extension (forward/backward)
|
||||
- **Calf joint**: Knee flexion/extension
|
||||
|
||||
## Animation Details
|
||||
|
||||
The example creates a walking motion using sinusoidal functions:
|
||||
|
||||
```python
|
||||
hip_angle = 0.5 * math.sin(i * 0.1)
|
||||
thigh_angle = 0.785 - 0.25 * math.sin(i * 0.1)
|
||||
calf_angle = -1.5 + 0.5 * math.sin(i * 0.1)
|
||||
```
|
||||
|
||||
## Expected Result
|
||||
|
||||
When executed correctly, the tutorial produces a 3D visualization of the Mini Cheetah robot with animated leg movements displayed in a web interface at `http://localhost:8012`.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Robot not appearing
|
||||
- Verify all mesh files are downloaded
|
||||
- Check that `static_root` points to the correct directory
|
||||
- Ensure URDF file references correct mesh paths
|
||||
|
||||
### Animation not smooth
|
||||
- Adjust the sleep interval (currently 0.016s for ~60 FPS)
|
||||
- Reduce animation speed by changing the multiplier in `i * 0.1`
|
||||
|
||||
## Source
|
||||
|
||||
Documentation: https://docs.vuer.ai/en/latest/tutorials/robotics/urdf_mini_cheetah.html
|
||||
Reference in New Issue
Block a user