配置

EVA 配置是 Python .py 文件,非 YAML。--config 选定文件,_base_ 串接继承链。

前置条件

开环回放

开环把一段已录制的 episode 完整地走一遍流水线,无需机器人、无需策略服务器:

bash
eva --config configs/00_openloop/ur5e_openloop.py

其他开环文件:arx_r5_openloop.pydual_agilex_AGILEX_openloop.pydual_franka_openloop.pyr1lite_openloop.py,位于 configs/00_openloop/。启动成功时 EVA 打印控制台 URL;失败则停在 Python 报错处(常见原因为 --config 路径错误或回放数据集缺失)。

--config 是必填项。没有预设菜单——行为完全来自传入的文件。--web-port 用于更改控制台端口。

配置工作机制

文件布局

路径用于
configs/00_base/defaults.py所有设置的默认值。仅供查阅,不修改。
configs/00_openloop/<robot>_openloop.py数据集回放。无需机器人或策略服务器。
configs/01_deploy/<robot>/_base.py单机器人共享的部署设置:type、transport、夹爪限位。
configs/01_deploy/<robot>/openpi_qpos.py · openpi_eef.py真机部署预设。复制其一作起点。
configs/02_collection/<robot>.py遥操作录制。见数据录制
configs/03_evaluation/<robot>_eval.py多检查点对比。见评测配置

继承与覆盖

EVA 按逐项设置合并父子配置:

继承链可多层,例如 ur5e_eval.pyur5e/openpi_qpos.py00_base/defaults.py。下例中带 的字段是用户典型要改的项。

configs/01_deploy/<robot>/openpi_qpos.py
_base_ = ['_base.py']          # 继承本机器人的共享部署设置。

policy = dict(
    type='openpi',        # 后端:openpi / openpi_rtc / starvla / gr00t / mock / replay。
    host='<策略服务器IP>',   # ← 不填则保持 127.0.0.1。
    port=<策略服务器端口>,    # ← 策略服务器端口。
)

inference_cfg = dict(
    debug_tasks=['<任务指令>'],  # ← 任务指令。
    # 不写 obs_space / action_space 即保持关节角控制。
)

默认按关节角(JointState)控制。改为末端执行器(EEFPose)控制时同时覆盖两空间,n_arms 设为机器人手臂数:

python
inference_cfg = dict(
    obs_space=dict(type='EEFPose', n_arms=<手臂数>, rotation='quat', include_gripper=True),    # ← 1 或 2。
    action_space=dict(type='EEFPose', n_arms=<手臂数>, rotation='quat', include_gripper=True),  # ← 同样的手臂数。
)

设置参考

robot

设置默认值含义
type"agilex_AGILEX"agilex_AGILEX / arx_r5 / dual_franka / agibot_g2 / r1_lite / ur5e 之一。
initial_qposNone启动关节位姿。None 使用机器人内置默认。
eef_reference_frame"base_link"末端执行器位姿所参照的坐标系。
gripper_threshold0.5开/合阈值。None 表示禁用。
gripper_open / gripper_close1.0 / 0.0完全张开/闭合的命令值(单位因机器人而异)。

transport

EVA 读传感器、发命令所用的通道。见传输层

设置默认值含义
type"ros1"ros1 / ros2 / zmq / dataset
node_name"eva_client"EVA 在 ROS 图中注册的名字。
convert_bgr_to_rgbTrue模型看到图像前重排颜色通道。
image_height / image_width224 / 224送入模型的图像尺寸。
resize_padTrue保持纵横比缩放并补白;否则拉伸。
image_layout"chw"chwhwc
sub_endpoint / pub_endpointtcp://127.0.0.1:5555 / :5556type='zmq' 时的 ZMQ 端点。
dataset_dir / episode_id"" / 0type='dataset' 时的录制目录与 episode。
dataset_keysstate / eef / action + 相机映射录制中各列与相机的映射。
disabled_cameras / disabled_groups[] / []运行时忽略的相机或传感器组。
topics{}ROS 话题。已在各部署 _base.py 中按机器人填好。

policy

与策略服务器的连接。见策略后端

设置默认值含义
type"openpi"openpi / openpi_rtc / starvla / gr00t / mock / replay
host / port127.0.0.1 / 9000策略服务器地址。预设通常只改 port
backend_options{}后端专属扩展项。

inference_cfg

obs_spaceaction_spaceJointStateEEFPose 间切换;见动作空间

设置默认值含义
obs_spacedict(type='JointState')传给模型的状态表示。
action_spacedict(type='JointState')模型输出的解读方式。EEFPose 增加 n_arms / rotation / include_gripper
inference_rate3.0每秒请求计划次数。
publish_rate30每秒下发命令次数。
setup_warmup_chunks2正式执行前的预热 chunk 数。开环置 0
debug_tasks['pour soybean', 'put cup']DEBUG 控制台中的起始指令。

inference_strategies

自带五种具名策略,可在控制台中实时切换。引用时只用左列的名字;见推理策略

名字默认调参
syncexecute_horizon=5
async(无)
naivelatency_k=4
actexp_weight_m=0.01
rtc(无)

collection · eval_cfg · work_dir

collection 配置遥操作录制(列、相机、手臂);该段存在即把配置标记为录制配置——见数据录制eval_cfg 配置多检查点对比(下节细讲)。work_dir(默认 "work_dirs")是产物输出根目录。

评测配置

评测配置让多个检查点在同一批任务上对比。它继承一个部署预设并填入 eval_cfg 段,列出 checkpoints 与 tasks;EVA 会替你加载每个模型的部署配置并指向正确的服务器。

configs/03_evaluation/<robot>_eval.py
_base_ = ['../01_deploy/<robot>/openpi_qpos.py']   # ← 该机器人的部署预设。

eval_cfg = dict(
    trials_per_prompt=5,           # 每模型每任务试次数。
    cli_mode='real',             # 'real' 或 'sim'。
    inference_strategy='async',    # 上表中的策略名。
    reset_after_each_trial=False,  # True 表示每个试次后复位到起始姿态。
    checkpoints=[
        dict(
            name='<模型标签>',                 # ← 在 EVAL 选择器中显示在槽位字母(Model A/B/…)旁边作为标签。
            config='../01_deploy/<robot>/openpi_qpos.py',  # ← 相对本文件。
            port=<策略服务器端口>,            # ← 该模型的端口。
        ),
        # 每个模型一个 dict。
    ],
    tasks=[
        dict(prompt_en='<英文任务指令>'),  # ← 每个任务一项。
    ],
)
python
enable_ssh_forward=True,
ssh=dict(
    host='<远程主机>',
    user='<SSH 用户名>',
    port=<远程端口>,    # 远程上策略服务器的端口。
    # remote_sync_dir='<远程结果路径>',  # 可选:把结果拷回此处。
),

启动流水线

eva --config 启动时依次:

启动失败会打印 Python 栈,指出出问题的段或文件——多见于 --config 或某个 checkpoint config 路径打错,或录制配置缺必填列。