tfrere HF Staff commited on
Commit
82c51d5
·
verified ·
1 Parent(s): 208e1ec

feat: official base move kick-right (Pollen Robotics' kick (right foot), retrained)

Browse files
Files changed (13) hide show
  1. README.md +70 -0
  2. base/agent.yaml +67 -0
  3. base/env.yaml +2019 -0
  4. base/model.pt +3 -0
  5. clip.json +22 -0
  6. fidelity.json +33 -0
  7. manifest.json +164 -0
  8. policy.onnx +3 -0
  9. poster.jpg +0 -0
  10. rollouts/0.traj +0 -0
  11. train.json +18 -0
  12. video.json +22 -0
  13. video.mp4 +0 -0
README.md ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ tags:
3
+ - microduck-academy-policy
4
+ - microduck-policy
5
+ - academy
6
+ - official
7
+ - family:ballkick
8
+ - kind:episodic
9
+ - tier:1
10
+ - microduck
11
+ - robotics
12
+ - reinforcement-learning
13
+ - onnx
14
+ license: apache-2.0
15
+ library_name: onnx
16
+ ---
17
+
18
+ # Kick (right foot)
19
+
20
+ <video src="video.mp4" poster="poster.jpg" width="480" muted loop autoplay playsinline controls></video>
21
+
22
+ ![Kick (right foot) (poster)](poster.jpg)
23
+
24
+
25
+ An **official** Microduck move: [Pollen Robotics](https://huggingface.co/pollen-robotics)' **kick (right foot)**,
26
+ retrained from scratch by [Microduck Academy](https://huggingface.co/spaces/tfrere/microduck) with the upstream recipe
27
+ as-is (task `Mjlab-BallKick-Flat-MicroDuck` of [pollen-robotics/microduck_rl](https://github.com/pollen-robotics/microduck_rl) at `2b25a48`,
28
+ 3999 iterations, 4096 envs, no reward edit), so that it carries the
29
+ `base/model.pt` checkpoint the Academy needs to **remix** it. The policy Pollen ships is
30
+ [`ball_kick_right.onnx`](https://huggingface.co/pollen-robotics/microduck-policies/blob/main/ball_kick_right.onnx).
31
+
32
+ Pollen Robotics' kick: a 0.5 s right-foot kick at a ball placed in front of the foot, then back to the walk.
33
+
34
+ ## Fidelity check (this move vs Pollen's policy, same scene, same command, take `kick`)
35
+
36
+ | number | this move | Pollen's `ball_kick_right.onnx` |
37
+ |---|---|---|
38
+ | final_upright | True | True |
39
+ | max_tilt | 0.261 | 0.261 |
40
+ | base_z_mean | 0.1149 | 0.1141 |
41
+ | base_z_min | 0.1106 | 0.1125 |
42
+ | ball_travel_m | 0.338 | 0.326 |
43
+ | ball_travel_x_m | 0.338 | 0.326 |
44
+ | ball_travel_y_m | -0.017 | 0.018 |
45
+ | ball_peak_speed_m_s | 0.477 | 0.503 |
46
+ | upright_at_0_5s | True | True |
47
+ | tilt_at_0_5s | 0.027 | 0.008 |
48
+
49
+ Recorded with `space/payload/render/rollout.py` on the upstream robot MJCF (`spikes/base_moves/fidelity.py`).
50
+
51
+ ## Run it on a robot
52
+
53
+ ```sh
54
+ sudo robotctl policy add kick-right-foot tfrere/microduck-move-base-kick-right
55
+ robotctl robot do kick-right-foot
56
+ ```
57
+
58
+ ## Files
59
+
60
+ `policy.onnx` (play it, normalizer baked in), `base/model.pt` + `base/agent.yaml` + `base/env.yaml` (the rsl_rl
61
+ checkpoint and configs: **remix** = fine-tune from it), `rollouts/0.traj` (trajectory.v1 showcase take, with the
62
+ commands), `video.mp4` + `poster.jpg` (the card clip), `manifest.json`
63
+ (schema 2 + `academy` block: origin, source task and policy, training facts, fidelity numbers), `fidelity.json`,
64
+ `train.json`.
65
+
66
+ ## Credits and license
67
+
68
+ The task, the reward design, the robot model and the training recipe are Pollen Robotics' work
69
+ ([pollen-robotics/microduck_rl](https://github.com/pollen-robotics/microduck_rl), Apache-2.0). This repo republishes a retrained policy of
70
+ that recipe under the same Apache-2.0 license, with the checkpoint, so the Academy's users can start from it.
base/agent.yaml ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ seed: 42
2
+ num_steps_per_env: 24
3
+ max_iterations: 4000
4
+ obs_groups:
5
+ actor: !!python/tuple
6
+ - actor
7
+ critic: !!python/tuple
8
+ - critic
9
+ save_interval: 250
10
+ experiment_name: ball_kick_right
11
+ run_name: ball_kick_right
12
+ logger: tensorboard
13
+ wandb_project: mjlab_microduck
14
+ wandb_tags: !!python/tuple []
15
+ resume: false
16
+ load_run: .*
17
+ load_checkpoint: model_.*.pt
18
+ clip_actions: null
19
+ upload_model: true
20
+ class_name: OnPolicyRunner
21
+ actor:
22
+ hidden_dims: !!python/tuple
23
+ - 512
24
+ - 256
25
+ - 128
26
+ activation: elu
27
+ obs_normalization: true
28
+ cnn_cfg: null
29
+ distribution_cfg:
30
+ class_name: GaussianDistribution
31
+ init_std: 1.0
32
+ std_type: scalar
33
+ rnn_type: null
34
+ rnn_hidden_dim: 256
35
+ rnn_num_layers: 1
36
+ class_name: MLPModel
37
+ critic:
38
+ hidden_dims: !!python/tuple
39
+ - 512
40
+ - 256
41
+ - 128
42
+ activation: elu
43
+ obs_normalization: true
44
+ cnn_cfg: null
45
+ distribution_cfg: null
46
+ rnn_type: null
47
+ rnn_hidden_dim: 256
48
+ rnn_num_layers: 1
49
+ class_name: MLPModel
50
+ algorithm:
51
+ num_learning_epochs: 5
52
+ num_mini_batches: 4
53
+ learning_rate: 0.001
54
+ schedule: adaptive
55
+ gamma: 0.99
56
+ lam: 0.95
57
+ entropy_coef: 0.01
58
+ desired_kl: 0.01
59
+ max_grad_norm: 1.0
60
+ value_loss_coef: 1.0
61
+ use_clipped_value_loss: true
62
+ clip_param: 0.2
63
+ normalize_advantage_per_mini_batch: false
64
+ optimizer: adam
65
+ share_cnn_encoders: false
66
+ class_name: PPO
67
+ symmetry_cfg: null
base/env.yaml ADDED
@@ -0,0 +1,2019 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ decimation: 4
2
+ scene:
3
+ num_envs: 4096
4
+ env_spacing: 2.0
5
+ terrain:
6
+ init_state:
7
+ pos: !!python/tuple
8
+ - 0.0
9
+ - 0.0
10
+ - 0.0
11
+ rot: !!python/tuple
12
+ - 1.0
13
+ - 0.0
14
+ - 0.0
15
+ - 0.0
16
+ lin_vel: !!python/tuple
17
+ - 0.0
18
+ - 0.0
19
+ - 0.0
20
+ ang_vel: !!python/tuple
21
+ - 0.0
22
+ - 0.0
23
+ - 0.0
24
+ joint_pos:
25
+ .*: 0.0
26
+ joint_vel:
27
+ .*: 0.0
28
+ spec_fn: !!python/name:mjlab.entity.entity.%3Clambda%3E ''
29
+ articulation: null
30
+ sort_actuators: false
31
+ lights: !!python/tuple
32
+ - name: sun
33
+ body: world
34
+ mode: fixed
35
+ target: null
36
+ type: directional
37
+ castshadow: true
38
+ pos: !!python/tuple
39
+ - 0.0
40
+ - 0.0
41
+ - 1.5
42
+ dir: !!python/tuple
43
+ - 0.0
44
+ - 0.0
45
+ - -1.0
46
+ cutoff: 45.0
47
+ exponent: 10.0
48
+ cameras: !!python/tuple []
49
+ textures: !!python/tuple
50
+ - name: groundplane
51
+ type: 2d
52
+ builtin: checker
53
+ rgb1: !!python/tuple
54
+ - 0.2
55
+ - 0.3
56
+ - 0.4
57
+ rgb2: !!python/tuple
58
+ - 0.1
59
+ - 0.2
60
+ - 0.3
61
+ width: 300
62
+ height: 300
63
+ mark: edge
64
+ markrgb: !!python/tuple
65
+ - 0.8
66
+ - 0.8
67
+ - 0.8
68
+ materials: !!python/tuple
69
+ - name: groundplane
70
+ rgba: !!python/tuple
71
+ - 1.0
72
+ - 1.0
73
+ - 1.0
74
+ - 1.0
75
+ texuniform: true
76
+ texrepeat: !!python/tuple
77
+ - 4.0
78
+ - 4.0
79
+ reflectance: 0.2
80
+ texture: groundplane
81
+ geom_names_expr: !!python/tuple
82
+ - terrain$
83
+ collisions: !!python/tuple []
84
+ terrain_type: plane
85
+ terrain_generator: null
86
+ env_spacing: 2.0
87
+ max_init_terrain_level: 5
88
+ num_envs: 4096
89
+ entities:
90
+ robot:
91
+ init_state:
92
+ pos: !!python/tuple
93
+ - 0.0
94
+ - 0.0
95
+ - 0.0
96
+ rot: !!python/tuple
97
+ - 1.0
98
+ - 0.0
99
+ - 0.0
100
+ - 0.0
101
+ lin_vel: !!python/tuple
102
+ - 0.0
103
+ - 0.0
104
+ - 0.0
105
+ ang_vel: !!python/tuple
106
+ - 0.0
107
+ - 0.0
108
+ - 0.0
109
+ joint_pos:
110
+ .*hip_yaw.*: 0.0
111
+ .*left_hip_roll.*: -0.0873
112
+ .*right_hip_roll.*: 0.0873
113
+ .*left_hip_pitch.*: -0.4579
114
+ .*right_hip_pitch.*: 0.4579
115
+ .*left_knee.*: -0.0049
116
+ .*right_knee.*: 0.0049
117
+ .*left_ankle.*: 0.453
118
+ .*right_ankle.*: -0.453
119
+ .*neck_pitch.*: 0.3491
120
+ .*head_pitch.*: 0.3491
121
+ .*head_yaw.*: 0.0
122
+ .*head_roll.*: 0.0
123
+ joint_vel:
124
+ .*: 0.0
125
+ spec_fn: !!python/name:mjlab_microduck.robot.microduck_constants.get_standup_spec ''
126
+ articulation:
127
+ actuators: !!python/tuple
128
+ - target_names_expr: !!python/tuple
129
+ - ^(?!passive_).*
130
+ transmission_type: !!python/object/apply:mjlab.actuator.actuator.TransmissionType
131
+ - joint
132
+ armature: null
133
+ frictionloss: null
134
+ viscous_damping: null
135
+ delay_min_lag: 3
136
+ delay_max_lag: 6
137
+ delay_hold_prob: 0.0
138
+ delay_update_period: 0
139
+ delay_per_env_phase: true
140
+ motor_name: xl330
141
+ model: m6
142
+ json_path: null
143
+ vin: null
144
+ kp_fw: 200.0
145
+ vin_range: !!python/tuple
146
+ - 6.5
147
+ - 8.2
148
+ vin_drop_gain_range: !!python/tuple
149
+ - 0.0
150
+ - 0.2
151
+ vin_min: 6.0
152
+ stiff_frictionloss: true
153
+ soft_joint_pos_limit_factor: 0.9
154
+ sort_actuators: false
155
+ lights: !!python/tuple []
156
+ cameras: !!python/tuple []
157
+ textures: !!python/tuple []
158
+ materials: !!python/tuple []
159
+ collisions: !!python/tuple
160
+ - geom_names_expr:
161
+ - .*_collision
162
+ contype: 1
163
+ conaffinity: 1
164
+ condim:
165
+ ^(left|right)_foot_collision$: 3
166
+ .*_collision: 1
167
+ priority:
168
+ ^(left|right)_foot_collision$: 1
169
+ friction:
170
+ ^(left|right)_foot_collision$: !!python/tuple
171
+ - 1.0
172
+ solref: null
173
+ solimp: null
174
+ margin: null
175
+ gap: null
176
+ solmix: null
177
+ disable_other_geoms: true
178
+ ball:
179
+ init_state:
180
+ pos: !!python/tuple
181
+ - 0.3
182
+ - 0.0
183
+ - 0.035
184
+ rot: !!python/tuple
185
+ - 1.0
186
+ - 0.0
187
+ - 0.0
188
+ - 0.0
189
+ lin_vel: !!python/tuple
190
+ - 0.0
191
+ - 0.0
192
+ - 0.0
193
+ ang_vel: !!python/tuple
194
+ - 0.0
195
+ - 0.0
196
+ - 0.0
197
+ joint_pos:
198
+ .*: 0.0
199
+ joint_vel:
200
+ .*: 0.0
201
+ spec_fn: !!python/name:mjlab_microduck.robot.microduck_constants.get_ball_spec ''
202
+ articulation: null
203
+ sort_actuators: false
204
+ lights: !!python/tuple []
205
+ cameras: !!python/tuple []
206
+ textures: !!python/tuple []
207
+ materials: !!python/tuple []
208
+ collisions: !!python/tuple []
209
+ sensors: !!python/tuple
210
+ - name: feet_ground_contact
211
+ primary:
212
+ mode: geom
213
+ pattern: ^(left_foot_collision|right_foot_collision)$
214
+ entity: robot
215
+ exclude: !!python/tuple []
216
+ secondary:
217
+ mode: body
218
+ pattern: terrain
219
+ entity: null
220
+ exclude: !!python/tuple []
221
+ fields: !!python/tuple
222
+ - found
223
+ - force
224
+ reduce: netforce
225
+ num_slots: 1
226
+ secondary_policy: first
227
+ track_air_time: true
228
+ global_frame: false
229
+ history_length: 0
230
+ debug: false
231
+ - name: support_foot_ground_contact
232
+ primary:
233
+ mode: geom
234
+ pattern: ^left_foot_collision$
235
+ entity: robot
236
+ exclude: !!python/tuple []
237
+ secondary:
238
+ mode: body
239
+ pattern: terrain
240
+ entity: null
241
+ exclude: !!python/tuple []
242
+ fields: !!python/tuple
243
+ - found
244
+ reduce: netforce
245
+ num_slots: 1
246
+ secondary_policy: first
247
+ track_air_time: false
248
+ global_frame: false
249
+ history_length: 0
250
+ debug: false
251
+ - name: self_collision
252
+ primary:
253
+ mode: subtree
254
+ pattern: trunk_base
255
+ entity: robot
256
+ exclude: !!python/tuple []
257
+ secondary:
258
+ mode: subtree
259
+ pattern: trunk_base
260
+ entity: robot
261
+ exclude: !!python/tuple []
262
+ fields: !!python/tuple
263
+ - found
264
+ reduce: none
265
+ num_slots: 1
266
+ secondary_policy: first
267
+ track_air_time: false
268
+ global_frame: false
269
+ history_length: 0
270
+ debug: false
271
+ extent: 2.0
272
+ spec_fn: null
273
+ observations:
274
+ actor:
275
+ terms:
276
+ base_ang_vel:
277
+ func: !!python/name:mjlab_microduck.tasks.mdp.base_ang_vel_imu_misaligned ''
278
+ params:
279
+ max_angle_deg: 6.0
280
+ noise:
281
+ operation: add
282
+ _tensor_cache: {}
283
+ n_min: -0.03
284
+ n_max: 0.03
285
+ clip: null
286
+ scale: null
287
+ delay_min_lag: 0
288
+ delay_max_lag: 1
289
+ delay_per_env: true
290
+ delay_hold_prob: 0.0
291
+ delay_update_period: 64
292
+ delay_per_env_phase: true
293
+ history_length: 0
294
+ flatten_history_dim: true
295
+ projected_gravity:
296
+ func: !!python/name:mjlab_microduck.tasks.mdp.projected_gravity_imu_misaligned ''
297
+ params:
298
+ max_angle_deg: 6.0
299
+ noise:
300
+ operation: add
301
+ _tensor_cache: {}
302
+ n_min: -0.01
303
+ n_max: 0.01
304
+ clip: null
305
+ scale: null
306
+ delay_min_lag: 0
307
+ delay_max_lag: 1
308
+ delay_per_env: true
309
+ delay_hold_prob: 0.0
310
+ delay_update_period: 64
311
+ delay_per_env_phase: true
312
+ history_length: 0
313
+ flatten_history_dim: true
314
+ joint_pos:
315
+ func: &id002 !!python/name:mjlab.envs.mdp.observations.joint_pos_rel ''
316
+ params:
317
+ asset_cfg:
318
+ name: robot
319
+ joint_names: !!python/tuple
320
+ - ^(?!passive_).*
321
+ joint_ids: !!python/object/apply:builtins.slice
322
+ - null
323
+ - null
324
+ - null
325
+ body_names: null
326
+ body_ids: !!python/object/apply:builtins.slice
327
+ - null
328
+ - null
329
+ - null
330
+ geom_names: null
331
+ geom_ids: !!python/object/apply:builtins.slice
332
+ - null
333
+ - null
334
+ - null
335
+ site_names: null
336
+ site_ids: !!python/object/apply:builtins.slice
337
+ - null
338
+ - null
339
+ - null
340
+ actuator_names: null
341
+ actuator_ids: !!python/object/apply:builtins.slice
342
+ - null
343
+ - null
344
+ - null
345
+ tendon_names: null
346
+ tendon_ids: !!python/object/apply:builtins.slice
347
+ - null
348
+ - null
349
+ - null
350
+ camera_names: null
351
+ camera_ids: !!python/object/apply:builtins.slice
352
+ - null
353
+ - null
354
+ - null
355
+ light_names: null
356
+ light_ids: !!python/object/apply:builtins.slice
357
+ - null
358
+ - null
359
+ - null
360
+ material_names: null
361
+ material_ids: !!python/object/apply:builtins.slice
362
+ - null
363
+ - null
364
+ - null
365
+ pair_names: null
366
+ pair_ids: !!python/object/apply:builtins.slice
367
+ - null
368
+ - null
369
+ - null
370
+ preserve_order: false
371
+ biased: true
372
+ noise:
373
+ operation: add
374
+ _tensor_cache: {}
375
+ n_min: -0.001
376
+ n_max: 0.001
377
+ clip: null
378
+ scale: null
379
+ delay_min_lag: 0
380
+ delay_max_lag: 0
381
+ delay_per_env: true
382
+ delay_hold_prob: 0.0
383
+ delay_update_period: 0
384
+ delay_per_env_phase: true
385
+ history_length: 0
386
+ flatten_history_dim: true
387
+ joint_vel:
388
+ func: &id003 !!python/name:mjlab.envs.mdp.observations.joint_vel_rel ''
389
+ params:
390
+ asset_cfg:
391
+ name: robot
392
+ joint_names: !!python/tuple
393
+ - ^(?!passive_).*
394
+ joint_ids: !!python/object/apply:builtins.slice
395
+ - null
396
+ - null
397
+ - null
398
+ body_names: null
399
+ body_ids: !!python/object/apply:builtins.slice
400
+ - null
401
+ - null
402
+ - null
403
+ geom_names: null
404
+ geom_ids: !!python/object/apply:builtins.slice
405
+ - null
406
+ - null
407
+ - null
408
+ site_names: null
409
+ site_ids: !!python/object/apply:builtins.slice
410
+ - null
411
+ - null
412
+ - null
413
+ actuator_names: null
414
+ actuator_ids: !!python/object/apply:builtins.slice
415
+ - null
416
+ - null
417
+ - null
418
+ tendon_names: null
419
+ tendon_ids: !!python/object/apply:builtins.slice
420
+ - null
421
+ - null
422
+ - null
423
+ camera_names: null
424
+ camera_ids: !!python/object/apply:builtins.slice
425
+ - null
426
+ - null
427
+ - null
428
+ light_names: null
429
+ light_ids: !!python/object/apply:builtins.slice
430
+ - null
431
+ - null
432
+ - null
433
+ material_names: null
434
+ material_ids: !!python/object/apply:builtins.slice
435
+ - null
436
+ - null
437
+ - null
438
+ pair_names: null
439
+ pair_ids: !!python/object/apply:builtins.slice
440
+ - null
441
+ - null
442
+ - null
443
+ preserve_order: false
444
+ noise:
445
+ operation: add
446
+ _tensor_cache: {}
447
+ n_min: -0.25
448
+ n_max: 0.25
449
+ clip: null
450
+ scale: null
451
+ delay_min_lag: 1
452
+ delay_max_lag: 1
453
+ delay_per_env: true
454
+ delay_hold_prob: 0.0
455
+ delay_update_period: 0
456
+ delay_per_env_phase: true
457
+ history_length: 0
458
+ flatten_history_dim: true
459
+ actions:
460
+ func: &id004 !!python/name:mjlab.envs.mdp.observations.last_action ''
461
+ params: {}
462
+ noise: null
463
+ clip: null
464
+ scale: null
465
+ delay_min_lag: 0
466
+ delay_max_lag: 0
467
+ delay_per_env: true
468
+ delay_hold_prob: 0.0
469
+ delay_update_period: 0
470
+ delay_per_env_phase: true
471
+ history_length: 0
472
+ flatten_history_dim: true
473
+ command:
474
+ func: &id005 !!python/name:mjlab.envs.mdp.observations.generated_commands ''
475
+ params:
476
+ command_name: twist
477
+ noise: null
478
+ clip: null
479
+ scale: null
480
+ delay_min_lag: 0
481
+ delay_max_lag: 0
482
+ delay_per_env: true
483
+ delay_hold_prob: 0.0
484
+ delay_update_period: 0
485
+ delay_per_env_phase: true
486
+ history_length: 0
487
+ flatten_history_dim: true
488
+ head_command:
489
+ func: &id001 !!python/name:mjlab_microduck.tasks.mdp.zero_command_padding ''
490
+ params:
491
+ dim: 4
492
+ noise: null
493
+ clip: null
494
+ scale: null
495
+ delay_min_lag: 0
496
+ delay_max_lag: 0
497
+ delay_per_env: true
498
+ delay_hold_prob: 0.0
499
+ delay_update_period: 0
500
+ delay_per_env_phase: true
501
+ history_length: 0
502
+ flatten_history_dim: true
503
+ body_command:
504
+ func: *id001
505
+ params:
506
+ dim: 6
507
+ noise: null
508
+ clip: null
509
+ scale: null
510
+ delay_min_lag: 0
511
+ delay_max_lag: 0
512
+ delay_per_env: true
513
+ delay_hold_prob: 0.0
514
+ delay_update_period: 0
515
+ delay_per_env_phase: true
516
+ history_length: 0
517
+ flatten_history_dim: true
518
+ concatenate_terms: true
519
+ concatenate_dim: -1
520
+ enable_corruption: true
521
+ history_length: null
522
+ flatten_history_dim: true
523
+ nan_policy: disabled
524
+ nan_check_per_term: true
525
+ critic:
526
+ terms:
527
+ base_lin_vel:
528
+ func: !!python/name:mjlab.envs.mdp.observations.base_lin_vel ''
529
+ params: {}
530
+ noise: null
531
+ clip: null
532
+ scale: 1.0
533
+ delay_min_lag: 0
534
+ delay_max_lag: 0
535
+ delay_per_env: true
536
+ delay_hold_prob: 0.0
537
+ delay_update_period: 0
538
+ delay_per_env_phase: true
539
+ history_length: 0
540
+ flatten_history_dim: true
541
+ base_ang_vel:
542
+ func: !!python/name:mjlab.envs.mdp.observations.builtin_sensor ''
543
+ params:
544
+ sensor_name: robot/imu_ang_vel
545
+ noise:
546
+ operation: add
547
+ _tensor_cache: {}
548
+ n_min: -0.2
549
+ n_max: 0.2
550
+ clip: null
551
+ scale: null
552
+ delay_min_lag: 0
553
+ delay_max_lag: 0
554
+ delay_per_env: true
555
+ delay_hold_prob: 0.0
556
+ delay_update_period: 0
557
+ delay_per_env_phase: true
558
+ history_length: 0
559
+ flatten_history_dim: true
560
+ projected_gravity:
561
+ func: !!python/name:mjlab.envs.mdp.observations.projected_gravity ''
562
+ params: {}
563
+ noise:
564
+ operation: add
565
+ _tensor_cache: {}
566
+ n_min: -0.05
567
+ n_max: 0.05
568
+ clip: null
569
+ scale: null
570
+ delay_min_lag: 0
571
+ delay_max_lag: 0
572
+ delay_per_env: true
573
+ delay_hold_prob: 0.0
574
+ delay_update_period: 0
575
+ delay_per_env_phase: true
576
+ history_length: 0
577
+ flatten_history_dim: true
578
+ joint_pos:
579
+ func: *id002
580
+ params:
581
+ asset_cfg:
582
+ name: robot
583
+ joint_names: !!python/tuple
584
+ - ^(?!passive_).*
585
+ joint_ids: !!python/object/apply:builtins.slice
586
+ - null
587
+ - null
588
+ - null
589
+ body_names: null
590
+ body_ids: !!python/object/apply:builtins.slice
591
+ - null
592
+ - null
593
+ - null
594
+ geom_names: null
595
+ geom_ids: !!python/object/apply:builtins.slice
596
+ - null
597
+ - null
598
+ - null
599
+ site_names: null
600
+ site_ids: !!python/object/apply:builtins.slice
601
+ - null
602
+ - null
603
+ - null
604
+ actuator_names: null
605
+ actuator_ids: !!python/object/apply:builtins.slice
606
+ - null
607
+ - null
608
+ - null
609
+ tendon_names: null
610
+ tendon_ids: !!python/object/apply:builtins.slice
611
+ - null
612
+ - null
613
+ - null
614
+ camera_names: null
615
+ camera_ids: !!python/object/apply:builtins.slice
616
+ - null
617
+ - null
618
+ - null
619
+ light_names: null
620
+ light_ids: !!python/object/apply:builtins.slice
621
+ - null
622
+ - null
623
+ - null
624
+ material_names: null
625
+ material_ids: !!python/object/apply:builtins.slice
626
+ - null
627
+ - null
628
+ - null
629
+ pair_names: null
630
+ pair_ids: !!python/object/apply:builtins.slice
631
+ - null
632
+ - null
633
+ - null
634
+ preserve_order: false
635
+ biased: false
636
+ noise:
637
+ operation: add
638
+ _tensor_cache: {}
639
+ n_min: -0.001
640
+ n_max: 0.001
641
+ clip: null
642
+ scale: null
643
+ delay_min_lag: 0
644
+ delay_max_lag: 0
645
+ delay_per_env: true
646
+ delay_hold_prob: 0.0
647
+ delay_update_period: 0
648
+ delay_per_env_phase: true
649
+ history_length: 0
650
+ flatten_history_dim: true
651
+ joint_vel:
652
+ func: *id003
653
+ params:
654
+ asset_cfg:
655
+ name: robot
656
+ joint_names: !!python/tuple
657
+ - ^(?!passive_).*
658
+ joint_ids: !!python/object/apply:builtins.slice
659
+ - null
660
+ - null
661
+ - null
662
+ body_names: null
663
+ body_ids: !!python/object/apply:builtins.slice
664
+ - null
665
+ - null
666
+ - null
667
+ geom_names: null
668
+ geom_ids: !!python/object/apply:builtins.slice
669
+ - null
670
+ - null
671
+ - null
672
+ site_names: null
673
+ site_ids: !!python/object/apply:builtins.slice
674
+ - null
675
+ - null
676
+ - null
677
+ actuator_names: null
678
+ actuator_ids: !!python/object/apply:builtins.slice
679
+ - null
680
+ - null
681
+ - null
682
+ tendon_names: null
683
+ tendon_ids: !!python/object/apply:builtins.slice
684
+ - null
685
+ - null
686
+ - null
687
+ camera_names: null
688
+ camera_ids: !!python/object/apply:builtins.slice
689
+ - null
690
+ - null
691
+ - null
692
+ light_names: null
693
+ light_ids: !!python/object/apply:builtins.slice
694
+ - null
695
+ - null
696
+ - null
697
+ material_names: null
698
+ material_ids: !!python/object/apply:builtins.slice
699
+ - null
700
+ - null
701
+ - null
702
+ pair_names: null
703
+ pair_ids: !!python/object/apply:builtins.slice
704
+ - null
705
+ - null
706
+ - null
707
+ preserve_order: false
708
+ noise:
709
+ operation: add
710
+ _tensor_cache: {}
711
+ n_min: -0.25
712
+ n_max: 0.25
713
+ clip: null
714
+ scale: null
715
+ delay_min_lag: 0
716
+ delay_max_lag: 0
717
+ delay_per_env: true
718
+ delay_hold_prob: 0.0
719
+ delay_update_period: 0
720
+ delay_per_env_phase: true
721
+ history_length: 0
722
+ flatten_history_dim: true
723
+ actions:
724
+ func: *id004
725
+ params: {}
726
+ noise: null
727
+ clip: null
728
+ scale: null
729
+ delay_min_lag: 0
730
+ delay_max_lag: 0
731
+ delay_per_env: true
732
+ delay_hold_prob: 0.0
733
+ delay_update_period: 0
734
+ delay_per_env_phase: true
735
+ history_length: 0
736
+ flatten_history_dim: true
737
+ command:
738
+ func: *id005
739
+ params:
740
+ command_name: twist
741
+ noise: null
742
+ clip: null
743
+ scale: null
744
+ delay_min_lag: 0
745
+ delay_max_lag: 0
746
+ delay_per_env: true
747
+ delay_hold_prob: 0.0
748
+ delay_update_period: 0
749
+ delay_per_env_phase: true
750
+ history_length: 0
751
+ flatten_history_dim: true
752
+ foot_air_time:
753
+ func: !!python/name:mjlab.tasks.velocity.mdp.observations.foot_air_time ''
754
+ params:
755
+ sensor_name: feet_ground_contact
756
+ noise: null
757
+ clip: null
758
+ scale: null
759
+ delay_min_lag: 0
760
+ delay_max_lag: 0
761
+ delay_per_env: true
762
+ delay_hold_prob: 0.0
763
+ delay_update_period: 0
764
+ delay_per_env_phase: true
765
+ history_length: 0
766
+ flatten_history_dim: true
767
+ foot_contact:
768
+ func: !!python/name:mjlab.tasks.velocity.mdp.observations.foot_contact ''
769
+ params:
770
+ sensor_name: feet_ground_contact
771
+ noise: null
772
+ clip: null
773
+ scale: null
774
+ delay_min_lag: 0
775
+ delay_max_lag: 0
776
+ delay_per_env: true
777
+ delay_hold_prob: 0.0
778
+ delay_update_period: 0
779
+ delay_per_env_phase: true
780
+ history_length: 0
781
+ flatten_history_dim: true
782
+ foot_contact_forces:
783
+ func: !!python/name:mjlab.tasks.velocity.mdp.observations.foot_contact_forces ''
784
+ params:
785
+ sensor_name: feet_ground_contact
786
+ noise: null
787
+ clip: null
788
+ scale: null
789
+ delay_min_lag: 0
790
+ delay_max_lag: 0
791
+ delay_per_env: true
792
+ delay_hold_prob: 0.0
793
+ delay_update_period: 0
794
+ delay_per_env_phase: true
795
+ history_length: 0
796
+ flatten_history_dim: true
797
+ head_command:
798
+ func: *id001
799
+ params:
800
+ dim: 4
801
+ noise: null
802
+ clip: null
803
+ scale: null
804
+ delay_min_lag: 0
805
+ delay_max_lag: 0
806
+ delay_per_env: true
807
+ delay_hold_prob: 0.0
808
+ delay_update_period: 0
809
+ delay_per_env_phase: true
810
+ history_length: 0
811
+ flatten_history_dim: true
812
+ body_command:
813
+ func: *id001
814
+ params:
815
+ dim: 6
816
+ noise: null
817
+ clip: null
818
+ scale: null
819
+ delay_min_lag: 0
820
+ delay_max_lag: 0
821
+ delay_per_env: true
822
+ delay_hold_prob: 0.0
823
+ delay_update_period: 0
824
+ delay_per_env_phase: true
825
+ history_length: 0
826
+ flatten_history_dim: true
827
+ ball_position:
828
+ func: !!python/name:mjlab_microduck.tasks.mdp.ball_pos_in_base ''
829
+ params:
830
+ asset_name: ball
831
+ noise: null
832
+ clip: null
833
+ scale: null
834
+ delay_min_lag: 0
835
+ delay_max_lag: 0
836
+ delay_per_env: true
837
+ delay_hold_prob: 0.0
838
+ delay_update_period: 0
839
+ delay_per_env_phase: true
840
+ history_length: 0
841
+ flatten_history_dim: true
842
+ ball_velocity:
843
+ func: !!python/name:mjlab_microduck.tasks.mdp.ball_vel_in_base ''
844
+ params:
845
+ asset_name: ball
846
+ noise: null
847
+ clip: null
848
+ scale: null
849
+ delay_min_lag: 0
850
+ delay_max_lag: 0
851
+ delay_per_env: true
852
+ delay_hold_prob: 0.0
853
+ delay_update_period: 0
854
+ delay_per_env_phase: true
855
+ history_length: 0
856
+ flatten_history_dim: true
857
+ concatenate_terms: true
858
+ concatenate_dim: -1
859
+ enable_corruption: false
860
+ history_length: null
861
+ flatten_history_dim: true
862
+ nan_policy: disabled
863
+ nan_check_per_term: true
864
+ actions:
865
+ joint_pos:
866
+ entity_name: robot
867
+ clip: null
868
+ transmission_type: !!python/object/apply:mjlab.actuator.actuator.TransmissionType
869
+ - joint
870
+ actuator_names: !!python/tuple
871
+ - .*
872
+ scale: 1.0
873
+ offset: 0.0
874
+ preserve_order: false
875
+ use_default_offset: true
876
+ events:
877
+ reset_base:
878
+ func: !!python/name:mjlab.envs.mdp.events.reset_root_state_uniform ''
879
+ params:
880
+ pose_range:
881
+ x: !!python/tuple
882
+ - -0.5
883
+ - 0.5
884
+ y: !!python/tuple
885
+ - -0.5
886
+ - 0.5
887
+ z: !!python/tuple
888
+ - 0.01
889
+ - 0.05
890
+ yaw: !!python/tuple
891
+ - -3.14
892
+ - 3.14
893
+ velocity_range: {}
894
+ mode: reset
895
+ interval_range_s: null
896
+ is_global_time: false
897
+ min_step_count_between_reset: 0
898
+ reset_robot_joints:
899
+ func: !!python/name:mjlab.envs.mdp.events.reset_joints_by_offset ''
900
+ params:
901
+ position_range: !!python/tuple
902
+ - -0.05
903
+ - 0.05
904
+ velocity_range: !!python/tuple
905
+ - 0.0
906
+ - 0.0
907
+ asset_cfg:
908
+ name: robot
909
+ joint_names: !!python/tuple
910
+ - .*
911
+ joint_ids: !!python/object/apply:builtins.slice
912
+ - null
913
+ - null
914
+ - null
915
+ body_names: null
916
+ body_ids: !!python/object/apply:builtins.slice
917
+ - null
918
+ - null
919
+ - null
920
+ geom_names: null
921
+ geom_ids: !!python/object/apply:builtins.slice
922
+ - null
923
+ - null
924
+ - null
925
+ site_names: null
926
+ site_ids: !!python/object/apply:builtins.slice
927
+ - null
928
+ - null
929
+ - null
930
+ actuator_names: null
931
+ actuator_ids: !!python/object/apply:builtins.slice
932
+ - null
933
+ - null
934
+ - null
935
+ tendon_names: null
936
+ tendon_ids: !!python/object/apply:builtins.slice
937
+ - null
938
+ - null
939
+ - null
940
+ camera_names: null
941
+ camera_ids: !!python/object/apply:builtins.slice
942
+ - null
943
+ - null
944
+ - null
945
+ light_names: null
946
+ light_ids: !!python/object/apply:builtins.slice
947
+ - null
948
+ - null
949
+ - null
950
+ material_names: null
951
+ material_ids: !!python/object/apply:builtins.slice
952
+ - null
953
+ - null
954
+ - null
955
+ pair_names: null
956
+ pair_ids: !!python/object/apply:builtins.slice
957
+ - null
958
+ - null
959
+ - null
960
+ preserve_order: false
961
+ mode: reset
962
+ interval_range_s: null
963
+ is_global_time: false
964
+ min_step_count_between_reset: 0
965
+ push_robot:
966
+ func: !!python/name:mjlab.envs.mdp.events.push_by_setting_velocity ''
967
+ params:
968
+ velocity_range:
969
+ x: !!python/tuple
970
+ - -0.3
971
+ - 0.3
972
+ y: !!python/tuple
973
+ - -0.3
974
+ - 0.3
975
+ asset_cfg:
976
+ name: robot
977
+ joint_names: null
978
+ joint_ids: !!python/object/apply:builtins.slice
979
+ - null
980
+ - null
981
+ - null
982
+ body_names: null
983
+ body_ids: !!python/object/apply:builtins.slice
984
+ - null
985
+ - null
986
+ - null
987
+ geom_names: null
988
+ geom_ids: !!python/object/apply:builtins.slice
989
+ - null
990
+ - null
991
+ - null
992
+ site_names: null
993
+ site_ids: !!python/object/apply:builtins.slice
994
+ - null
995
+ - null
996
+ - null
997
+ actuator_names: null
998
+ actuator_ids: !!python/object/apply:builtins.slice
999
+ - null
1000
+ - null
1001
+ - null
1002
+ tendon_names: null
1003
+ tendon_ids: !!python/object/apply:builtins.slice
1004
+ - null
1005
+ - null
1006
+ - null
1007
+ camera_names: null
1008
+ camera_ids: !!python/object/apply:builtins.slice
1009
+ - null
1010
+ - null
1011
+ - null
1012
+ light_names: null
1013
+ light_ids: !!python/object/apply:builtins.slice
1014
+ - null
1015
+ - null
1016
+ - null
1017
+ material_names: null
1018
+ material_ids: !!python/object/apply:builtins.slice
1019
+ - null
1020
+ - null
1021
+ - null
1022
+ pair_names: null
1023
+ pair_ids: !!python/object/apply:builtins.slice
1024
+ - null
1025
+ - null
1026
+ - null
1027
+ preserve_order: false
1028
+ mode: interval
1029
+ interval_range_s: !!python/tuple
1030
+ - 3.0
1031
+ - 6.0
1032
+ is_global_time: false
1033
+ min_step_count_between_reset: 0
1034
+ foot_friction:
1035
+ func: !!python/name:mjlab.envs.mdp.dr.geom.geom_friction ''
1036
+ params:
1037
+ asset_cfg:
1038
+ name: robot
1039
+ joint_names: null
1040
+ joint_ids: !!python/object/apply:builtins.slice
1041
+ - null
1042
+ - null
1043
+ - null
1044
+ body_names: null
1045
+ body_ids: !!python/object/apply:builtins.slice
1046
+ - null
1047
+ - null
1048
+ - null
1049
+ geom_names: !!python/tuple
1050
+ - left_foot_collision
1051
+ - right_foot_collision
1052
+ geom_ids: !!python/object/apply:builtins.slice
1053
+ - null
1054
+ - null
1055
+ - null
1056
+ site_names: null
1057
+ site_ids: !!python/object/apply:builtins.slice
1058
+ - null
1059
+ - null
1060
+ - null
1061
+ actuator_names: null
1062
+ actuator_ids: !!python/object/apply:builtins.slice
1063
+ - null
1064
+ - null
1065
+ - null
1066
+ tendon_names: null
1067
+ tendon_ids: !!python/object/apply:builtins.slice
1068
+ - null
1069
+ - null
1070
+ - null
1071
+ camera_names: null
1072
+ camera_ids: !!python/object/apply:builtins.slice
1073
+ - null
1074
+ - null
1075
+ - null
1076
+ light_names: null
1077
+ light_ids: !!python/object/apply:builtins.slice
1078
+ - null
1079
+ - null
1080
+ - null
1081
+ material_names: null
1082
+ material_ids: !!python/object/apply:builtins.slice
1083
+ - null
1084
+ - null
1085
+ - null
1086
+ pair_names: null
1087
+ pair_ids: !!python/object/apply:builtins.slice
1088
+ - null
1089
+ - null
1090
+ - null
1091
+ preserve_order: false
1092
+ operation: abs
1093
+ ranges: !!python/tuple
1094
+ - 0.7
1095
+ - 1.3
1096
+ shared_random: true
1097
+ mode: startup
1098
+ interval_range_s: null
1099
+ is_global_time: false
1100
+ min_step_count_between_reset: 0
1101
+ encoder_bias:
1102
+ func: !!python/name:mjlab.envs.mdp.dr.joint.encoder_bias ''
1103
+ params:
1104
+ asset_cfg:
1105
+ name: robot
1106
+ joint_names: null
1107
+ joint_ids: !!python/object/apply:builtins.slice
1108
+ - null
1109
+ - null
1110
+ - null
1111
+ body_names: null
1112
+ body_ids: !!python/object/apply:builtins.slice
1113
+ - null
1114
+ - null
1115
+ - null
1116
+ geom_names: null
1117
+ geom_ids: !!python/object/apply:builtins.slice
1118
+ - null
1119
+ - null
1120
+ - null
1121
+ site_names: null
1122
+ site_ids: !!python/object/apply:builtins.slice
1123
+ - null
1124
+ - null
1125
+ - null
1126
+ actuator_names: null
1127
+ actuator_ids: !!python/object/apply:builtins.slice
1128
+ - null
1129
+ - null
1130
+ - null
1131
+ tendon_names: null
1132
+ tendon_ids: !!python/object/apply:builtins.slice
1133
+ - null
1134
+ - null
1135
+ - null
1136
+ camera_names: null
1137
+ camera_ids: !!python/object/apply:builtins.slice
1138
+ - null
1139
+ - null
1140
+ - null
1141
+ light_names: null
1142
+ light_ids: !!python/object/apply:builtins.slice
1143
+ - null
1144
+ - null
1145
+ - null
1146
+ material_names: null
1147
+ material_ids: !!python/object/apply:builtins.slice
1148
+ - null
1149
+ - null
1150
+ - null
1151
+ pair_names: null
1152
+ pair_ids: !!python/object/apply:builtins.slice
1153
+ - null
1154
+ - null
1155
+ - null
1156
+ preserve_order: false
1157
+ bias_range: !!python/tuple
1158
+ - -0.015
1159
+ - 0.015
1160
+ mode: startup
1161
+ interval_range_s: null
1162
+ is_global_time: false
1163
+ min_step_count_between_reset: 0
1164
+ base_com:
1165
+ func: &id006 !!python/name:mjlab.envs.mdp.dr.body.body_com_offset ''
1166
+ params:
1167
+ asset_cfg:
1168
+ name: robot
1169
+ joint_names: null
1170
+ joint_ids: !!python/object/apply:builtins.slice
1171
+ - null
1172
+ - null
1173
+ - null
1174
+ body_names: !!python/tuple []
1175
+ body_ids: !!python/object/apply:builtins.slice
1176
+ - null
1177
+ - null
1178
+ - null
1179
+ geom_names: null
1180
+ geom_ids: !!python/object/apply:builtins.slice
1181
+ - null
1182
+ - null
1183
+ - null
1184
+ site_names: null
1185
+ site_ids: !!python/object/apply:builtins.slice
1186
+ - null
1187
+ - null
1188
+ - null
1189
+ actuator_names: null
1190
+ actuator_ids: !!python/object/apply:builtins.slice
1191
+ - null
1192
+ - null
1193
+ - null
1194
+ tendon_names: null
1195
+ tendon_ids: !!python/object/apply:builtins.slice
1196
+ - null
1197
+ - null
1198
+ - null
1199
+ camera_names: null
1200
+ camera_ids: !!python/object/apply:builtins.slice
1201
+ - null
1202
+ - null
1203
+ - null
1204
+ light_names: null
1205
+ light_ids: !!python/object/apply:builtins.slice
1206
+ - null
1207
+ - null
1208
+ - null
1209
+ material_names: null
1210
+ material_ids: !!python/object/apply:builtins.slice
1211
+ - null
1212
+ - null
1213
+ - null
1214
+ pair_names: null
1215
+ pair_ids: !!python/object/apply:builtins.slice
1216
+ - null
1217
+ - null
1218
+ - null
1219
+ preserve_order: false
1220
+ operation: add
1221
+ ranges:
1222
+ 0: !!python/tuple
1223
+ - -0.025
1224
+ - 0.025
1225
+ 1: !!python/tuple
1226
+ - -0.025
1227
+ - 0.025
1228
+ 2: !!python/tuple
1229
+ - -0.03
1230
+ - 0.03
1231
+ mode: startup
1232
+ interval_range_s: null
1233
+ is_global_time: false
1234
+ min_step_count_between_reset: 0
1235
+ expand_bam_friction_fields:
1236
+ func: !!python/name:mjlab_microduck.tasks.mdp.expand_bam_friction_fields ''
1237
+ params: {}
1238
+ mode: startup
1239
+ interval_range_s: null
1240
+ is_global_time: false
1241
+ min_step_count_between_reset: 0
1242
+ reset_action_history:
1243
+ func: !!python/name:mjlab_microduck.tasks.mdp.reset_action_history ''
1244
+ params: {}
1245
+ mode: reset
1246
+ interval_range_s: null
1247
+ is_global_time: false
1248
+ min_step_count_between_reset: 0
1249
+ set_ground_state:
1250
+ func: !!python/name:mjlab_microduck.tasks.mdp.set_random_ground_state ''
1251
+ params:
1252
+ face_down_prob: 0.0
1253
+ face_up_prob: 0.0
1254
+ sitting_prob: 0.0
1255
+ standing_prob: 1.0
1256
+ sitting_tilt_max: 0.08726646259971647
1257
+ standing_z_min: 0.11
1258
+ standing_z_max: 0.12
1259
+ mode: reset
1260
+ interval_range_s: null
1261
+ is_global_time: false
1262
+ min_step_count_between_reset: 0
1263
+ reset_ball:
1264
+ func: !!python/name:mjlab_microduck.tasks.mdp.reset_ball_in_front_of_foot ''
1265
+ params:
1266
+ offset: !!python/tuple
1267
+ - 0.09
1268
+ - -0.042
1269
+ noise_xy: 0.015
1270
+ ball_radius: 0.035
1271
+ asset_name: ball
1272
+ mode: reset
1273
+ interval_range_s: null
1274
+ is_global_time: false
1275
+ min_step_count_between_reset: 0
1276
+ randomize_com:
1277
+ func: *id006
1278
+ params:
1279
+ asset_cfg:
1280
+ name: robot
1281
+ joint_names: null
1282
+ joint_ids: !!python/object/apply:builtins.slice
1283
+ - null
1284
+ - null
1285
+ - null
1286
+ body_names: !!python/tuple
1287
+ - trunk_base
1288
+ body_ids: !!python/object/apply:builtins.slice
1289
+ - null
1290
+ - null
1291
+ - null
1292
+ geom_names: null
1293
+ geom_ids: !!python/object/apply:builtins.slice
1294
+ - null
1295
+ - null
1296
+ - null
1297
+ site_names: null
1298
+ site_ids: !!python/object/apply:builtins.slice
1299
+ - null
1300
+ - null
1301
+ - null
1302
+ actuator_names: null
1303
+ actuator_ids: !!python/object/apply:builtins.slice
1304
+ - null
1305
+ - null
1306
+ - null
1307
+ tendon_names: null
1308
+ tendon_ids: !!python/object/apply:builtins.slice
1309
+ - null
1310
+ - null
1311
+ - null
1312
+ camera_names: null
1313
+ camera_ids: !!python/object/apply:builtins.slice
1314
+ - null
1315
+ - null
1316
+ - null
1317
+ light_names: null
1318
+ light_ids: !!python/object/apply:builtins.slice
1319
+ - null
1320
+ - null
1321
+ - null
1322
+ material_names: null
1323
+ material_ids: !!python/object/apply:builtins.slice
1324
+ - null
1325
+ - null
1326
+ - null
1327
+ pair_names: null
1328
+ pair_ids: !!python/object/apply:builtins.slice
1329
+ - null
1330
+ - null
1331
+ - null
1332
+ preserve_order: false
1333
+ operation: add
1334
+ ranges: !!python/tuple
1335
+ - -0.003
1336
+ - 0.003
1337
+ mode: reset
1338
+ interval_range_s: null
1339
+ is_global_time: false
1340
+ min_step_count_between_reset: 0
1341
+ randomize_head_com:
1342
+ func: *id006
1343
+ params:
1344
+ asset_cfg:
1345
+ name: robot
1346
+ joint_names: null
1347
+ joint_ids: !!python/object/apply:builtins.slice
1348
+ - null
1349
+ - null
1350
+ - null
1351
+ body_names: !!python/tuple
1352
+ - neck
1353
+ - neck_pitch
1354
+ - yaw_roll_motion
1355
+ - (bottom_head_shell|jaw_soft)
1356
+ - bearing_roll
1357
+ body_ids: !!python/object/apply:builtins.slice
1358
+ - null
1359
+ - null
1360
+ - null
1361
+ geom_names: null
1362
+ geom_ids: !!python/object/apply:builtins.slice
1363
+ - null
1364
+ - null
1365
+ - null
1366
+ site_names: null
1367
+ site_ids: !!python/object/apply:builtins.slice
1368
+ - null
1369
+ - null
1370
+ - null
1371
+ actuator_names: null
1372
+ actuator_ids: !!python/object/apply:builtins.slice
1373
+ - null
1374
+ - null
1375
+ - null
1376
+ tendon_names: null
1377
+ tendon_ids: !!python/object/apply:builtins.slice
1378
+ - null
1379
+ - null
1380
+ - null
1381
+ camera_names: null
1382
+ camera_ids: !!python/object/apply:builtins.slice
1383
+ - null
1384
+ - null
1385
+ - null
1386
+ light_names: null
1387
+ light_ids: !!python/object/apply:builtins.slice
1388
+ - null
1389
+ - null
1390
+ - null
1391
+ material_names: null
1392
+ material_ids: !!python/object/apply:builtins.slice
1393
+ - null
1394
+ - null
1395
+ - null
1396
+ pair_names: null
1397
+ pair_ids: !!python/object/apply:builtins.slice
1398
+ - null
1399
+ - null
1400
+ - null
1401
+ preserve_order: false
1402
+ operation: add
1403
+ ranges: !!python/tuple
1404
+ - -0.003
1405
+ - 0.003
1406
+ mode: reset
1407
+ interval_range_s: null
1408
+ is_global_time: false
1409
+ min_step_count_between_reset: 0
1410
+ randomize_armature:
1411
+ func: !!python/name:mjlab.envs.mdp.dr.joint.joint_armature ''
1412
+ params:
1413
+ asset_cfg:
1414
+ name: robot
1415
+ joint_names: !!python/tuple
1416
+ - .*
1417
+ joint_ids: !!python/object/apply:builtins.slice
1418
+ - null
1419
+ - null
1420
+ - null
1421
+ body_names: null
1422
+ body_ids: !!python/object/apply:builtins.slice
1423
+ - null
1424
+ - null
1425
+ - null
1426
+ geom_names: null
1427
+ geom_ids: !!python/object/apply:builtins.slice
1428
+ - null
1429
+ - null
1430
+ - null
1431
+ site_names: null
1432
+ site_ids: !!python/object/apply:builtins.slice
1433
+ - null
1434
+ - null
1435
+ - null
1436
+ actuator_names: null
1437
+ actuator_ids: !!python/object/apply:builtins.slice
1438
+ - null
1439
+ - null
1440
+ - null
1441
+ tendon_names: null
1442
+ tendon_ids: !!python/object/apply:builtins.slice
1443
+ - null
1444
+ - null
1445
+ - null
1446
+ camera_names: null
1447
+ camera_ids: !!python/object/apply:builtins.slice
1448
+ - null
1449
+ - null
1450
+ - null
1451
+ light_names: null
1452
+ light_ids: !!python/object/apply:builtins.slice
1453
+ - null
1454
+ - null
1455
+ - null
1456
+ material_names: null
1457
+ material_ids: !!python/object/apply:builtins.slice
1458
+ - null
1459
+ - null
1460
+ - null
1461
+ pair_names: null
1462
+ pair_ids: !!python/object/apply:builtins.slice
1463
+ - null
1464
+ - null
1465
+ - null
1466
+ preserve_order: false
1467
+ operation: scale
1468
+ ranges: !!python/tuple
1469
+ - 0.9
1470
+ - 1.1
1471
+ mode: reset
1472
+ interval_range_s: null
1473
+ is_global_time: false
1474
+ min_step_count_between_reset: 0
1475
+ randomize_mass_inertia:
1476
+ func: !!python/name:mjlab.envs.mdp.dr.body.pseudo_inertia ''
1477
+ params:
1478
+ asset_cfg:
1479
+ name: robot
1480
+ joint_names: null
1481
+ joint_ids: !!python/object/apply:builtins.slice
1482
+ - null
1483
+ - null
1484
+ - null
1485
+ body_names: !!python/tuple
1486
+ - trunk_base
1487
+ body_ids: !!python/object/apply:builtins.slice
1488
+ - null
1489
+ - null
1490
+ - null
1491
+ geom_names: null
1492
+ geom_ids: !!python/object/apply:builtins.slice
1493
+ - null
1494
+ - null
1495
+ - null
1496
+ site_names: null
1497
+ site_ids: !!python/object/apply:builtins.slice
1498
+ - null
1499
+ - null
1500
+ - null
1501
+ actuator_names: null
1502
+ actuator_ids: !!python/object/apply:builtins.slice
1503
+ - null
1504
+ - null
1505
+ - null
1506
+ tendon_names: null
1507
+ tendon_ids: !!python/object/apply:builtins.slice
1508
+ - null
1509
+ - null
1510
+ - null
1511
+ camera_names: null
1512
+ camera_ids: !!python/object/apply:builtins.slice
1513
+ - null
1514
+ - null
1515
+ - null
1516
+ light_names: null
1517
+ light_ids: !!python/object/apply:builtins.slice
1518
+ - null
1519
+ - null
1520
+ - null
1521
+ material_names: null
1522
+ material_ids: !!python/object/apply:builtins.slice
1523
+ - null
1524
+ - null
1525
+ - null
1526
+ pair_names: null
1527
+ pair_ids: !!python/object/apply:builtins.slice
1528
+ - null
1529
+ - null
1530
+ - null
1531
+ preserve_order: false
1532
+ alpha_range: !!python/tuple
1533
+ - -0.02564664719377529
1534
+ - 0.024395082084716024
1535
+ mode: startup
1536
+ interval_range_s: null
1537
+ is_global_time: false
1538
+ min_step_count_between_reset: 0
1539
+ randomize_joint_friction:
1540
+ func: !!python/name:mjlab_microduck.tasks.mdp.randomize_bam_friction ''
1541
+ params:
1542
+ asset_cfg:
1543
+ name: robot
1544
+ joint_names: null
1545
+ joint_ids: !!python/object/apply:builtins.slice
1546
+ - null
1547
+ - null
1548
+ - null
1549
+ body_names: null
1550
+ body_ids: !!python/object/apply:builtins.slice
1551
+ - null
1552
+ - null
1553
+ - null
1554
+ geom_names: null
1555
+ geom_ids: !!python/object/apply:builtins.slice
1556
+ - null
1557
+ - null
1558
+ - null
1559
+ site_names: null
1560
+ site_ids: !!python/object/apply:builtins.slice
1561
+ - null
1562
+ - null
1563
+ - null
1564
+ actuator_names: null
1565
+ actuator_ids: !!python/object/apply:builtins.slice
1566
+ - null
1567
+ - null
1568
+ - null
1569
+ tendon_names: null
1570
+ tendon_ids: !!python/object/apply:builtins.slice
1571
+ - null
1572
+ - null
1573
+ - null
1574
+ camera_names: null
1575
+ camera_ids: !!python/object/apply:builtins.slice
1576
+ - null
1577
+ - null
1578
+ - null
1579
+ light_names: null
1580
+ light_ids: !!python/object/apply:builtins.slice
1581
+ - null
1582
+ - null
1583
+ - null
1584
+ material_names: null
1585
+ material_ids: !!python/object/apply:builtins.slice
1586
+ - null
1587
+ - null
1588
+ - null
1589
+ pair_names: null
1590
+ pair_ids: !!python/object/apply:builtins.slice
1591
+ - null
1592
+ - null
1593
+ - null
1594
+ preserve_order: false
1595
+ scale_range: !!python/tuple
1596
+ - 0.9
1597
+ - 1.1
1598
+ mode: reset
1599
+ interval_range_s: null
1600
+ is_global_time: false
1601
+ min_step_count_between_reset: 0
1602
+ seed: 42
1603
+ sim:
1604
+ nconmax: 50
1605
+ njmax: 1500
1606
+ ls_parallel: true
1607
+ contact_sensor_maxmatch: 64
1608
+ mujoco:
1609
+ timestep: 0.005
1610
+ integrator: implicitfast
1611
+ impratio: 1.0
1612
+ cone: pyramidal
1613
+ jacobian: auto
1614
+ solver: newton
1615
+ iterations: 10
1616
+ tolerance: 1.0e-08
1617
+ ls_iterations: 20
1618
+ ls_tolerance: 0.01
1619
+ ccd_iterations: 50
1620
+ gravity: !!python/tuple
1621
+ - 0.0
1622
+ - 0.0
1623
+ - -9.81
1624
+ disableflags: !!python/tuple []
1625
+ enableflags: !!python/tuple []
1626
+ nan_guard:
1627
+ enabled: false
1628
+ buffer_size: 100
1629
+ output_dir: /tmp/mjlab/nan_dumps
1630
+ max_envs_to_dump: 5
1631
+ viewer:
1632
+ lookat: !!python/tuple
1633
+ - 0.0
1634
+ - 0.0
1635
+ - 0.0
1636
+ distance: 3.0
1637
+ fovy: null
1638
+ elevation: -5.0
1639
+ azimuth: 90.0
1640
+ origin_type: !!python/object/apply:mjlab.viewer.viewer_config.OriginType
1641
+ - 4
1642
+ entity_name: robot
1643
+ body_name: trunk_base
1644
+ env_idx: 0
1645
+ max_extra_envs: 2
1646
+ enable_reflections: true
1647
+ enable_shadows: true
1648
+ height: 240
1649
+ width: 320
1650
+ episode_length_s: 5.0
1651
+ rewards:
1652
+ upright:
1653
+ func: !!python/name:mjlab.tasks.velocity.mdp.rewards.upright ''
1654
+ params:
1655
+ std: 0.22360679774997896
1656
+ asset_cfg:
1657
+ name: robot
1658
+ joint_names: null
1659
+ joint_ids: !!python/object/apply:builtins.slice
1660
+ - null
1661
+ - null
1662
+ - null
1663
+ body_names: !!python/tuple
1664
+ - trunk_base
1665
+ body_ids: !!python/object/apply:builtins.slice
1666
+ - null
1667
+ - null
1668
+ - null
1669
+ geom_names: null
1670
+ geom_ids: !!python/object/apply:builtins.slice
1671
+ - null
1672
+ - null
1673
+ - null
1674
+ site_names: null
1675
+ site_ids: !!python/object/apply:builtins.slice
1676
+ - null
1677
+ - null
1678
+ - null
1679
+ actuator_names: null
1680
+ actuator_ids: !!python/object/apply:builtins.slice
1681
+ - null
1682
+ - null
1683
+ - null
1684
+ tendon_names: null
1685
+ tendon_ids: !!python/object/apply:builtins.slice
1686
+ - null
1687
+ - null
1688
+ - null
1689
+ camera_names: null
1690
+ camera_ids: !!python/object/apply:builtins.slice
1691
+ - null
1692
+ - null
1693
+ - null
1694
+ light_names: null
1695
+ light_ids: !!python/object/apply:builtins.slice
1696
+ - null
1697
+ - null
1698
+ - null
1699
+ material_names: null
1700
+ material_ids: !!python/object/apply:builtins.slice
1701
+ - null
1702
+ - null
1703
+ - null
1704
+ pair_names: null
1705
+ pair_ids: !!python/object/apply:builtins.slice
1706
+ - null
1707
+ - null
1708
+ - null
1709
+ preserve_order: false
1710
+ weight: 2.0
1711
+ body_ang_vel:
1712
+ func: !!python/name:mjlab.tasks.velocity.mdp.rewards.body_angular_velocity_penalty ''
1713
+ params:
1714
+ asset_cfg:
1715
+ name: robot
1716
+ joint_names: null
1717
+ joint_ids: !!python/object/apply:builtins.slice
1718
+ - null
1719
+ - null
1720
+ - null
1721
+ body_names: !!python/tuple
1722
+ - trunk_base
1723
+ body_ids: !!python/object/apply:builtins.slice
1724
+ - null
1725
+ - null
1726
+ - null
1727
+ geom_names: null
1728
+ geom_ids: !!python/object/apply:builtins.slice
1729
+ - null
1730
+ - null
1731
+ - null
1732
+ site_names: null
1733
+ site_ids: !!python/object/apply:builtins.slice
1734
+ - null
1735
+ - null
1736
+ - null
1737
+ actuator_names: null
1738
+ actuator_ids: !!python/object/apply:builtins.slice
1739
+ - null
1740
+ - null
1741
+ - null
1742
+ tendon_names: null
1743
+ tendon_ids: !!python/object/apply:builtins.slice
1744
+ - null
1745
+ - null
1746
+ - null
1747
+ camera_names: null
1748
+ camera_ids: !!python/object/apply:builtins.slice
1749
+ - null
1750
+ - null
1751
+ - null
1752
+ light_names: null
1753
+ light_ids: !!python/object/apply:builtins.slice
1754
+ - null
1755
+ - null
1756
+ - null
1757
+ material_names: null
1758
+ material_ids: !!python/object/apply:builtins.slice
1759
+ - null
1760
+ - null
1761
+ - null
1762
+ pair_names: null
1763
+ pair_ids: !!python/object/apply:builtins.slice
1764
+ - null
1765
+ - null
1766
+ - null
1767
+ preserve_order: false
1768
+ weight: -0.05
1769
+ angular_momentum:
1770
+ func: !!python/name:mjlab.tasks.velocity.mdp.rewards.angular_momentum_penalty ''
1771
+ params:
1772
+ sensor_name: robot/root_angmom
1773
+ weight: -0.02
1774
+ dof_pos_limits:
1775
+ func: !!python/name:mjlab.envs.mdp.rewards.joint_pos_limits ''
1776
+ params: {}
1777
+ weight: -1.0
1778
+ action_rate_l2:
1779
+ func: !!python/name:mjlab.envs.mdp.rewards.action_rate_l2 ''
1780
+ params: {}
1781
+ weight: -0.1
1782
+ ball_forward_velocity:
1783
+ func: !!python/name:mjlab_microduck.tasks.mdp.ball_forward_velocity ''
1784
+ params:
1785
+ asset_name: ball
1786
+ max_speed: 1.0
1787
+ weight: 12.0
1788
+ ball_speed_overshoot:
1789
+ func: !!python/name:mjlab_microduck.tasks.mdp.ball_speed_overshoot_penalty ''
1790
+ params:
1791
+ asset_name: ball
1792
+ target_speed: 1.0
1793
+ weight: -4.0
1794
+ support_foot_grounded:
1795
+ func: !!python/name:mjlab_microduck.tasks.mdp.single_foot_grounded_reward ''
1796
+ params:
1797
+ sensor_name: support_foot_ground_contact
1798
+ weight: 2.0
1799
+ pose_stand_legs:
1800
+ func: &id007 !!python/name:mjlab_microduck.tasks.mdp.pose_target_match ''
1801
+ params:
1802
+ std: 0.5
1803
+ joint_indices:
1804
+ - 0
1805
+ - 1
1806
+ - 2
1807
+ - 3
1808
+ - 4
1809
+ - 9
1810
+ - 10
1811
+ - 11
1812
+ - 12
1813
+ - 13
1814
+ target_overrides: null
1815
+ weight: 2.0
1816
+ pose_stand_neck:
1817
+ func: *id007
1818
+ params:
1819
+ std: 0.3
1820
+ joint_indices:
1821
+ - 5
1822
+ - 6
1823
+ - 7
1824
+ - 8
1825
+ target_overrides: null
1826
+ weight: 1.0
1827
+ height_stand:
1828
+ func: !!python/name:mjlab_microduck.tasks.mdp.height_target_gaussian ''
1829
+ params:
1830
+ std: 0.04
1831
+ target_height: 0.115
1832
+ asset_cfg:
1833
+ name: robot
1834
+ joint_names: null
1835
+ joint_ids: !!python/object/apply:builtins.slice
1836
+ - null
1837
+ - null
1838
+ - null
1839
+ body_names: !!python/tuple
1840
+ - trunk_base
1841
+ body_ids: !!python/object/apply:builtins.slice
1842
+ - null
1843
+ - null
1844
+ - null
1845
+ geom_names: null
1846
+ geom_ids: !!python/object/apply:builtins.slice
1847
+ - null
1848
+ - null
1849
+ - null
1850
+ site_names: null
1851
+ site_ids: !!python/object/apply:builtins.slice
1852
+ - null
1853
+ - null
1854
+ - null
1855
+ actuator_names: null
1856
+ actuator_ids: !!python/object/apply:builtins.slice
1857
+ - null
1858
+ - null
1859
+ - null
1860
+ tendon_names: null
1861
+ tendon_ids: !!python/object/apply:builtins.slice
1862
+ - null
1863
+ - null
1864
+ - null
1865
+ camera_names: null
1866
+ camera_ids: !!python/object/apply:builtins.slice
1867
+ - null
1868
+ - null
1869
+ - null
1870
+ light_names: null
1871
+ light_ids: !!python/object/apply:builtins.slice
1872
+ - null
1873
+ - null
1874
+ - null
1875
+ material_names: null
1876
+ material_ids: !!python/object/apply:builtins.slice
1877
+ - null
1878
+ - null
1879
+ - null
1880
+ pair_names: null
1881
+ pair_ids: !!python/object/apply:builtins.slice
1882
+ - null
1883
+ - null
1884
+ - null
1885
+ preserve_order: false
1886
+ weight: 1.0
1887
+ self_collisions:
1888
+ func: !!python/name:mjlab.tasks.velocity.mdp.rewards.self_collision_cost ''
1889
+ params:
1890
+ sensor_name: self_collision
1891
+ weight: -1.0
1892
+ terminations:
1893
+ time_out:
1894
+ func: !!python/name:mjlab.envs.mdp.terminations.time_out ''
1895
+ params: {}
1896
+ time_out: true
1897
+ fell_over:
1898
+ func: !!python/name:mjlab.envs.mdp.terminations.bad_orientation ''
1899
+ params:
1900
+ limit_angle: 1.2217304763960306
1901
+ time_out: false
1902
+ out_of_terrain_bounds:
1903
+ func: !!python/name:mjlab.tasks.velocity.mdp.terminations.out_of_terrain_bounds ''
1904
+ params: {}
1905
+ time_out: true
1906
+ nan_state:
1907
+ func: !!python/name:mjlab_microduck.tasks.mdp.robot_state_is_nan ''
1908
+ params: {}
1909
+ time_out: false
1910
+ commands:
1911
+ twist:
1912
+ resampling_time_range: !!python/tuple
1913
+ - 5.0
1914
+ - 10.0
1915
+ debug_vis: false
1916
+ entity_name: robot
1917
+ heading_command: false
1918
+ heading_control_stiffness: 0.5
1919
+ rel_standing_envs: 0.0
1920
+ rel_heading_envs: 0.0
1921
+ rel_world_envs: 0.0
1922
+ rel_forward_envs: 0.2
1923
+ init_velocity_prob: 0.0
1924
+ ranges:
1925
+ lin_vel_x: !!python/tuple
1926
+ - -0.01
1927
+ - 0.01
1928
+ lin_vel_y: !!python/tuple
1929
+ - -0.01
1930
+ - 0.01
1931
+ ang_vel_z: !!python/tuple
1932
+ - -0.05
1933
+ - 0.05
1934
+ heading: null
1935
+ viz:
1936
+ z_offset: 0.2
1937
+ scale: 0.5
1938
+ rel_turn_in_place_envs: 0.0
1939
+ curriculum:
1940
+ action_rate_weight:
1941
+ func: !!python/name:mjlab_microduck.tasks.mdp.reward_weight ''
1942
+ params:
1943
+ reward_name: action_rate_l2
1944
+ weight_stages:
1945
+ - step: 0
1946
+ weight: -0.1
1947
+ - step: 12000
1948
+ weight: -0.2
1949
+ - step: 18000
1950
+ weight: -0.4
1951
+ - step: 24000
1952
+ weight: -0.6
1953
+ - step: 30000
1954
+ weight: -0.8
1955
+ - step: 36000
1956
+ weight: -1.0
1957
+ com_range:
1958
+ func: &id008 !!python/name:mjlab_microduck.tasks.mdp.com_range_curriculum ''
1959
+ params:
1960
+ event_name: randomize_com
1961
+ range_stages:
1962
+ - step: 0
1963
+ range: 0.003
1964
+ - step: 12000
1965
+ range: 0.005
1966
+ - step: 24000
1967
+ range: 0.01
1968
+ - step: 36000
1969
+ range: 0.015
1970
+ head_com_range:
1971
+ func: *id008
1972
+ params:
1973
+ event_name: randomize_head_com
1974
+ range_stages:
1975
+ - step: 0
1976
+ range: 0.003
1977
+ - step: 12000
1978
+ range: 0.005
1979
+ - step: 24000
1980
+ range: 0.01
1981
+ push_magnitude:
1982
+ func: !!python/name:mjlab_microduck.tasks.mdp.push_curriculum ''
1983
+ params:
1984
+ event_name: push_robot
1985
+ push_stages:
1986
+ - step: 0
1987
+ velocity_range:
1988
+ x: !!python/tuple
1989
+ - 0.0
1990
+ - 0.0
1991
+ y: !!python/tuple
1992
+ - 0.0
1993
+ - 0.0
1994
+ - step: 12000
1995
+ velocity_range:
1996
+ x: !!python/tuple
1997
+ - -0.08
1998
+ - 0.08
1999
+ y: !!python/tuple
2000
+ - -0.08
2001
+ - 0.08
2002
+ - step: 24000
2003
+ velocity_range:
2004
+ x: !!python/tuple
2005
+ - -0.3
2006
+ - 0.3
2007
+ y: !!python/tuple
2008
+ - -0.3
2009
+ - 0.3
2010
+ metrics:
2011
+ mean_action_acc:
2012
+ func: !!python/name:mjlab.envs.mdp.metrics.mean_action_acc ''
2013
+ params: {}
2014
+ per_substep: false
2015
+ reduce: mean
2016
+ recorders: {}
2017
+ is_finite_horizon: false
2018
+ auto_reset: true
2019
+ scale_rewards_by_dt: true
base/model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0134e16c4cb94d1cdf998d6a14c15814a019db12e20badf70d42c52af3340a98
3
+ size 4868213
clip.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "video": "video.mp4",
3
+ "poster": "poster.jpg",
4
+ "fps": 25,
5
+ "seconds": 3.0,
6
+ "width": 640,
7
+ "height": 480,
8
+ "n_frames": 75,
9
+ "bytes": 75952,
10
+ "poster_bytes": 14812,
11
+ "boot_s": 1.56,
12
+ "render_s": 4.29,
13
+ "ms_per_frame": 57.3,
14
+ "encode_s": 0.18,
15
+ "codec": "h264",
16
+ "renderer": "chromium-webgl",
17
+ "t0": 0,
18
+ "trail": false,
19
+ "source_duration": 2.98,
20
+ "page_errors": [],
21
+ "poster_t": 0.3
22
+ }
fidelity.json ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "takes": {
3
+ "kick": {
4
+ "trained": {
5
+ "final_upright": true,
6
+ "max_tilt": 0.261,
7
+ "base_z_mean": 0.1149,
8
+ "base_z_min": 0.1106,
9
+ "ball_travel_m": 0.338,
10
+ "ball_travel_x_m": 0.338,
11
+ "ball_travel_y_m": -0.017,
12
+ "ball_peak_speed_m_s": 0.477,
13
+ "upright_at_0_5s": true,
14
+ "tilt_at_0_5s": 0.027
15
+ },
16
+ "pollen": {
17
+ "final_upright": true,
18
+ "max_tilt": 0.261,
19
+ "base_z_mean": 0.1141,
20
+ "base_z_min": 0.1125,
21
+ "ball_travel_m": 0.326,
22
+ "ball_travel_x_m": 0.326,
23
+ "ball_travel_y_m": 0.018,
24
+ "ball_peak_speed_m_s": 0.503,
25
+ "upright_at_0_5s": true,
26
+ "tilt_at_0_5s": 0.008
27
+ }
28
+ }
29
+ },
30
+ "pollen_policy": "pollen-robotics/microduck-policies#ball_kick_right.onnx",
31
+ "recorder": "space/payload/render/rollout.py",
32
+ "scenes": "the upstream robot MJCF at timestep 0.005 (spikes/base_moves/fidelity.py)"
33
+ }
manifest.json ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 2,
3
+ "model_api": 1,
4
+ "obs_len": 61,
5
+ "action_len": 14,
6
+ "robot": {
7
+ "model": "microduck",
8
+ "hw_rev": 1,
9
+ "servos": "xl330",
10
+ "control_hz": 50
11
+ },
12
+ "name": "Kick (right foot)",
13
+ "kind": "episodic",
14
+ "entry_pose": "standing",
15
+ "description": "Pollen Robotics' kick: a 0.5 s right-foot kick at a ball placed in front of the foot, then back to the walk.",
16
+ "command": {
17
+ "encoding": "constant",
18
+ "idle": [
19
+ 0.0,
20
+ 0.0,
21
+ 0.0
22
+ ],
23
+ "twist": "unused (zeros)",
24
+ "head": "unused (zeros)",
25
+ "body": "unused (zeros)"
26
+ },
27
+ "duration_s": 0.5,
28
+ "chain": false,
29
+ "training": {
30
+ "repo": "pollen-robotics/microduck_rl",
31
+ "commit": "2b25a48",
32
+ "task": "Mjlab-BallKick-Flat-MicroDuck",
33
+ "iterations": 3999,
34
+ "num_envs": 4096,
35
+ "source_file": "policy.onnx",
36
+ "trained_by": "microduck-academy (spikes/base_moves)"
37
+ },
38
+ "slot": "kick_right",
39
+ "judge_score": null,
40
+ "vlm": null,
41
+ "score": null,
42
+ "battery": null,
43
+ "rollouts": [
44
+ {
45
+ "k": 0,
46
+ "primary": true,
47
+ "take": "showcase",
48
+ "duration_s": 3.0,
49
+ "chain": [
50
+ [
51
+ 0.5,
52
+ "tfrere/microduck-move-base-walk"
53
+ ]
54
+ ],
55
+ "scene": "scenes/scene_ball.xml"
56
+ }
57
+ ],
58
+ "checkpoints": [],
59
+ "video": "video.mp4",
60
+ "poster": "poster.jpg",
61
+ "clip": {
62
+ "renderer": "chromium-webgl",
63
+ "fps": 25,
64
+ "seconds": 3.0,
65
+ "width": 640,
66
+ "height": 480,
67
+ "t0": 0,
68
+ "rendered_at": 1789420176
69
+ },
70
+ "academy": {
71
+ "origin": "pollen-upstream",
72
+ "official": true,
73
+ "author_label": "Pollen Robotics",
74
+ "author_hub": "pollen-robotics",
75
+ "author": "tfrere",
76
+ "source_task": "Mjlab-BallKick-Flat-MicroDuck",
77
+ "source_policy": "pollen-robotics/microduck-policies#ball_kick_right.onnx",
78
+ "family": "ballkick",
79
+ "kind": "trick",
80
+ "tier": 1,
81
+ "mode": "train",
82
+ "prompt": "Kick (right foot)",
83
+ "objective": "Pollen Robotics' kick: a 0.5 s right-foot kick at a ball placed in front of the foot, then back to the walk.",
84
+ "intents": [],
85
+ "judge": {
86
+ "score": null,
87
+ "pass": null,
88
+ "numbers": {
89
+ "final_upright": true,
90
+ "max_tilt": 0.261,
91
+ "base_z_mean": 0.1149,
92
+ "base_z_min": 0.1106,
93
+ "ball_travel_m": 0.338,
94
+ "ball_travel_x_m": 0.338,
95
+ "ball_travel_y_m": -0.017,
96
+ "ball_peak_speed_m_s": 0.477,
97
+ "upright_at_0_5s": true,
98
+ "tilt_at_0_5s": 0.027
99
+ }
100
+ },
101
+ "rounds": [],
102
+ "lineage": [],
103
+ "remix_from": null,
104
+ "session": null,
105
+ "run_repo": "tfrere/microduck-base-kick-right-train",
106
+ "shipped_round": null,
107
+ "checkpoint_iter": 3999,
108
+ "upstream_sha": "2b25a48",
109
+ "training": {
110
+ "move": "kick-right",
111
+ "task": "Mjlab-BallKick-Flat-MicroDuck",
112
+ "iters": 4000,
113
+ "checkpoint_iter": 3999,
114
+ "checkpoint": "ball_kick_right/2026-09-14_15-50-37_ball_kick_right/model_3999.pt",
115
+ "upstream_sha": "2b25a48",
116
+ "upstream_repo": "pollen-robotics/microduck_rl",
117
+ "num_envs": 4096,
118
+ "job_id": "6aa8175cf76d6a098a708bc4",
119
+ "accelerator": "gpu",
120
+ "finished_at": 1789409672.5522425,
121
+ "flavor": "a100-large",
122
+ "run_minutes": 145.5,
123
+ "cost_usd": 6.06,
124
+ "staging_repo": "tfrere/microduck-base-kick-right-train",
125
+ "launcher": "spikes/base_moves/base_move_job.py"
126
+ },
127
+ "fidelity": {
128
+ "takes": {
129
+ "kick": {
130
+ "trained": {
131
+ "final_upright": true,
132
+ "max_tilt": 0.261,
133
+ "base_z_mean": 0.1149,
134
+ "base_z_min": 0.1106,
135
+ "ball_travel_m": 0.338,
136
+ "ball_travel_x_m": 0.338,
137
+ "ball_travel_y_m": -0.017,
138
+ "ball_peak_speed_m_s": 0.477,
139
+ "upright_at_0_5s": true,
140
+ "tilt_at_0_5s": 0.027
141
+ },
142
+ "pollen": {
143
+ "final_upright": true,
144
+ "max_tilt": 0.261,
145
+ "base_z_mean": 0.1141,
146
+ "base_z_min": 0.1125,
147
+ "ball_travel_m": 0.326,
148
+ "ball_travel_x_m": 0.326,
149
+ "ball_travel_y_m": 0.018,
150
+ "ball_peak_speed_m_s": 0.503,
151
+ "upright_at_0_5s": true,
152
+ "tilt_at_0_5s": 0.008
153
+ }
154
+ }
155
+ },
156
+ "pollen_policy": "pollen-robotics/microduck-policies#ball_kick_right.onnx",
157
+ "recorder": "space/payload/render/rollout.py",
158
+ "scenes": "the upstream robot MJCF at timestep 0.005 (spikes/base_moves/fidelity.py)"
159
+ },
160
+ "remixable": true,
161
+ "remix_checkpoint": "base/model.pt",
162
+ "shipped_at": 1789420176.164145
163
+ }
164
+ }
policy.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:819caece88b3059e36f0549f59e463aa5bfcf0adf957fce9149abc5e629397d8
3
+ size 793758
poster.jpg ADDED
rollouts/0.traj ADDED
Binary file (21.1 kB). View file
 
train.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "move": "kick-right",
3
+ "task": "Mjlab-BallKick-Flat-MicroDuck",
4
+ "iters": 4000,
5
+ "checkpoint_iter": 3999,
6
+ "checkpoint": "ball_kick_right/2026-09-14_15-50-37_ball_kick_right/model_3999.pt",
7
+ "upstream_sha": "2b25a48",
8
+ "upstream_repo": "pollen-robotics/microduck_rl",
9
+ "num_envs": 4096,
10
+ "job_id": "6aa8175cf76d6a098a708bc4",
11
+ "accelerator": "gpu",
12
+ "finished_at": 1789409672.5522425,
13
+ "flavor": "a100-large",
14
+ "run_minutes": 145.5,
15
+ "cost_usd": 6.06,
16
+ "staging_repo": "tfrere/microduck-base-kick-right-train",
17
+ "launcher": "spikes/base_moves/base_move_job.py"
18
+ }
video.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "video": "video.mp4",
3
+ "poster": "poster.jpg",
4
+ "fps": 25,
5
+ "seconds": 3.0,
6
+ "width": 640,
7
+ "height": 480,
8
+ "n_frames": 75,
9
+ "bytes": 75952,
10
+ "poster_bytes": 14812,
11
+ "boot_s": 1.56,
12
+ "render_s": 4.29,
13
+ "ms_per_frame": 57.3,
14
+ "encode_s": 0.18,
15
+ "codec": "h264",
16
+ "renderer": "chromium-webgl",
17
+ "t0": 0,
18
+ "trail": false,
19
+ "source_duration": 2.98,
20
+ "page_errors": [],
21
+ "poster_t": 0.3
22
+ }
video.mp4 ADDED
Binary file (76 kB). View file