Zhengyiluo commited on
Commit
7c90a56
·
verified ·
1 Parent(s): 5e22ddc

Add heading and wrist teleoperation checkpoint

Browse files
README.md CHANGED
@@ -137,7 +137,19 @@ SONIC includes a kinematic planner for real-time locomotion generation — choos
137
 
138
  ## Model Checkpoints
139
 
140
- All checkpoints (ONNX format) are available directly in this repository. Inference is powered by TensorRT and runs on both desktop and Jetson hardware.
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
  | Checkpoint | File | Description |
143
  |---|---|---|
@@ -146,6 +158,8 @@ All checkpoints (ONNX format) are available directly in this repository. Inferen
146
  | Kinematic planner | `planner_sonic.onnx` | Real-time locomotion style planner |
147
  | Low-latency policy | `low_latency/model_encoder.onnx`, `low_latency/model_decoder.onnx`, `low_latency/observation_config.yaml` | Reduced-lookahead G1 controller variant |
148
  | Low-latency PyTorch checkpoint | `low_latency/last.pt` | Training checkpoint and config for the low-latency variant |
 
 
149
 
150
  **Quick download** (requires `pip install huggingface_hub`):
151
 
@@ -160,10 +174,34 @@ Or use the download script from the GitHub repo:
160
  python download_from_hf.py # policy + planner (default)
161
  python download_from_hf.py --no-planner # policy only
162
  python download_from_hf.py --low-latency # low-latency policy + planner
 
163
  ```
164
 
165
  See the [Download Models guide](https://nvlabs.github.io/GR00T-WholeBodyControl/getting_started/download_models.html) for full instructions.
166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  ## Low-Latency Inference
168
 
169
  The low-latency SONIC variant is stored under `low_latency/` and does not
 
137
 
138
  ## Model Checkpoints
139
 
140
+ The repository provides three Unitree G1 controller variants. Each ONNX
141
+ encoder must be used with the decoder and observation config from the same
142
+ variant.
143
+
144
+ | Model | Location | SMPL reference input | Intended use and comments |
145
+ |---|---|---|---|
146
+ | **Default SONIC (original release)** | Top-level deployment files; PyTorch checkpoint under `sonic_release/` | 10 frames at 20 ms spacing, approximately 200 ms | General-purpose motion tracking, planning, and teleoperation. G1 and teleoperation references use `step5`. |
147
+ | **Low-latency teleoperation** | `low_latency/` | 4 frames at 20 ms spacing, approximately 80 ms | Reduced-reference-lookahead controller for responsive teleoperation and VLA execution. G1 and teleoperation references use `step1`. |
148
+ | **Heading/wrist teleoperation** | `heading_wrist/` | 10 frames at 20 ms spacing, approximately 200 ms | Robot-heading-normalized controller trained with wrist-pose augmentation for heading-stable 3-point teleoperation and SONIC-backed VLA policies. G1 and teleoperation references use `step5`; this is not the low-latency model. |
149
+
150
+ All variants use 64-dimensional universal motion tokens and a 29-DoF action
151
+ decoder. Inference is powered by TensorRT and runs on both desktop and Jetson
152
+ hardware.
153
 
154
  | Checkpoint | File | Description |
155
  |---|---|---|
 
158
  | Kinematic planner | `planner_sonic.onnx` | Real-time locomotion style planner |
159
  | Low-latency policy | `low_latency/model_encoder.onnx`, `low_latency/model_decoder.onnx`, `low_latency/observation_config.yaml` | Reduced-lookahead G1 controller variant |
160
  | Low-latency PyTorch checkpoint | `low_latency/last.pt` | Training checkpoint and config for the low-latency variant |
161
+ | Heading/wrist policy | `heading_wrist/model_encoder.onnx`, `heading_wrist/model_decoder.onnx`, `heading_wrist/observation_config.yaml` | Heading-normalized G1 controller variant |
162
+ | Heading/wrist PyTorch checkpoint | `heading_wrist/last.pt` | Training checkpoint and configs for the heading/wrist variant |
163
 
164
  **Quick download** (requires `pip install huggingface_hub`):
165
 
 
174
  python download_from_hf.py # policy + planner (default)
175
  python download_from_hf.py --no-planner # policy only
176
  python download_from_hf.py --low-latency # low-latency policy + planner
177
+ python download_from_hf.py --heading-wrist # heading/wrist policy + planner
178
  ```
179
 
180
  See the [Download Models guide](https://nvlabs.github.io/GR00T-WholeBodyControl/getting_started/download_models.html) for full instructions.
181
 
182
+ ## Heading/Wrist Inference
183
+
184
+ The `heading_wrist/` variant uses robot-heading-normalized target orientation
185
+ and a 10-frame SMPL/wrist reference horizon. It was trained with wrist-pose
186
+ augmentation and is intended for 3-point teleoperation and SONIC-backed VLA
187
+ policies trained against this controller.
188
+
189
+ ```bash
190
+ git clone https://github.com/NVlabs/GR00T-WholeBodyControl.git
191
+ cd GR00T-WholeBodyControl
192
+ pip install huggingface_hub
193
+ python download_from_hf.py --heading-wrist
194
+
195
+ cd gear_sonic_deploy
196
+ ./deploy.sh \
197
+ --cp policy/heading_wrist/model \
198
+ --obs-config policy/heading_wrist/observation_config.yaml \
199
+ sim
200
+ ```
201
+
202
+ For the Python VLA launcher, pass the same two paths with
203
+ `--deploy-checkpoint` and `--deploy-obs-config`.
204
+
205
  ## Low-Latency Inference
206
 
207
  The low-latency SONIC variant is stored under `low_latency/` and does not
heading_wrist/config.yaml ADDED
@@ -0,0 +1,946 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ num_gpus: 1
2
+ max_retries: 1
3
+ seed: 0
4
+ codebase_version: 1.0
5
+ headless: true
6
+ num_envs: 4096
7
+ auto_load_latest: false
8
+ checkpoint: logs_rl/TRL_G1_Track/manager/universal_token/all_modes/sonic_release_3pt_heading_wrist_81-20260415_051436/last.pt
9
+ project_name: TRL_G1_Track
10
+ experiment_name: ${exp_base}_${exp_var}
11
+ base_dir: logs_rl
12
+ timestamp: ${now:%Y%m%d_%H%M%S}
13
+ experiment_dir: logs_rl/TRL_G1_Track/manager/universal_token/all_modes/sonic_release_3pt_heading_wrist_81-20260415_051436
14
+ save_dir: ${experiment_dir}/.hydra
15
+ force_flat_terrain: false
16
+ use_wandb: true
17
+ log_task_name: TEST
18
+ multi_gpu: true
19
+ global_rank: 0
20
+ sim_type: isaacsim
21
+ env_spacing: 20
22
+ output_dir: ${experiment_dir}/output
23
+ eval_overrides:
24
+ headless: false
25
+ num_envs: 1
26
+ auto_load_latest: false
27
+ use_wandb: false
28
+ algo:
29
+ trl:
30
+ dataset_name: dummy
31
+ output_dir: logs_rl/TRL_G1_Track/manager/universal_token/all_modes/sonic_release_3pt_heading_wrist_81-20260415_051436
32
+ learning_rate: ${algo.config.actor_learning_rate}
33
+ num_total_batches: ${algo.config.num_learning_iterations}
34
+ total_episodes: null
35
+ num_ppo_epochs: ${algo.config.num_learning_epochs}
36
+ num_mini_batches: ${algo.config.num_mini_batches}
37
+ per_device_train_batch_size: null
38
+ gradient_accumulation_steps: 1
39
+ report_to: none
40
+ gamma: ${algo.config.gamma}
41
+ lam: ${algo.config.lam}
42
+ vf_coef: ${algo.config.value_loss_coef}
43
+ max_grad_norm: ${algo.config.max_grad_norm}
44
+ lr_scheduler_type: constant
45
+ save_strategy: 'no'
46
+ disable_tqdm: true
47
+ config:
48
+ critic:
49
+ _target_: groot.rl.trl.modules.actor_critic_modules.Critic
50
+ running_mean_std: true
51
+ backbone:
52
+ _target_: groot.rl.trl.modules.base_module.BaseModule
53
+ process_output_dim: true
54
+ module_config_dict:
55
+ type: MLP
56
+ input_dim:
57
+ - critic_obs
58
+ output_dim:
59
+ - 1
60
+ layer_config:
61
+ type: MLP
62
+ hidden_dims:
63
+ - 4096
64
+ - 4096
65
+ - 2048
66
+ - 2048
67
+ - 1024
68
+ - 1024
69
+ - 512
70
+ - 512
71
+ activation: SiLU
72
+ actor:
73
+ backbone:
74
+ quantizer:
75
+ _target_: vector_quantize_pytorch.FSQ
76
+ encoders:
77
+ g1:
78
+ inputs:
79
+ - command_multi_future_nonflat
80
+ - motion_anchor_ori_heading_mf_nonflat
81
+ params:
82
+ _target_: groot.rl.trl.modules.base_module.BaseModule
83
+ input_dim: null
84
+ output_dim: null
85
+ num_input_temporal_dims: ${manager_env.commands.motion.num_future_frames}
86
+ num_output_temporal_dims: ${algo.config.actor.backbone.max_num_tokens}
87
+ module_config_dict:
88
+ layer_config:
89
+ type: MLP
90
+ hidden_dims:
91
+ - 2048
92
+ - 1024
93
+ - 512
94
+ - 512
95
+ activation: SiLU
96
+ teleop:
97
+ inputs:
98
+ - command_multi_future_lower_body
99
+ - vr_3point_local_target
100
+ - vr_3point_local_orn_target
101
+ - motion_anchor_ori_heading
102
+ params:
103
+ _target_: groot.rl.trl.modules.base_module.BaseModule
104
+ input_dim: null
105
+ output_dim: null
106
+ num_input_temporal_dims: null
107
+ num_output_temporal_dims: ${algo.config.actor.backbone.max_num_tokens}
108
+ module_config_dict:
109
+ layer_config:
110
+ type: MLP
111
+ hidden_dims:
112
+ - 2048
113
+ - 1024
114
+ - 512
115
+ - 512
116
+ activation: SiLU
117
+ smpl:
118
+ inputs:
119
+ - smpl_joints_multi_future_local_nonflat
120
+ - smpl_root_ori_heading_multi_future
121
+ - joint_pos_multi_future_wrist_for_smpl
122
+ params:
123
+ _target_: groot.rl.trl.modules.base_module.BaseModule
124
+ input_dim: null
125
+ output_dim: null
126
+ num_input_temporal_dims: ${manager_env.commands.motion.smpl_num_future_frames}
127
+ num_output_temporal_dims: ${algo.config.actor.backbone.max_num_tokens}
128
+ module_config_dict:
129
+ layer_config:
130
+ type: MLP
131
+ hidden_dims:
132
+ - 2048
133
+ - 1024
134
+ - 512
135
+ - 512
136
+ activation: SiLU
137
+ decoders:
138
+ g1_dyn:
139
+ inputs:
140
+ - token_flattened
141
+ - proprioception
142
+ outputs:
143
+ - action
144
+ has_temporal_dim: false
145
+ params:
146
+ _target_: groot.rl.trl.modules.base_module.BaseModule
147
+ input_dim: null
148
+ output_dim: null
149
+ num_input_temporal_dims: null
150
+ num_output_temporal_dims: null
151
+ module_config_dict:
152
+ layer_config:
153
+ type: MLP
154
+ hidden_dims:
155
+ - 4096
156
+ - 4096
157
+ - 2048
158
+ - 2048
159
+ - 1024
160
+ - 1024
161
+ - 512
162
+ - 512
163
+ activation: SiLU
164
+ g1_kin:
165
+ inputs:
166
+ - token
167
+ outputs:
168
+ - command_multi_future_nonflat
169
+ - motion_anchor_ori_heading_mf_nonflat
170
+ has_temporal_dim: true
171
+ params:
172
+ _target_: groot.rl.trl.modules.base_module.BaseModule
173
+ input_dim: null
174
+ output_dim: null
175
+ num_input_temporal_dims: ${algo.config.actor.backbone.max_num_tokens}
176
+ num_output_temporal_dims: ${manager_env.commands.motion.num_future_frames}
177
+ module_config_dict:
178
+ layer_config:
179
+ type: MLP
180
+ hidden_dims:
181
+ - 2048
182
+ - 1024
183
+ - 512
184
+ - 512
185
+ activation: SiLU
186
+ _target_: groot.rl.trl.modules.universal_token_modules.UniversalTokenModule
187
+ num_future_frames: ${manager_env.commands.motion.num_future_frames}
188
+ proprioception_features:
189
+ - actor_obs
190
+ encoder_sample_probs: ${manager_env.commands.motion.encoder_sample_probs}
191
+ num_fsq_levels: 32
192
+ fsq_level_list: 32
193
+ max_num_tokens: 2
194
+ aux_loss_func:
195
+ g1_recon:
196
+ _target_: groot.rl.trl.losses.token_losses.G1ReconLoss
197
+ loss_type: mse
198
+ g1_smpl_latent:
199
+ _target_: groot.rl.trl.losses.token_losses.G1SmplLatentLoss
200
+ loss_type: mse
201
+ g1_teleop_latent:
202
+ _target_: groot.rl.trl.losses.token_losses.G1TeleopLatentLoss
203
+ loss_type: mse
204
+ teleop_smpl_latent:
205
+ _target_: groot.rl.trl.losses.token_losses.TeleopSmplLatentLoss
206
+ loss_type: mse
207
+ detach_teleop_target: true
208
+ reencoded_smpl_g1_latent:
209
+ _target_: groot.rl.trl.losses.token_losses.ReencodedSmplG1LatentLoss
210
+ loss_type: mse
211
+ aux_loss_coef:
212
+ g1_recon: 0.01
213
+ g1_smpl_latent: 1.0
214
+ g1_teleop_latent: 1.0
215
+ teleop_smpl_latent: 1.0
216
+ reencoded_smpl_g1_latent: 1.0
217
+ reencode_smpl_g1_recon: true
218
+ _target_: groot.rl.trl.modules.actor_critic_modules.Actor
219
+ running_mean_std: false
220
+ input_obs_dict: true
221
+ has_aux_loss: true
222
+ num_learning_epochs: 5
223
+ num_mini_batches: 4
224
+ clip_param: 0.2
225
+ gamma: 0.99
226
+ lam: 0.95
227
+ value_loss_coef: 1.0
228
+ entropy_coef: 0.01
229
+ actor_learning_rate: 2.0e-05
230
+ critic_learning_rate: 0.001
231
+ max_grad_norm: 0.1
232
+ use_clipped_value_loss: true
233
+ schedule: adaptive
234
+ desired_kl: 0.01
235
+ adaptive_lr_min: 1.0e-05
236
+ adaptive_lr_max: 0.0002
237
+ use_new_actor_critic: true
238
+ use_padding_mask: false
239
+ ppo_shuffle_every_epoch: true
240
+ sync_advantage_normalization: true
241
+ empty_cache_every_n_ppo_epoch: -1
242
+ num_steps_per_env: 24
243
+ save_interval: 500
244
+ eval_frequency: 500
245
+ load_optimizer: true
246
+ init_noise_std: 0.05
247
+ num_learning_iterations: 100000
248
+ init_at_random_ep_len: true
249
+ eval_callbacks:
250
+ analysis_plot_cb:
251
+ _target_: groot.rl.agents.callbacks.analysis_plot_motion_tracking.AnalysisPlotMotionTracking
252
+ config:
253
+ sim_dt: 0.02
254
+ log_single_robot: false
255
+ plot_update_interval: 100
256
+ compute_metrics: true
257
+ use_weblogger: false
258
+ global_rank: 0
259
+ world_size: 128
260
+ use_clampped_std: true
261
+ std_clamp_min: 0.001
262
+ std_clamp_max: 0.5
263
+ _target_: groot.rl.agents.ppo.ppo_im.PPOIM
264
+ _recursive_: false
265
+ env: ???
266
+ terrain: ???
267
+ callbacks:
268
+ model_save:
269
+ _target_: groot.rl.trl.callbacks.model_save_callback.ModelSaveCallback
270
+ save_dir: ${experiment_dir}
271
+ save_frequency: 2000
272
+ max_disk_usage: 14.8
273
+ wandb:
274
+ _target_: groot.rl.trl.callbacks.wandb_callback.WandbCallback
275
+ read_eval:
276
+ _target_: groot.rl.trl.callbacks.read_eval_callback.ReadEvalCallback
277
+ eval_dir: ${experiment_dir}/eval
278
+ check_interval: 1
279
+ im_resample:
280
+ _target_: groot.rl.trl.callbacks.im_resample_callback.ImResampleCallback
281
+ motion_resample_frequency: 250
282
+ trainer:
283
+ _target_: groot.rl.trl.trainer.ppo_trainer_aux_loss.TRLAuxLossPPOTrainer
284
+ wandb:
285
+ wandb_project: null
286
+ wandb_tags: online
287
+ wandb_group: zen_heading_0223
288
+ wandb_id: jbpdpb7r
289
+ wandb_entity: null
290
+ wandb_dir: /tmp
291
+ manager_env:
292
+ commands:
293
+ motion:
294
+ encoder_sample_probs:
295
+ g1: 1.0
296
+ teleop: 1.0
297
+ smpl: 1.0
298
+ _target_: groot.rl.envs.manager_env.mdp.commands.TrackingCommandCfg
299
+ asset_name: robot
300
+ motion_lib_cfg:
301
+ motion_file:
302
+ - ${shared_dir}/wbc_data/training_mixes/train_pyroki_v081_0414_26/
303
+ smpl_motion_file:
304
+ - ${shared_dir}/wbc_data/smpl_retarget/1215/
305
+ asset:
306
+ assetRoot: groot/rl/data/assets/bm/unitree_description/mjcf/
307
+ assetFileName: g1_29dof_rev_1_0.xml
308
+ urdfFileName: ''
309
+ extend_config: []
310
+ target_fps: 50
311
+ multi_thread: true
312
+ filter_motion_keys: null
313
+ adaptive_sampling:
314
+ enable: true
315
+ bin_size: 50
316
+ sequence_length_agnostic: true
317
+ init_num_failures: 1
318
+ uniform_sampling_rate: 0.1
319
+ pre_failure_sample_window: 200
320
+ use_failure_rate_decay: false
321
+ decay_gamma: 0.8
322
+ adp_samp_failure_rate_max_over_mean: 200
323
+ upper_body_augment_prefixes:
324
+ - '2025'
325
+ - sonic_mixed_walking_running
326
+ - sonic_squating_different_height_switching
327
+ - sonic_running
328
+ - sonic_walking
329
+ - sonic_squating_different_height_hold
330
+ - sonic_walking_other_style
331
+ - balance
332
+ smpl_y_up: true
333
+ resampling_time_range:
334
+ - 1000000000.0
335
+ - 1000000000.0
336
+ debug_vis: true
337
+ dt_future_ref_frames: 0.1
338
+ num_future_frames: 10
339
+ pose_range:
340
+ x:
341
+ - -0.05
342
+ - 0.05
343
+ 'y':
344
+ - -0.05
345
+ - 0.05
346
+ z:
347
+ - -0.01
348
+ - 0.01
349
+ roll:
350
+ - -0.1
351
+ - 0.1
352
+ pitch:
353
+ - -0.1
354
+ - 0.1
355
+ yaw:
356
+ - -0.2
357
+ - 0.2
358
+ velocity_range:
359
+ x:
360
+ - -0.5
361
+ - 0.5
362
+ 'y':
363
+ - -0.5
364
+ - 0.5
365
+ z:
366
+ - -0.2
367
+ - 0.2
368
+ roll:
369
+ - -0.52
370
+ - 0.52
371
+ pitch:
372
+ - -0.52
373
+ - 0.52
374
+ yaw:
375
+ - -0.78
376
+ - 0.78
377
+ joint_position_range:
378
+ - -0.1
379
+ - 0.1
380
+ joint_velocity_range:
381
+ - 0
382
+ - 0
383
+ anchor_body: pelvis
384
+ vr_3point_body:
385
+ - left_wrist_yaw_link
386
+ - right_wrist_yaw_link
387
+ - torso_link
388
+ vr_3point_body_offset:
389
+ - - 0.18
390
+ - -0.025
391
+ - 0.0
392
+ - - 0.18
393
+ - 0.025
394
+ - 0.0
395
+ - - 0.0
396
+ - 0.0
397
+ - 0.35
398
+ reward_point_body:
399
+ - torso_link
400
+ - left_wrist_yaw_link
401
+ - right_wrist_yaw_link
402
+ reward_point_body_offset:
403
+ - - 0.0
404
+ - 0.0
405
+ - 0.5
406
+ - - 0.0
407
+ - -0.0
408
+ - 0.0
409
+ - - 0.0
410
+ - -0.0
411
+ - 0.0
412
+ body_names:
413
+ - pelvis
414
+ - left_hip_roll_link
415
+ - left_knee_link
416
+ - left_ankle_roll_link
417
+ - right_hip_roll_link
418
+ - right_knee_link
419
+ - right_ankle_roll_link
420
+ - torso_link
421
+ - left_shoulder_roll_link
422
+ - left_elbow_link
423
+ - left_wrist_yaw_link
424
+ - right_shoulder_roll_link
425
+ - right_elbow_link
426
+ - right_wrist_yaw_link
427
+ smpl_num_future_frames: 10
428
+ smpl_dt_future_ref_frames: 0.02
429
+ cat_upper_body_poses: true
430
+ cat_upper_body_poses_prob: 0.5
431
+ freeze_frame_aug: true
432
+ teleop_sample_prob_when_smpl: 0.5
433
+ randomize_wrist_poses: true
434
+ _target_: groot.rl.envs.manager_env.mdp.commands.CommandsCfg
435
+ actions:
436
+ joint_pos:
437
+ _target_: isaaclab.envs.mdp.actions.JointPositionActionCfg
438
+ asset_name: robot
439
+ joint_names:
440
+ - .*
441
+ use_default_offset: true
442
+ _target_: groot.rl.envs.manager_env.mdp.actions.ActionsCfg
443
+ observations:
444
+ policy:
445
+ gravity_dir:
446
+ _target_: isaaclab.managers.ObservationTermCfg
447
+ func: groot.rl.envs.manager_env.mdp:gravity_dir
448
+ params:
449
+ command_name: motion
450
+ history_length: ${actor_prop_history_length}
451
+ noise:
452
+ _target_: isaaclab.utils.noise.AdditiveUniformNoiseCfg
453
+ n_min: -0.05
454
+ n_max: 0.05
455
+ base_ang_vel:
456
+ _target_: isaaclab.managers.ObservationTermCfg
457
+ func: groot.rl.envs.manager_env.mdp:base_ang_vel
458
+ history_length: ${actor_prop_history_length}
459
+ noise:
460
+ _target_: isaaclab.utils.noise.AdditiveUniformNoiseCfg
461
+ n_min: -0.2
462
+ n_max: 0.2
463
+ joint_pos:
464
+ _target_: isaaclab.managers.ObservationTermCfg
465
+ func: groot.rl.envs.manager_env.mdp:joint_pos_rel
466
+ history_length: ${actor_prop_history_length}
467
+ noise:
468
+ _target_: isaaclab.utils.noise.AdditiveUniformNoiseCfg
469
+ n_min: -0.01
470
+ n_max: 0.01
471
+ joint_vel:
472
+ _target_: isaaclab.managers.ObservationTermCfg
473
+ func: groot.rl.envs.manager_env.mdp:joint_vel_rel
474
+ history_length: ${actor_prop_history_length}
475
+ noise:
476
+ _target_: isaaclab.utils.noise.AdditiveUniformNoiseCfg
477
+ n_min: -0.5
478
+ n_max: 0.5
479
+ actions:
480
+ _target_: isaaclab.managers.ObservationTermCfg
481
+ func: groot.rl.envs.manager_env.mdp:last_action
482
+ history_length: ${actor_actions_history_length}
483
+ _target_: groot.rl.envs.manager_env.mdp.observations.PolicyCfg
484
+ enable_corruption: true
485
+ concatenate_terms: true
486
+ critic:
487
+ command_multi_future:
488
+ _target_: isaaclab.managers.ObservationTermCfg
489
+ func: groot.rl.envs.manager_env.mdp:command_multi_future
490
+ params:
491
+ command_name: motion
492
+ motion_anchor_pos_b:
493
+ _target_: isaaclab.managers.ObservationTermCfg
494
+ func: groot.rl.envs.manager_env.mdp:motion_anchor_pos_b
495
+ params:
496
+ command_name: motion
497
+ motion_anchor_ori_b:
498
+ _target_: isaaclab.managers.ObservationTermCfg
499
+ func: groot.rl.envs.manager_env.mdp:motion_anchor_ori_b
500
+ params:
501
+ command_name: motion
502
+ body_pos:
503
+ _target_: isaaclab.managers.ObservationTermCfg
504
+ func: groot.rl.envs.manager_env.mdp:robot_body_pos_b
505
+ params:
506
+ command_name: motion
507
+ body_ori:
508
+ _target_: isaaclab.managers.ObservationTermCfg
509
+ func: groot.rl.envs.manager_env.mdp:robot_body_ori_b
510
+ params:
511
+ command_name: motion
512
+ base_lin_vel:
513
+ _target_: isaaclab.managers.ObservationTermCfg
514
+ func: groot.rl.envs.manager_env.mdp:base_lin_vel
515
+ history_length: ${critic_prop_history_length}
516
+ base_ang_vel:
517
+ _target_: isaaclab.managers.ObservationTermCfg
518
+ func: groot.rl.envs.manager_env.mdp:base_ang_vel
519
+ history_length: ${critic_prop_history_length}
520
+ joint_pos:
521
+ _target_: isaaclab.managers.ObservationTermCfg
522
+ func: groot.rl.envs.manager_env.mdp:joint_pos_rel
523
+ history_length: ${critic_prop_history_length}
524
+ joint_vel:
525
+ _target_: isaaclab.managers.ObservationTermCfg
526
+ func: groot.rl.envs.manager_env.mdp:joint_vel_rel
527
+ history_length: ${critic_prop_history_length}
528
+ actions:
529
+ _target_: isaaclab.managers.ObservationTermCfg
530
+ func: groot.rl.envs.manager_env.mdp:last_action
531
+ history_length: ${critic_actions_history_length}
532
+ _target_: groot.rl.envs.manager_env.mdp.observations.PrivilegedCfg
533
+ tokenizer:
534
+ encoder_index:
535
+ _target_: isaaclab.managers.ObservationTermCfg
536
+ func: groot.rl.envs.manager_env.mdp:get_command_obs
537
+ params:
538
+ command_name: motion
539
+ obs_name: episode_encoder_index
540
+ command_multi_future_nonflat:
541
+ _target_: isaaclab.managers.ObservationTermCfg
542
+ func: groot.rl.envs.manager_env.mdp:command_multi_future
543
+ params:
544
+ command_name: motion
545
+ non_flatten: true
546
+ command_z_multi_future_nonflat:
547
+ _target_: isaaclab.managers.ObservationTermCfg
548
+ func: groot.rl.envs.manager_env.mdp:command_z_multi_future
549
+ params:
550
+ command_name: motion
551
+ non_flatten: true
552
+ motion_anchor_ori_heading_mf_nonflat:
553
+ _target_: isaaclab.managers.ObservationTermCfg
554
+ func: groot.rl.envs.manager_env.mdp:motion_anchor_ori_heading_mf
555
+ params:
556
+ command_name: motion
557
+ non_flatten: true
558
+ noise:
559
+ _target_: isaaclab.utils.noise.AdditiveUniformNoiseCfg
560
+ n_min: -0.05
561
+ n_max: 0.05
562
+ command_multi_future_lower_body:
563
+ _target_: isaaclab.managers.ObservationTermCfg
564
+ func: groot.rl.envs.manager_env.mdp:command_multi_future_lower_body
565
+ params:
566
+ command_name: motion
567
+ vr_3point_local_target:
568
+ _target_: isaaclab.managers.ObservationTermCfg
569
+ func: groot.rl.envs.manager_env.mdp:vr_3point_local_target
570
+ params:
571
+ command_name: motion
572
+ vr_3point_local_orn_target:
573
+ _target_: isaaclab.managers.ObservationTermCfg
574
+ func: groot.rl.envs.manager_env.mdp:vr_3point_local_orn_target
575
+ params:
576
+ command_name: motion
577
+ motion_anchor_ori_heading:
578
+ _target_: isaaclab.managers.ObservationTermCfg
579
+ func: groot.rl.envs.manager_env.mdp:motion_anchor_ori_heading
580
+ params:
581
+ command_name: motion
582
+ noise:
583
+ _target_: isaaclab.utils.noise.AdditiveUniformNoiseCfg
584
+ n_min: -0.05
585
+ n_max: 0.05
586
+ command_z:
587
+ _target_: isaaclab.managers.ObservationTermCfg
588
+ func: groot.rl.envs.manager_env.mdp:command_z
589
+ params:
590
+ command_name: motion
591
+ smpl_joints_multi_future_local_nonflat:
592
+ _target_: isaaclab.managers.ObservationTermCfg
593
+ func: groot.rl.envs.manager_env.mdp:smpl_joints_multi_future_local
594
+ params:
595
+ command_name: motion
596
+ non_flatten: true
597
+ noise:
598
+ _target_: isaaclab.utils.noise.AdditiveUniformNoiseCfg
599
+ n_min: -0.05
600
+ n_max: 0.05
601
+ smpl_root_ori_heading_multi_future:
602
+ _target_: isaaclab.managers.ObservationTermCfg
603
+ func: groot.rl.envs.manager_env.mdp:smpl_root_ori_heading_mf
604
+ params:
605
+ command_name: motion
606
+ non_flatten: true
607
+ noise:
608
+ _target_: isaaclab.utils.noise.AdditiveUniformNoiseCfg
609
+ n_min: -0.05
610
+ n_max: 0.05
611
+ joint_pos_multi_future_wrist_for_smpl:
612
+ _target_: isaaclab.managers.ObservationTermCfg
613
+ func: groot.rl.envs.manager_env.mdp:joint_pos_multi_future_select_joints_for_smpl
614
+ params:
615
+ command_name: motion
616
+ joints_idx:
617
+ - 23
618
+ - 24
619
+ - 25
620
+ - 26
621
+ - 27
622
+ - 28
623
+ _target_: groot.rl.envs.manager_env.mdp.observations.TokenizerCfg
624
+ enable_corruption: true
625
+ concatenate_terms: false
626
+ _target_: groot.rl.envs.manager_env.mdp.observations.ObservationsCfg
627
+ rewards:
628
+ tracking_anchor_pos:
629
+ _target_: isaaclab.managers.RewardTermCfg
630
+ func: groot.rl.envs.manager_env.mdp:tracking_anchor_pos_error
631
+ weight: 0.5
632
+ params:
633
+ command_name: motion
634
+ std: 0.3
635
+ tracking_anchor_ori:
636
+ _target_: isaaclab.managers.RewardTermCfg
637
+ func: groot.rl.envs.manager_env.mdp:tracking_anchor_ori_error
638
+ weight: 0.5
639
+ params:
640
+ command_name: motion
641
+ std: 0.4
642
+ tracking_relative_body_pos:
643
+ _target_: isaaclab.managers.RewardTermCfg
644
+ func: groot.rl.envs.manager_env.mdp:tracking_relative_body_pos_error
645
+ weight: 1.0
646
+ params:
647
+ command_name: motion
648
+ std: 0.3
649
+ tracking_relative_body_ori:
650
+ _target_: isaaclab.managers.RewardTermCfg
651
+ func: groot.rl.envs.manager_env.mdp:tracking_relative_body_ori_error
652
+ weight: 1.0
653
+ params:
654
+ command_name: motion
655
+ std: 0.4
656
+ tracking_body_linvel:
657
+ _target_: isaaclab.managers.RewardTermCfg
658
+ func: groot.rl.envs.manager_env.mdp:tracking_body_linvel_error
659
+ weight: 1.0
660
+ params:
661
+ command_name: motion
662
+ std: 1.0
663
+ tracking_body_angvel:
664
+ _target_: isaaclab.managers.RewardTermCfg
665
+ func: groot.rl.envs.manager_env.mdp:tracking_body_angvel_error
666
+ weight: 1.0
667
+ params:
668
+ command_name: motion
669
+ std: 3.14
670
+ action_rate_l2:
671
+ _target_: isaaclab.managers.RewardTermCfg
672
+ func: groot.rl.envs.manager_env.mdp:action_rate_l2
673
+ weight: -0.1
674
+ joint_limit:
675
+ _target_: isaaclab.managers.RewardTermCfg
676
+ func: groot.rl.envs.manager_env.mdp:joint_pos_limits
677
+ weight: -10.0
678
+ params:
679
+ asset_cfg:
680
+ _target_: isaaclab.managers.SceneEntityCfg
681
+ name: robot
682
+ joint_names:
683
+ - .*
684
+ undesired_contacts:
685
+ _target_: isaaclab.managers.RewardTermCfg
686
+ func: groot.rl.envs.manager_env.mdp:undesired_contacts
687
+ weight: -0.1
688
+ params:
689
+ sensor_cfg:
690
+ _target_: isaaclab.managers.SceneEntityCfg
691
+ name: contact_forces
692
+ body_names:
693
+ - ^(?!left_ankle_roll_link$)(?!right_ankle_roll_link$)(?!left_wrist_yaw_link$)(?!right_wrist_yaw_link$)(?!left_elbow_link$)(?!right_elbow_link$).+$
694
+ threshold: 1.0
695
+ anti_shake_ang_vel:
696
+ _target_: isaaclab.managers.RewardTermCfg
697
+ func: groot.rl.envs.manager_env.mdp:anti_shake_ang_vel_l2
698
+ weight: -0.005
699
+ params:
700
+ command_name: motion
701
+ threshold: 1.5
702
+ body_names:
703
+ - left_wrist_yaw_link
704
+ - right_wrist_yaw_link
705
+ - head_link
706
+ tracking_vr_5point_local:
707
+ _target_: isaaclab.managers.RewardTermCfg
708
+ func: groot.rl.envs.manager_env.mdp:tracking_local_vr_5point_error
709
+ weight: 2.0
710
+ params:
711
+ command_name: motion
712
+ std: 0.1
713
+ tracking_vr_2wrists_local_ori:
714
+ _target_: isaaclab.managers.RewardTermCfg
715
+ func: groot.rl.envs.manager_env.mdp:tracking_local_vr_2wrists_ori_error
716
+ weight: 0.4
717
+ params:
718
+ command_name: motion
719
+ std: 0.1
720
+ body_names:
721
+ - left_wrist_yaw_link
722
+ - right_wrist_yaw_link
723
+ feet_acc:
724
+ _target_: isaaclab.managers.RewardTermCfg
725
+ func: groot.rl.envs.manager_env.mdp:joint_acc_l2
726
+ weight: -2.5e-06
727
+ params:
728
+ asset_cfg:
729
+ _target_: isaaclab.managers.SceneEntityCfg
730
+ name: robot
731
+ joint_names:
732
+ - .*ankle.*
733
+ energy_consumption:
734
+ _target_: isaaclab.managers.RewardTermCfg
735
+ func: groot.rl.envs.manager_env.mdp:energy_consumption
736
+ weight: -0.0001
737
+ params:
738
+ asset_cfg:
739
+ name: robot
740
+ _target_: groot.rl.envs.manager_env.mdp.rewards.RewardsCfg
741
+ terminations:
742
+ anchor_pos:
743
+ _target_: isaaclab.managers.TerminationTermCfg
744
+ func: groot.rl.envs.manager_env.mdp:exceeded_anchor_height
745
+ params:
746
+ command_name: motion
747
+ threshold: 0.15
748
+ threshold_adaptive: true
749
+ down_threshold: 0.75
750
+ root_height_threshold: 0.5
751
+ anchor_ori_full:
752
+ _target_: isaaclab.managers.TerminationTermCfg
753
+ func: groot.rl.envs.manager_env.mdp:exceeded_anchor_ori
754
+ params:
755
+ asset_cfg:
756
+ _target_: isaaclab.managers.SceneEntityCfg
757
+ name: robot
758
+ command_name: motion
759
+ threshold: 0.2
760
+ ee_body_pos:
761
+ _target_: isaaclab.managers.TerminationTermCfg
762
+ func: groot.rl.envs.manager_env.mdp:exceeded_body_height
763
+ params:
764
+ command_name: motion
765
+ threshold: 0.15
766
+ threshold_adaptive: true
767
+ down_threshold: 0.75
768
+ root_height_threshold: 0.5
769
+ body_names:
770
+ - left_ankle_roll_link
771
+ - right_ankle_roll_link
772
+ - left_wrist_yaw_link
773
+ - right_wrist_yaw_link
774
+ time_out:
775
+ _target_: isaaclab.managers.TerminationTermCfg
776
+ func: groot.rl.envs.manager_env.mdp:tracking_time_out
777
+ time_out: true
778
+ params:
779
+ command_name: motion
780
+ foot_pos_xyz:
781
+ _target_: isaaclab.managers.TerminationTermCfg
782
+ func: groot.rl.envs.manager_env.mdp:exceeded_body_pos
783
+ params:
784
+ command_name: motion
785
+ threshold: 0.2
786
+ body_names:
787
+ - left_ankle_roll_link
788
+ - right_ankle_roll_link
789
+ _target_: groot.rl.envs.manager_env.mdp.terminations.TerminationsCfg
790
+ events:
791
+ physics_material:
792
+ _target_: isaaclab.managers.EventTermCfg
793
+ func: groot.rl.envs.manager_env.mdp:randomize_rigid_body_material
794
+ mode: startup
795
+ params:
796
+ asset_cfg:
797
+ _target_: isaaclab.managers.SceneEntityCfg
798
+ name: robot
799
+ body_names: .*
800
+ static_friction_range:
801
+ - 0.3
802
+ - 1.6
803
+ dynamic_friction_range:
804
+ - 0.3
805
+ - 1.2
806
+ restitution_range:
807
+ - 0.0
808
+ - 0.5
809
+ num_buckets: 64
810
+ add_joint_default_pos:
811
+ _target_: isaaclab.managers.EventTermCfg
812
+ func: groot.rl.envs.manager_env.mdp:randomize_joint_default_pos
813
+ mode: startup
814
+ params:
815
+ asset_cfg:
816
+ _target_: isaaclab.managers.SceneEntityCfg
817
+ name: robot
818
+ joint_names:
819
+ - .*
820
+ pos_distribution_params:
821
+ - -0.01
822
+ - 0.01
823
+ operation: add
824
+ base_com:
825
+ _target_: isaaclab.managers.EventTermCfg
826
+ func: groot.rl.envs.manager_env.mdp:randomize_rigid_body_com
827
+ mode: startup
828
+ params:
829
+ asset_cfg:
830
+ _target_: isaaclab.managers.SceneEntityCfg
831
+ name: robot
832
+ body_names: torso_link
833
+ com_range:
834
+ x:
835
+ - -0.025
836
+ - 0.025
837
+ 'y':
838
+ - -0.05
839
+ - 0.05
840
+ z:
841
+ - -0.05
842
+ - 0.05
843
+ push_robot:
844
+ _target_: isaaclab.managers.EventTermCfg
845
+ func: groot.rl.envs.manager_env.mdp:push_by_setting_velocity
846
+ mode: interval
847
+ interval_range_s:
848
+ - 4.0
849
+ - 6.0
850
+ params:
851
+ velocity_range:
852
+ x:
853
+ - -0.5
854
+ - 0.5
855
+ 'y':
856
+ - -0.5
857
+ - 0.5
858
+ z:
859
+ - -0.2
860
+ - 0.2
861
+ roll:
862
+ - -0.52
863
+ - 0.52
864
+ pitch:
865
+ - -0.52
866
+ - 0.52
867
+ yaw:
868
+ - -0.78
869
+ - 0.78
870
+ randomize_rigid_body_mass:
871
+ _target_: isaaclab.managers.EventTermCfg
872
+ func: groot.rl.envs.manager_env.mdp:randomize_rigid_body_mass
873
+ mode: startup
874
+ params:
875
+ asset_cfg:
876
+ _target_: isaaclab.managers.SceneEntityCfg
877
+ name: robot
878
+ body_names: .*wrist_yaw.*|torso_link
879
+ mass_distribution_params:
880
+ - 0.8
881
+ - 2.5
882
+ operation: scale
883
+ _target_: groot.rl.envs.manager_env.mdp.events.EventCfg
884
+ curriculum:
885
+ _target_: groot.rl.envs.manager_env.mdp.curriculum.CurriculumCfg
886
+ recorders:
887
+ _target_: groot.rl.envs.manager_env.mdp.recorders.RecordersCfg
888
+ _target_: groot.rl.envs.manager_env.modular_tracking_env_cfg.ModularTrackingEnvCfg
889
+ config:
890
+ num_envs: ${num_envs}
891
+ env_spacing: 2.0
892
+ decimation: 4
893
+ episode_length_s: 10.0
894
+ sim_dt: 0.005
895
+ viewer_eye:
896
+ - 4.5
897
+ - 0.0
898
+ - 6.0
899
+ viewer_lookat:
900
+ - 0.0
901
+ - 0.0
902
+ - 2.0
903
+ render_results: false
904
+ save_rendering_dir: ${experiment_dir}/renderings_training
905
+ experiment_dir: ${experiment_dir}
906
+ terrain_type: trimesh
907
+ object_mass: null
908
+ table_offset: null
909
+ eval_camera_offset:
910
+ - 2
911
+ - 2
912
+ - 1
913
+ action_transform_module_cfg: null
914
+ action_transform_module_checkpoint: null
915
+ meta_action_dim: null
916
+ needs_policy_atm: true
917
+ obs:
918
+ obs_dict: {}
919
+ obs_dims: {}
920
+ group_obs_dims: {}
921
+ group_obs_names: {}
922
+ action_clip_value: 20.0
923
+ robot:
924
+ type: g1_model_12_dex
925
+ algo_obs_dim_dict: {}
926
+ rewards:
927
+ num_critics: 1
928
+ train_only_events:
929
+ - push_robot
930
+ - compliance_force_push
931
+ use_manager_env: true
932
+ exp_base: ${hydra:runtime.choices.exp}
933
+ exp_var: wrist_81
934
+ actor_prop_history_length: 10
935
+ actor_actions_history_length: 10
936
+ critic_prop_history_length: 10
937
+ critic_actions_history_length: 10
938
+ eval_datasets:
939
+ - ${shared_dir}/wbc_data/pyroki/pyroki_v0.8.1_splits/v0.8.1_test_content
940
+ - ${shared_dir}/wbc_data/pyroki/pyroki_v0.8.1_splits/v0.8.1_test_repetition
941
+ eval_modes:
942
+ - g1
943
+ - smpl
944
+ - teleop
945
+ shared_dir: /mnt/amlfs-04/shared
946
+ resume: true
heading_wrist/last.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:af24831ae59424a0cf92cb56e9bb6dc1a59ab859fd055ba13187e9e6f0a59f43
3
+ size 1138314059
heading_wrist/model_config.yaml ADDED
@@ -0,0 +1,328 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ algo_config:
2
+ actor:
3
+ _target_: groot.rl.trl.modules.actor_critic_modules.Actor
4
+ backbone:
5
+ _target_: groot.rl.trl.modules.universal_token_modules.UniversalTokenModule
6
+ aux_loss_coef:
7
+ g1_recon: 0.01
8
+ g1_smpl_latent: 1.0
9
+ g1_teleop_latent: 1.0
10
+ reencoded_smpl_g1_latent: 1.0
11
+ teleop_smpl_latent: 1.0
12
+ aux_loss_func:
13
+ g1_recon:
14
+ _target_: groot.rl.trl.losses.token_losses.G1ReconLoss
15
+ loss_type: mse
16
+ g1_smpl_latent:
17
+ _target_: groot.rl.trl.losses.token_losses.G1SmplLatentLoss
18
+ loss_type: mse
19
+ g1_teleop_latent:
20
+ _target_: groot.rl.trl.losses.token_losses.G1TeleopLatentLoss
21
+ loss_type: mse
22
+ reencoded_smpl_g1_latent:
23
+ _target_: groot.rl.trl.losses.token_losses.ReencodedSmplG1LatentLoss
24
+ loss_type: mse
25
+ teleop_smpl_latent:
26
+ _target_: groot.rl.trl.losses.token_losses.TeleopSmplLatentLoss
27
+ detach_teleop_target: true
28
+ loss_type: mse
29
+ decoders:
30
+ g1_dyn:
31
+ has_temporal_dim: false
32
+ inputs:
33
+ - token_flattened
34
+ - proprioception
35
+ outputs:
36
+ - action
37
+ params:
38
+ _target_: groot.rl.trl.modules.base_module.BaseModule
39
+ input_dim: null
40
+ module_config_dict:
41
+ layer_config:
42
+ activation: SiLU
43
+ hidden_dims:
44
+ - 4096
45
+ - 4096
46
+ - 2048
47
+ - 2048
48
+ - 1024
49
+ - 1024
50
+ - 512
51
+ - 512
52
+ type: MLP
53
+ num_input_temporal_dims: null
54
+ num_output_temporal_dims: null
55
+ output_dim: null
56
+ g1_kin:
57
+ has_temporal_dim: true
58
+ inputs:
59
+ - token
60
+ outputs:
61
+ - command_multi_future_nonflat
62
+ - motion_anchor_ori_heading_mf_nonflat
63
+ params:
64
+ _target_: groot.rl.trl.modules.base_module.BaseModule
65
+ input_dim: null
66
+ module_config_dict:
67
+ layer_config:
68
+ activation: SiLU
69
+ hidden_dims:
70
+ - 2048
71
+ - 1024
72
+ - 512
73
+ - 512
74
+ type: MLP
75
+ num_input_temporal_dims: 2
76
+ num_output_temporal_dims: 10
77
+ output_dim: null
78
+ encoder_sample_probs:
79
+ g1: 1.0
80
+ smpl: 1.0
81
+ teleop: 1.0
82
+ encoders:
83
+ g1:
84
+ inputs:
85
+ - command_multi_future_nonflat
86
+ - motion_anchor_ori_heading_mf_nonflat
87
+ params:
88
+ _target_: groot.rl.trl.modules.base_module.BaseModule
89
+ input_dim: null
90
+ module_config_dict:
91
+ layer_config:
92
+ activation: SiLU
93
+ hidden_dims:
94
+ - 2048
95
+ - 1024
96
+ - 512
97
+ - 512
98
+ type: MLP
99
+ num_input_temporal_dims: 10
100
+ num_output_temporal_dims: 2
101
+ output_dim: null
102
+ smpl:
103
+ inputs:
104
+ - smpl_joints_multi_future_local_nonflat
105
+ - smpl_root_ori_heading_multi_future
106
+ - joint_pos_multi_future_wrist_for_smpl
107
+ params:
108
+ _target_: groot.rl.trl.modules.base_module.BaseModule
109
+ input_dim: null
110
+ module_config_dict:
111
+ layer_config:
112
+ activation: SiLU
113
+ hidden_dims:
114
+ - 2048
115
+ - 1024
116
+ - 512
117
+ - 512
118
+ type: MLP
119
+ num_input_temporal_dims: 10
120
+ num_output_temporal_dims: 2
121
+ output_dim: null
122
+ teleop:
123
+ inputs:
124
+ - command_multi_future_lower_body
125
+ - vr_3point_local_target
126
+ - vr_3point_local_orn_target
127
+ - motion_anchor_ori_heading
128
+ params:
129
+ _target_: groot.rl.trl.modules.base_module.BaseModule
130
+ input_dim: null
131
+ module_config_dict:
132
+ layer_config:
133
+ activation: SiLU
134
+ hidden_dims:
135
+ - 2048
136
+ - 1024
137
+ - 512
138
+ - 512
139
+ type: MLP
140
+ num_input_temporal_dims: null
141
+ num_output_temporal_dims: 2
142
+ output_dim: null
143
+ fsq_level_list: 32
144
+ max_num_tokens: 2
145
+ num_fsq_levels: 32
146
+ num_future_frames: 10
147
+ proprioception_features:
148
+ - actor_obs
149
+ quantizer:
150
+ _target_: vector_quantize_pytorch.FSQ
151
+ reencode_smpl_g1_recon: true
152
+ has_aux_loss: true
153
+ input_obs_dict: true
154
+ running_mean_std: false
155
+ actor_learning_rate: 2.0e-05
156
+ adaptive_lr_max: 0.0002
157
+ adaptive_lr_min: 1.0e-05
158
+ clip_param: 0.2
159
+ critic:
160
+ _target_: groot.rl.trl.modules.actor_critic_modules.Critic
161
+ backbone:
162
+ _target_: groot.rl.trl.modules.base_module.BaseModule
163
+ module_config_dict:
164
+ input_dim:
165
+ - critic_obs
166
+ layer_config:
167
+ activation: SiLU
168
+ hidden_dims:
169
+ - 4096
170
+ - 4096
171
+ - 2048
172
+ - 2048
173
+ - 1024
174
+ - 1024
175
+ - 512
176
+ - 512
177
+ type: MLP
178
+ output_dim:
179
+ - 1
180
+ type: MLP
181
+ process_output_dim: true
182
+ running_mean_std: true
183
+ critic_learning_rate: 0.001
184
+ desired_kl: 0.01
185
+ empty_cache_every_n_ppo_epoch: -1
186
+ entropy_coef: 0.01
187
+ eval:
188
+ num_eval_episodes: 150
189
+ num_save_episodes: 200
190
+ save_goal_reached_only: true
191
+ save_trajectories: false
192
+ save_videos: false
193
+ video_save_prob: 1.0
194
+ eval_callbacks:
195
+ analysis_plot_cb:
196
+ _target_: groot.rl.agents.callbacks.analysis_plot_motion_tracking.AnalysisPlotMotionTracking
197
+ config:
198
+ compute_metrics: true
199
+ log_single_robot: false
200
+ plot_update_interval: 100
201
+ sim_dt: 0.02
202
+ use_weblogger: false
203
+ eval_frequency: 500
204
+ gamma: 0.99
205
+ global_rank: 0
206
+ init_at_random_ep_len: true
207
+ init_noise_std: 0.05
208
+ lam: 0.95
209
+ load_optimizer: true
210
+ max_grad_norm: 0.1
211
+ num_learning_epochs: 5
212
+ num_learning_iterations: 100000
213
+ num_mini_batches: 4
214
+ num_steps_per_env: 24
215
+ ppo_shuffle_every_epoch: true
216
+ save_interval: 500
217
+ schedule: adaptive
218
+ std_clamp_max: 0.5
219
+ std_clamp_min: 0.001
220
+ sync_advantage_normalization: true
221
+ use_clampped_std: true
222
+ use_clipped_value_loss: true
223
+ use_new_actor_critic: true
224
+ use_padding_mask: false
225
+ value_loss_coef: 1.0
226
+ world_size: 128
227
+ env_config:
228
+ action_clip_value: 20.0
229
+ action_transform_module_cfg: null
230
+ action_transform_module_checkpoint: null
231
+ decimation: 4
232
+ env_spacing: 2.0
233
+ episode_length_s: 10.0
234
+ eval_camera_offset:
235
+ - 2
236
+ - 2
237
+ - 1
238
+ experiment_dir: !!python/object/apply:pathlib.PosixPath
239
+ - models
240
+ - '0430'
241
+ - logs_rl
242
+ - TRL_G1_Track
243
+ - manager
244
+ - universal_token
245
+ - all_modes
246
+ - sonic_release_3pt_heading_wrist_81-20260415_051436
247
+ headless: true
248
+ meta_action_dim: null
249
+ needs_policy_atm: true
250
+ num_envs: 1
251
+ object_mass: null
252
+ obs:
253
+ group_obs_dims:
254
+ tokenizer:
255
+ command_multi_future_lower_body:
256
+ - 240
257
+ command_multi_future_nonflat:
258
+ - 10
259
+ - 58
260
+ command_z:
261
+ - 1
262
+ command_z_multi_future_nonflat:
263
+ - 10
264
+ - 1
265
+ encoder_index:
266
+ - 3
267
+ joint_pos_multi_future_wrist_for_smpl:
268
+ - 10
269
+ - 6
270
+ motion_anchor_ori_heading:
271
+ - 6
272
+ motion_anchor_ori_heading_mf_nonflat:
273
+ - 10
274
+ - 6
275
+ smpl_joints_multi_future_local_nonflat:
276
+ - 10
277
+ - 72
278
+ smpl_root_ori_heading_multi_future:
279
+ - 10
280
+ - 6
281
+ vr_3point_local_orn_target:
282
+ - 12
283
+ vr_3point_local_target:
284
+ - 9
285
+ group_obs_names:
286
+ tokenizer:
287
+ - encoder_index
288
+ - command_multi_future_nonflat
289
+ - command_z_multi_future_nonflat
290
+ - command_z
291
+ - motion_anchor_ori_heading_mf_nonflat
292
+ - motion_anchor_ori_heading
293
+ - command_multi_future_lower_body
294
+ - vr_3point_local_target
295
+ - vr_3point_local_orn_target
296
+ - smpl_joints_multi_future_local_nonflat
297
+ - smpl_root_ori_heading_multi_future
298
+ - joint_pos_multi_future_wrist_for_smpl
299
+ obs_dict: {}
300
+ obs_dims:
301
+ actor_obs: 930
302
+ critic_obs: 1645
303
+ tokenizer: 1761
304
+ render_results: false
305
+ rewards:
306
+ num_critics: 1
307
+ robot:
308
+ actions_dim: 29
309
+ algo_obs_dim_dict:
310
+ actor_obs: 930
311
+ critic_obs: 1645
312
+ tokenizer: 1761
313
+ type: g1_model_12_dex
314
+ save_rendering_dir: models/0430/logs_rl/TRL_G1_Track/manager/universal_token/all_modes/sonic_release_3pt_heading_wrist_81-20260415_051436/renderings_training
315
+ sim_dt: 0.005
316
+ table_offset: null
317
+ terrain_type: trimesh
318
+ train_only_events:
319
+ - push_robot
320
+ - compliance_force_push
321
+ viewer_eye:
322
+ - 4.5
323
+ - 0.0
324
+ - 6.0
325
+ viewer_lookat:
326
+ - 0.0
327
+ - 0.0
328
+ - 2.0
heading_wrist/model_decoder.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:34bae8570d4a4421a5391a5c2befd745d4a02d182ec539e5f9da44c091c67509
3
+ size 149778638
heading_wrist/model_encoder.onnx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fb97de22819b2057b41459802128d91723d91a25f0ad73e7bfc41a9cf8365bae
3
+ size 50117796
heading_wrist/observation_config.yaml ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SONIC Heading/Wrist - Observation Configuration
2
+ # =================================================
3
+ # Matches heading_wrist/model_encoder.onnx and model_decoder.onnx.
4
+ #
5
+ # Encoder input: 1751 Decoder input: 994 Token: 64
6
+ # G1/teleop references use 10 frames at step5. SMPL and wrist references use
7
+ # 10 frames at step1. Root orientations are normalized by robot heading.
8
+
9
+ observations:
10
+ - name: "token_state"
11
+ enabled: true
12
+ - name: "his_base_angular_velocity_10frame_step1"
13
+ enabled: true
14
+ - name: "his_body_joint_positions_10frame_step1"
15
+ enabled: true
16
+ - name: "his_body_joint_velocities_10frame_step1"
17
+ enabled: true
18
+ - name: "his_last_actions_10frame_step1"
19
+ enabled: true
20
+ - name: "his_gravity_dir_10frame_step1"
21
+ enabled: true
22
+
23
+ encoder:
24
+ dimension: 64
25
+ use_fp16: false
26
+ encoder_observations:
27
+ - name: "encoder_mode_4"
28
+ enabled: true
29
+ - name: "motion_joint_positions_10frame_step5"
30
+ enabled: true
31
+ - name: "motion_joint_velocities_10frame_step5"
32
+ enabled: true
33
+ - name: "motion_anchor_orientation_heading_10frame_step5"
34
+ enabled: true
35
+ - name: "motion_anchor_orientation_heading"
36
+ enabled: true
37
+ - name: "motion_joint_positions_lowerbody_10frame_step5"
38
+ enabled: true
39
+ - name: "motion_joint_velocities_lowerbody_10frame_step5"
40
+ enabled: true
41
+ - name: "vr_3point_local_target"
42
+ enabled: true
43
+ - name: "vr_3point_local_orn_target"
44
+ enabled: true
45
+ - name: "smpl_joints_10frame_step1"
46
+ enabled: true
47
+ - name: "smpl_anchor_orientation_heading_10frame_step1"
48
+ enabled: true
49
+ - name: "motion_joint_positions_wrists_10frame_step1"
50
+ enabled: true
51
+ encoder_modes:
52
+ - name: "g1"
53
+ mode_id: 0
54
+ required_observations:
55
+ - encoder_mode_4
56
+ - motion_joint_positions_10frame_step5
57
+ - motion_joint_velocities_10frame_step5
58
+ - motion_anchor_orientation_heading_10frame_step5
59
+ - name: "teleop"
60
+ mode_id: 1
61
+ required_observations:
62
+ - encoder_mode_4
63
+ - motion_joint_positions_lowerbody_10frame_step5
64
+ - motion_joint_velocities_lowerbody_10frame_step5
65
+ - vr_3point_local_target
66
+ - vr_3point_local_orn_target
67
+ - motion_anchor_orientation_heading
68
+ - name: "smpl"
69
+ mode_id: 2
70
+ required_observations:
71
+ - encoder_mode_4
72
+ - smpl_joints_10frame_step1
73
+ - smpl_anchor_orientation_heading_10frame_step1
74
+ - motion_joint_positions_wrists_10frame_step1