Skip to main content

Config Reference

Complete reference for all configurable fields.

Top-Level Fields

FieldDescriptionDefault
policy_hzPolicy inference frequency50
pd_hzPD control frequency (simulation only)200
viewersViewer set: mocap, retarget, sim2sim, camera, all, none. all opens mocap, retarget, and sim2sim; add camera explicitly.sim2sim
realtimeRate-limit to wall clockfalse
num_stepsNumber of steps; 0 = infinite0
keyboard.enabledEnable realtime keyboard mode control for sim2simfalse
playback.pause_on_endPause at last frame when offline motion endsfalse
playback.keyboard.enabledEnable keyboard control for offline playbackfalse

Robot

FieldDescriptionDefault
robot.num_actionsJoint action dimension29
robot.xml_pathMuJoCo XML path-
d435i_rgbFixed RGB camera in the G1 MJCF; use viewers=[sim2sim,camera] to display it-
robot.kps / robot.kdsPD gains-
robot.default_anglesDefault standing pose-
robot.torque_limitsJoint torque limits-

Controller

FieldDescriptionDefault
controller.policy_pathRequired. Path to ONNX policy file-
controller.deviceInference device: cpu / auto / cuda:Ncpu
controller.action_scaleAction scaling factor-
controller.clip_rangeAction clipping range-
controller.default_dof_posJoint angle offset base-

Input

Offline BVH

FieldDescription
input.bvh_fileRequired. Path to BVH file
input.bvh_formatlafan1 / hc_mocap
input.human_formatHuman skeleton format

BVH input does not set input.provider — it is inferred from the config group name.

Pico 4

FieldDescriptionDefault
input.providerpico4pico4
input.human_formatRetarget skeleton formatpico_bridge
input.pico4_timeoutWait timeout in seconds60
input.pico4_buffer_sizeFrame buffer size60
input.pause_buttonButton for pause/resumeA
input.pause_debounce_sDebounce time for pause button0.25
input.arms_buttonButton for Pico MOCAP / ARMS toggleB
input.arms_debounce_sDebounce time for arms-mode button0.25
input.bridge_hostTeleopit host receiver bind host0.0.0.0
input.bridge_portTeleopit host receiver TCP/UDP port63901
input.bridge_discoveryEnable pico-bridge discovery advertisingtrue
input.bridge_advertise_ipOptional advertised host IP overridenull
input.bridge_start_timeoutTimeout while starting the bridge10.0
input.bridge_history_sizePico frame history retained by the bridge120
input.video.enabledStream host camera preview back to Pico through pico-bridge 0.2.1false
input.video.sourceVideo source: mujoco, realsense, or test-patternnull
input.video.width / height / fpsVideo capture/render settings1280 / 720 / 30
input.video.deviceOptional RealSense serialnull
input.video.fail_on_errorFail startup instead of disabling video on errorfalse

Realtime

FieldDescription
retarget_buffer_enabledEnable retarget buffering
retarget_buffer_window_sBuffer window size
retarget_buffer_delay_sBuffer delay
reference_stepsReference window steps
realtime_buffer_warmup_stepsWarmup before playback
reference_velocity_smoothing_alphaVelocity smoothing
reference_anchor_velocity_smoothing_alphaAnchor velocity smoothing

Sim2Real

Fields used by sim2real configs (sim2real.yaml, pico4_sim2real.yaml).

Sim2real defaults to viewers=none. Set viewers=retarget to open an optional MuJoCo window showing the retargeted reference; sim2sim, mocap, camera, and all are simulation-only viewer modes.

Safety

FieldDescriptionDefault
startup_ramp_durationKp ramp duration after entering STANDING; gradually increases PD gains without changing policy targets2.0
joint_vel_limitJoint velocity limit (rad/s); triggers emergency damping if exceeded10.0
mocap_switch.check_framesConsecutive valid frames required before switching to MOCAP10
arm_mocap.controlled_joint_indicesG1 joints driven by live retargeting in Pico ARMS mode[15..28]

Real Robot

FieldDescriptionDefault
real_robot.network_interfaceNetwork interface for Unitree DDS communication. For wired PC-to-G1 control, find the cable interface with ifconfig and set that name, for example enp130s0; for onboard robot execution, eth0 is usually correct.eth0
real_robot.kp_realReal-robot proportional gains (per joint)-
real_robot.kd_realReal-robot derivative gains (per joint)-
real_robot.kd_dampingDamping mode kd8.0
real_robot.control_modeAnkle control mode (PR = Pitch-Roll)PR
real_robot.joint_pos_lowerJoint position lower limits (rad)-
real_robot.joint_pos_upperJoint position upper limits (rad)-

Pause/Resume (Pico sim2real)

Realtime Pico resume re-centers heading and ground-plane position before tracking continues. Operators should keep still and stay as close as practical to the paused pose to reduce sudden reference changes.

Dexterous Hand (Pico sim2real)

hands.enabled=true requires input.provider=pico4 plus local editable installs of third_party/linkerhand-python-sdk and third_party/somehand. When enabled, hand control remains active in all sim2real modes. gripper supports linkerhand_l6 and linkerhand_o6 by interpolating Pico trigger input between the configured open and close poses. vr_hand_pose is L6-only: missing hand pose holds the last command for that side, L6 speed is set to the maximum, and Teleopit converts Pico hand state to 21 landmarks before calling somehand 0.2.0 through somehand.api only.

FieldDescriptionDefault
hands.enabledEnable optional hand workerfalse
hands.driverHand driver plugin: linkerhand_l6 or linkerhand_o6linkerhand_l6
hands.modegripper or vr_hand_posegripper
hands.sidesControlled sides[left, right]
hands.rate_hzMaximum gripper command rate in Hz30.0
hands.frame_timeout_sController or hand-pose staleness threshold0.3
hands.linkerhand_l6.left_can / right_canCAN channels for each handcan0 / can1
hands.linkerhand_l6.speedL6 speed used by gripper; vr_hand_pose overrides this to maximum speedsee config
hands.linkerhand_l6.open_pose / close_poseSix-value L6 open/closed posessee config
hands.linkerhand_o6.left_can / right_canCAN channels for each O6 handcan0 / can1
hands.linkerhand_o6.speedO6 speed used by grippersee config
hands.linkerhand_o6.open_pose / close_poseSix-value O6 open/closed posessee config
hands.somehand.config_pathOfficial somehand 0.2.0 bi-hand L6 config used by vr_hand_posesee config
hands.somehand.rate_hzLow-latency vr_hand_pose command rate in Hz60.0
hands.somehand.max_iterationssomehand solver iteration cap for vr_hand_pose12
hands.somehand.temporal_filter_alphasomehand input landmark smoothing alpha; 1.0 disables smoothing delay1.0
hands.somehand.output_alphasomehand qpos output smoothing alpha; 1.0 disables smoothing delay1.0

HDF5 Recording (Pico sim2real)

recording.enabled=true is supported only with input.provider=pico4, input.video.enabled=true, input.video.source=realsense, and an interactive terminal. The recorder is manual: R starts an episode, S saves the active episode, D discards the active episode, and Q shuts down. STANDING, MOCAP, ARMS, and paused mocap can be recorded.

sim2real_record.yaml enables both recording and the required RealSense input.video path. Recording does not open a second camera; it consumes the same frames produced by pico_input.

FieldDescriptionDefault
recording.enabledEnable manual HDF5 recordingfalse
recording.output_dirDataset root directorydata/recordings/sim2real_hdf5
recording.taskTask string stored with framesdemo
recording.fpsRecording/video clock rate30
recording.min_episode_secondsDiscard saved episodes shorter than this duration1.0
recording.record_modesModes that allow recording start and frame writes[standing, mocap, arms, pause]
recording.camera.keyRGB image dataset keyobservation.images.d435i_rgb
recording.camera.width / height / fpsRealSense RGB capture settings640 / 480 / 30
recording.camera.deviceOptional RealSense serialnull
recording.video.codec / quality / pixelformatMP4 sidecar encoder settingslibx264 / 8 / yuv420p

Camera failure behavior is controlled by input.video.fail_on_error.

Each saved episode has one .h5 file under recording.output_dir/episodes/ and one compressed MP4 sidecar under recording.output_dir/videos/<camera_key>/. The HDF5 episode stores frame_index and timestamp arrays, plus video_path, video_fps, and video_frames root attributes for synchronization. Raw RGB image datasets are not written.

HDF5 datasets:

frame_index                    int64[N]
timestamp float64[N]
observation.state float32[68]
observation.mode float32[1]
action float32[36]
action.hand float32[12]

The root attributes include the Teleopit HDF5 recording format, schema version, task, fps, frame count, and video sync metadata.

observation.state is ordered as joint_pos(29), joint_vel(29), base_quat_wxyz(4), base_ang_vel(3), and projected_gravity(3). observation.mode is a numeric categorical: standing=0, mocap=1, arms=2, and pause=3. action is the current reference qpos: root_pos(3) + root_quat_wxyz(4) + joint_pos(29). action.hand is the latest LinkerHand command from the hand worker: left_pose(6) + right_pose(6), using the SDK's 0-255 pose values.

Critical: default_dof_pos

The RL policy outputs action offsets relative to the default standing pose, not absolute joint angles:

target_dof_pos = clip(action, low, high) * action_scale + default_dof_pos

Therefore:

  • default_dof_pos must align with robot.default_angles
  • Missing this offset causes the robot to fall immediately

TeleopPipeline automatically passes robot.default_angles to the controller's default_dof_pos during initialization. Understanding this chain is important when writing custom entry points or tests.