跳到主要内容

配置参考

本页列出 Teleopit 所有可配置字段及其含义。

顶层字段

字段类型默认值说明
policy_hzint策略推理频率(Hz)
pd_hzint200PD 控制器频率(Hz,仅仿真),通常高于 policy_hz
viewersstr/listsim2sim可视化窗口集合:mocapretargetsim2simcameraallnoneall 打开 mocapretargetsim2sim;如需相机画面需显式加入 camera
realtimeboolfalse是否启用实时模式(实机部署时需开启)
num_stepsint仿真总步数;设为 -1 表示无限运行
keyboard.enabledboolfalse是否启用 sim2sim 实时键盘模式控制
playback.pause_on_endboolfalse回放结束后是否暂停(而非退出)
playback.keyboard.enabledboolfalse是否启用键盘控制回放进度

Robot 字段

机器人相关配置位于 robot/ 子目录。以 robot/g1.yaml 为例:

字段类型说明
num_actionsint策略输出的动作维度(即受控关节数)
xml_pathstrMuJoCo MJCF 模型文件路径
d435i_rgbcameraG1 MJCF 中的固定 RGB 相机;配合 viewers=[sim2sim,camera] 显示画面
kpslist[float]各关节的比例增益(P 增益)
kdslist[float]各关节的微分增益(D 增益)
default_angleslist[float]默认关节角度(弧度),也是策略动作的零点
torque_limitslist[float]各关节的力矩上限

Controller 字段

控制器配置位于 controller/ 子目录。

字段类型说明
policy_pathstr必填。 策略模型文件路径(ONNX 格式)
devicestr推理设备,如 "cpu""cuda:0"
action_scalefloat动作缩放系数
clip_rangelist[float]动作裁剪范围,格式为 [min, max]
default_dof_poslist[float]默认关节位置,用于计算控制目标

关键说明:default_dof_pos 与动作计算

策略输出的 action 是相对于 default_dof_pos偏移量,最终的关节控制目标按如下公式计算:

target = clip(action, clip_range) * action_scale + default_dof_pos

因此,default_dof_pos 决定了策略输出的"零点"。如果该值与训练时使用的不一致,策略的行为将完全偏离预期。

Input 字段

输入源配置位于 input/ 子目录,不同输入源的字段各异。

BVH 输入(input/bvh.yaml

字段类型说明
bvh_filestrBVH 文件路径
bvh_formatstrBVH 骨骼格式标识
human_formatstr人体骨架格式

BVH 输入不设置 input.provider — 由配置组名自动推断。

Pico 4 输入(input/pico4.yaml

字段类型默认值说明
providerstrpico4输入源类型
human_formatstrpico_bridge重定向骨架格式
pico4_timeoutfloat60等待设备连接的超时时间(秒)
pico4_buffer_sizeint60帧缓冲区大小
pause_buttonstrA用于暂停/恢复的手柄按钮名称
pause_debounce_sfloat0.25暂停按钮防抖时间
arms_buttonstrBPico 中用于切换 MOCAP / ARMS 的按钮
arms_debounce_sfloat0.25双臂模式按钮防抖时间
bridge_hoststr0.0.0.0Teleopit host receiver 绑定地址
bridge_portint63901Teleopit host receiver TCP/UDP 端口
bridge_discoverybooltrue是否启用 pico-bridge 发现广播
bridge_advertise_ipstr/nullnull可选的 host 广播 IP 覆盖
bridge_start_timeoutfloat10.0启动 bridge 的超时时间
bridge_history_sizeint120bridge 保留的 Pico 帧历史长度
video.enabledboolfalse通过 pico-bridge 0.2.1 将 host 相机预览发送回 Pico
video.sourcestr/nullnull视频源:mujocorealsensetest-pattern
video.width / height / fpsint1280 / 720 / 30视频采集/渲染设置
video.devicestr/nullnull可选的 RealSense 序列号
video.fail_on_errorboolfalse视频失败时是否让启动失败,而不是关闭视频后继续

Realtime 字段

实时模式相关字段,仅在 realtime=true 时生效。

字段说明
retarget_buffer_enabled是否启用重定向缓冲
retarget_buffer_window_s缓冲窗口大小
retarget_buffer_delay_s缓冲延迟
reference_steps参考轨迹窗口步数
realtime_buffer_warmup_steps播放前预热帧数
reference_velocity_smoothing_alpha速度平滑系数
reference_anchor_velocity_smoothing_alpha锚点速度平滑系数

Sim2Real 字段

以下字段用于 sim2real 配置(sim2real.yamlpico4_sim2real.yaml)。

sim2real 默认使用 viewers=none。设置 viewers=retarget 可打开一个可选的 MuJoCo 窗口显示重定向参考;sim2simmocapcameraall 仅用于仿真 viewer。

安全相关

字段说明默认值
startup_ramp_duration进入 STANDING 后的 Kp ramp 时长;逐步提高 PD 增益,不改变 policy target2.0
joint_vel_limit关节速度限制(rad/s),超过时触发急停10.0
mocap_switch.check_frames切换到 MOCAP 前所需的连续有效帧数10
arm_mocap.controlled_joint_indicesPico ARMS 模式下由实时 retargeting 驱动的 G1 关节[15..28]

真机 SDK

字段说明默认值
real_robot.network_interfaceUnitree DDS 通信网络接口。PC 通过网线连接 G1 控制时,用 ifconfig 找到这根网线对应的接口名并填写,例如 enp130s0;在机器人 onboard 计算机上运行时通常使用 eth0eth0
real_robot.kp_real真机比例增益(各关节)
real_robot.kd_real真机微分增益(各关节)
real_robot.kd_damping阻尼模式 kd8.0
real_robot.control_mode踝关节控制模式(PR = Pitch-Roll)PR
real_robot.joint_pos_lower关节位置下限(rad)
real_robot.joint_pos_upper关节位置上限(rad)

暂停/恢复(Pico sim2real)

实时 Pico 恢复追踪时会先重新居中航向和地面平面位置。操作者应保持静止,并尽量贴近暂停时的姿态,以减少参考突变。

灵巧手(Pico sim2real)

hands.enabled=true 要求 input.provider=pico4,并以本地 editable 方式安装 third_party/linkerhand-python-sdkthird_party/somehand。启用后,手控会在所有 sim2real 模式中保持生效。 gripper 支持 linkerhand_l6linkerhand_o6,会用 Pico trigger 在配置的张开和闭合姿态之间插值。 vr_hand_pose 只支持 L6:手部 pose 消失时,对应侧会保持上一条命令;L6 速度会设为最大值; Teleopit 会先将 Pico 手部状态转成 21 个 landmarks,再只通过 somehand 0.2.0 公开的 somehand.api 调用。

字段说明默认值
hands.enabled启用可选手部运行时false
hands.modegrippervr_hand_posegripper
hands.driver手部设备驱动:linkerhand_l6linkerhand_o6linkerhand_l6
hands.sides控制侧[left, right]
hands.rate_hzgripper 最大命令频率(Hz)30.0
hands.frame_timeout_s手柄或手部 pose 过期阈值0.3
hands.linkerhand_l6.left_can / right_can左右手 CAN 通道can0 / can1
hands.linkerhand_l6.speedgripper 使用的 L6 速度;vr_hand_pose 会覆盖为最大速度见配置
hands.linkerhand_l6.deadman_threshold启用单侧控制所需的最小 grip 值0.5
hands.linkerhand_l6.trigger_deadzonetrigger 两端死区0.05
hands.linkerhand_l6.open_pose / close_poseL6 的 6 维张开/闭合姿态见配置
hands.linkerhand_o6.left_can / right_can左右 O6 手 CAN 通道can0 / can1
hands.linkerhand_o6.speedgripper 使用的 O6 速度见配置
hands.linkerhand_o6.open_pose / close_poseO6 的 6 维张开/闭合姿态见配置
hands.somehand.config_pathvr_hand_pose 使用的 somehand 双手 L6 配置见配置
hands.somehand.rate_hz低延时 vr_hand_pose 命令频率(Hz)60.0
hands.somehand.max_iterationsvr_hand_pose 的 somehand solver 迭代上限12
hands.somehand.temporal_filter_alphasomehand 输入 landmarks 平滑 alpha;1.0 表示关闭平滑延时1.0
hands.somehand.output_alphasomehand qpos 输出平滑 alpha;1.0 表示关闭平滑延时1.0

HDF5 录制(Pico sim2real)

recording.enabled=true 只支持 input.provider=pico4input.video.enabled=trueinput.video.source=realsense,并且需要交互式终端。 录制是手动控制:R 开始 episode,S 保存当前 episode,D 丢弃当前 episode, Q 关闭。可以录制 STANDINGMOCAPARMS 和暂停状态的 mocap。

sim2real_record.yaml 会同时启用录制和必需的 RealSense input.video 路径。录制不会打开第二路相机,而是消费 pico_input 已经产生的同一批帧。

字段说明默认值
recording.enabled启用手动 HDF5 录制false
recording.output_dir数据集根目录data/recordings/sim2real_hdf5
recording.task写入 frame 的任务字符串demo
recording.fps录制/视频主时钟频率30
recording.min_episode_seconds保存时短于该时长的 episode 会被丢弃1.0
recording.record_modes允许开始录制和写帧的模式[standing, mocap, arms, pause]
recording.camera.keyRGB 图像数据集 keyobservation.images.d435i_rgb
recording.camera.width / height / fpsRealSense RGB 采集设置640 / 480 / 30
recording.camera.device可选 RealSense 序列号null
recording.video.codec / quality / pixelformatMP4 sidecar 编码设置libx264 / 8 / yuv420p

相机失败时的行为由 input.video.fail_on_error 控制。

每个保存的 episode 会在 recording.output_dir/episodes/ 下写入一个 .h5 文件,并在 recording.output_dir/videos/<camera_key>/ 下写入一个压缩 MP4 sidecar。HDF5 episode 保存 frame_indextimestamp 数组,并在根属性中 记录 video_pathvideo_fpsvideo_frames 用于同步。录制不会写入原始 RGB 图像 dataset。

HDF5 datasets:

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

根属性包含 Teleopit HDF5 recording format、schema version、task、fps、 frame count 和视频同步元数据。

observation.state 的顺序是 joint_pos(29)joint_vel(29)base_quat_wxyz(4)base_ang_vel(3)projected_gravity(3)observation.mode 是数值类别:standing=0mocap=1arms=2pause=3action 是当前 reference qpos: root_pos(3) + root_quat_wxyz(4) + joint_pos(29)action.hand 是手部 worker 最新的 LinkerHand 命令: left_pose(6) + right_pose(6),使用 SDK 的 0-255 pose 数值。