Files
gh-vuer-ai-vuer-skill-marke…/docs/tutorials/robotics/go1-stairs.md
2025-11-30 09:05:02 +08:00

182 lines
4.5 KiB
Markdown

# Unitree Go1 Robot with Stairs
## Overview
This tutorial demonstrates setting up a 3D scene containing a Unitree Go1 quadruped robot positioned in front of a staircase, along with lighting and atmospheric effects.
## Scene Components
The visualization includes four main elements:
1. **Unitree Go1 Robot** - A quadrupedal robot model loaded via URDF format
2. **Stairway Mesh** - A textured 3D model of stairs
3. **Fog Effect** - Atmospheric fog that darkens distant portions of the scene
4. **Lighting** - An ambient light source plus two movable point lights
## Complete Code Example
```python
import math
import asyncio
from vuer import Vuer
from vuer.schemas import Scene, Urdf, Obj, AmbientLight, PointLight, Movable, Plane, Fog
app = Vuer()
@app.spawn(start=True)
async def main(session):
# Setup scene with fog and lighting
session.set @ Scene(
# Add fog effect
Fog(
color="#000000",
near=1,
far=20,
),
# Ground plane
Plane(
args=[100, 100],
position=[0, -0.01, 0],
rotation=[-1.57, 0, 0],
key="ground",
),
# Staircase mesh
Obj(
src="/static/stairs/stairs.obj",
position=[2, 0, 0],
rotation=[0, 0, 0],
materialType="standard",
material={
"color": "#cccccc",
"roughness": 0.8,
},
key="stairs",
),
# Ambient lighting
AmbientLight(intensity=1.0),
# Movable point lights
Movable(
PointLight(
intensity=3.0,
position=[2, 3, 2],
key="light-1",
)
),
Movable(
PointLight(
intensity=3.0,
position=[-2, 3, -2],
key="light-2",
)
),
)
# Animation loop for the robot
for i in range(10000):
# Calculate joint angles using sinusoidal functions
hip_angle = 0.3 * 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 position and joints
session.upsert @ Urdf(
src="/static/go1/go1.urdf",
position=[0, 0, 0.33],
rotation=[0, 0, 0],
jointValues={
# Front Left
"FL_hip_joint": hip_angle,
"FL_thigh_joint": thigh_angle,
"FL_calf_joint": calf_angle,
# Front Right
"FR_hip_joint": -hip_angle,
"FR_thigh_joint": thigh_angle,
"FR_calf_joint": calf_angle,
# Rear Left
"RL_hip_joint": -hip_angle,
"RL_thigh_joint": thigh_angle,
"RL_calf_joint": calf_angle,
# Rear Right
"RR_hip_joint": hip_angle,
"RR_thigh_joint": thigh_angle,
"RR_calf_joint": calf_angle,
},
key="go1-robot",
)
# Update at ~60 FPS
await asyncio.sleep(0.016)
app.run()
```
## Key Features
### Fog Effect
Creates atmospheric depth:
```python
Fog(
color="#000000", # Black fog
near=1, # Fog starts at distance 1
far=20, # Full fog at distance 20
)
```
### Ground Plane
A large plane rotated to be horizontal:
```python
Plane(
args=[100, 100], # 100x100 units
position=[0, -0.01, 0], # Slightly below origin
rotation=[-1.57, 0, 0], # Rotated 90° (π/2)
)
```
### Staircase Mesh
3D model with material properties:
```python
Obj(
src="/static/stairs/stairs.obj",
materialType="standard",
material={
"color": "#cccccc",
"roughness": 0.8,
},
)
```
## Robot Animation
The application updates continuously at approximately 60 frames per second, calculating joint values like:
```python
thigh_angle = 0.785 - 0.25 * math.sin(i * 0.1)
```
This creates realistic walking motion across the stair scene.
## Leg Coordination
The Go1 has a specific gait pattern:
- Front Left and Rear Right move together (same hip angle)
- Front Right and Rear Left move together (opposite hip angle)
This creates a natural trotting gait.
## Assets Required
Make sure you have the following assets:
- `go1.urdf` - Robot description file
- `stairs.obj` - Staircase 3D model
- Associated mesh files for the Go1 robot
## Source
Documentation: https://docs.vuer.ai/en/latest/tutorials/robotics/urdf_go1_stairs.html