Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions configs/task/cyberdog2-walk-flat/motrix.fastsac.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# @package _global_
# Task cyberdog2-walk-flat: motrix.fastsac shared training recipe.
defaults:
- /algo_base@algo: motrix.fastsac
- _self_
task:
env: cyberdog2-walk-flat
rllib: motrix
algo: fastsac
num_envs: 1024
play_num_envs: 16
seed: 1
checkpoint:
interval: 1000
algo:
agent:
actor_hidden_dim: 512
critic_hidden_dim: 512
num_atoms: 101
v_min: -30.0
v_max: 30.0
num_updates: 2
buffer_size: 512
36 changes: 36 additions & 0 deletions configs/task/cyberdog2-walk-flat/rslrl.ppo.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# @package _global_
# Task cyberdog2-walk-flat: rslrl.ppo shared training recipe.
defaults:
- /algo_base@algo: rslrl.ppo
- _self_
task:
env: cyberdog2-walk-flat
rllib: rslrl
algo: ppo
train_backend: null
num_envs: 49152
play_num_envs: 16
seed: 1
checkpoint:
interval: 100
algo:
max_iterations: 3000
obs_groups:
actor:
- policy
critic:
- value
actor:
hidden_dims:
- 512
- 256
- 128
init_noise_std: 0.5
critic:
hidden_dims:
- 512
- 256
- 128
algorithm:
desired_kl: 0.01
entropy_coef: 0.001
15 changes: 15 additions & 0 deletions configs/task/cyberdog2-walk-flat/skrl.ppo.jax.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# @package _global_
# Task cyberdog2-walk-flat: skrl.ppo, train_backend=jax delta.
defaults:
- /task/cyberdog2-walk-flat/skrl.ppo@_global_
- _self_
task:
train_backend: jax
algo:
agent:
rollouts: 12
learning_rate: 0.0008
learning_rate_scheduler_kwargs:
kl_threshold: 0.03
grad_norm_clip: 0.75
kl_threshold: 0.07
13 changes: 13 additions & 0 deletions configs/task/cyberdog2-walk-flat/skrl.ppo.torch.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# @package _global_
# Task cyberdog2-walk-flat: skrl.ppo, train_backend=torch delta.
defaults:
- /task/cyberdog2-walk-flat/skrl.ppo@_global_
- _self_
task:
train_backend: torch
algo:
agent:
rollouts: 24
learning_rate: 0.0003
learning_rate_scheduler_kwargs:
kl_threshold: 0.01
40 changes: 40 additions & 0 deletions configs/task/cyberdog2-walk-flat/skrl.ppo.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# @package _global_
# Task cyberdog2-walk-flat: skrl.ppo shared training recipe.
defaults:
- /algo_base@algo: skrl.ppo
- _self_
task:
env: cyberdog2-walk-flat
rllib: skrl
algo: ppo
train_backend: null
num_envs: 1024
play_num_envs: 16
seed: 1
checkpoint:
interval: 100
algo:
models:
value:
hiddens:
- 512
- 256
- 128
policy:
initial_log_std: -0.6931471805599453
hiddens:
- 512
- 256
- 128
separate: true
agent:
rollouts: 24
mini_batches: 4
learning_epochs: 5
learning_rate: 0.0003
learning_rate_scheduler_kwargs:
kl_threshold: 0.01
entropy_loss_scale: 0.001
value_loss_scale: 1.0
trainer:
timesteps: 12000
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# @package _global_
# cyberdog2 flat sim spawns crouched, which enables the stand-up preparation lifecycle
# (R then P in the viewer), and requires the clipped crouch translation below.
defaults:
- /runtime: sim
- _self_

artifact: artifacts/cyberdog2-walk-flat.deploy

runtime:
backend: mujoco
sensor_bindings:
base_angular_velocity: gyro
base_linear_acceleration: accelerometer
base_linear_velocity: global_linvel
deploy_env_id: flat
robot_id: cyberdog2
robot_init_key_pose: defaults
# Imported root starts at 0.445 m; place clipped crouch close to floor
# without an initial penetration in the flat MuJoCo scene.
robot_translation: [0.0, 0.0, -0.32]
robot_rotation: [0.0, 0.0, 0.0, 1.0]
physics:
dt: 0.002
solver_iterations: 100
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright Motphys Technology Co., Ltd. 2025, 2026
# SPDX-License-Identifier: Apache-2.0

from . import anymalc, go1, go2, walk_np # noqa: F401 register envs and expose base task
from . import anymalc, cyberdog2, go1, go2, walk_np # noqa: F401 register envs and expose base task
5 changes: 2 additions & 3 deletions motrix_envs/src/motrix_envs/locomotion/quadruped/cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,8 @@ def validate(self) -> None:

@configclass
class VelocityCommandCfg:
lower: NDArray[np.float32] = np.array([0.5, 0.0, 0.0], dtype=np.float32)
upper: NDArray[np.float32] = np.array([0.5, 0.0, 0.0], dtype=np.float32)
lower: NDArray[np.float32] = np.array([1, 0.0, 0.0], dtype=np.float32)
upper: NDArray[np.float32] = np.array([1, 0.0, 0.0], dtype=np.float32)
standing_probability: float = 0.0
standing_threshold: float = 0.05
resampling_seconds_range: tuple[float, float] | None = None
Expand All @@ -172,7 +172,6 @@ def validate(self) -> None:
f"got {self.resampling_seconds_range}"
)


@configclass
class Commands:
velocity: VelocityCommandCfg = VelocityCommandCfg()
Expand Down
93 changes: 93 additions & 0 deletions motrix_envs/src/motrix_envs/locomotion/quadruped/cyberdog2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Copyright Motphys Technology Co., Ltd. 2025, 2026
# SPDX-License-Identifier: Apache-2.0

"""Cyberdog2 flat- and rough-terrain walk configuration and environment registration."""

from dataclasses import replace

import numpy as np
from motrix_robots.cyberdog2 import Cyberdog2Robot

from motrix_env_core import registry
from motrix_env_core.config import configclass
from motrix_env_core.config.scene import FlatTerrainCfg
from motrix_envs.config.scene import StandardSceneObjsCfg
from motrix_envs.locomotion.quadruped.cfg import (
Commands,
QuadrupedSceneCfg,
QuadrupedWalkEnvCfg,
QuadrupedWalkRandomizationCfg,
RewardConfig,
RewardScales,
Sensor,
VelocityCommandCfg,
)
from motrix_envs.locomotion.quadruped.walk_np import QuadrupedWalkTask


@registry.envcfg("cyberdog2-walk-flat")
@configclass
class Cyberdog2WalkCfg(QuadrupedWalkEnvCfg):
"""Track walking commands with Cyberdog2 on flat ground.

zh_CN: 控制 Cyberdog2 在平地上跟踪行走指令。
"""

render_spacing: float = 0.0
spawn_xy_range: float = 4.0
commands: Commands = Commands(
velocity=VelocityCommandCfg(
lower=np.array([1.0, -0, -0], dtype=np.float32),
upper=np.array([1.0, 0, 0], dtype=np.float32),
standing_probability=0.1,
resampling_seconds_range=(5.0, 10.0),
)
)

# CyberDog2 keeps its own IMU sensor names; remap them to the task's
# source-independent sensor roles instead of renaming the model sensors.
sensor: Sensor = Sensor(
gyro="imu_ang_vel",
local_linvel="imu_lin_vel",
)

randomization: QuadrupedWalkRandomizationCfg = QuadrupedWalkRandomizationCfg(
enabled=True,
joint_pos_noise=0.03,
joint_vel_noise=0.1,
base_lin_vel_noise=(0.1, 0.1, 0.0),
base_ang_vel_noise=(0.1, 0.1, 0.1),
action_delay_steps=(0, 1),
kp_scale_range=(0.9, 1.1),
damping_scale_range=(0.9, 1.1),
sliding_friction_range=(0.4, 0.9),
base_mass_scale_range=(0.9, 1.1),
base_com_offset_noise=(0.01, 0.01, 0.005),
)

scene: QuadrupedSceneCfg = QuadrupedSceneCfg(
objs=StandardSceneObjsCfg(
floor=FlatTerrainCfg(
material="mat_ground",
friction=(0.6, 0.005, 0.0001),
),
robot=Cyberdog2Robot(),
),
)
reward_config: RewardConfig = RewardConfig(
scales=RewardScales(
similar_to_default=-1,
),
tracking_ang_vel_sigma=0.05,
target_foot_height=0.05,
base_height_target=0.35,
)

def for_play(self) -> "Cyberdog2WalkCfg":
"""Return a deterministic Cyberdog2 evaluation config."""

cfg = super().for_play()
return replace(cfg, noise_config=replace(cfg.noise_config, level=0.0))


registry.env("cyberdog2-walk-flat")(QuadrupedWalkTask)
2 changes: 2 additions & 0 deletions motrix_robots/src/motrix_robots/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from motrix_robots.anymal import AnymalC
from motrix_robots.booster import BoosterK1
from motrix_robots.cyberdog2 import Cyberdog2Robot
from motrix_robots.dex_evt import DexEvt
from motrix_robots.humanoid import HumanoidRobotCfg
from motrix_robots.microduck import Microduck
Expand All @@ -28,4 +29,5 @@
"UnitreeG129Dof",
"UnitreeGo1Robot",
"UnitreeGo2Robot",
"Cyberdog2Robot",
]
Git LFS file not shown
Git LFS file not shown
Git LFS file not shown
Git LFS file not shown
Git LFS file not shown
Loading