真机赛

真机赛任务介绍

任务简介

真机赛中使用的机器人为乐聚夸父4pro(kauvo 4 pro),末端执行器为灵巧手/夹爪

任务一

桌面物料分拣:机器人站立不动,完成pick and place操作。 夹取安全带、线缆、pin口(三种零件)放到对应的空盒子中

任务二

工业零件质检:将机械套管承重,根据亮灯情况判断合格与不合格,并产品分别放在指定区域

任务三

汽车大件上料:将汽车钣金料抓取,放置到指定区域

任务评分

每个任务将会测评十轮,最终得分为十轮得分的平均值

任务1:桌面物料分拣(100分)

测评时,会随机放置三种物料(安全带、线缆、pin口),每种物料各一个,共三个,评分标准如下:

  • 抓取成功且稳定:10分/每个物体,共30分

  • 准确放至指定位置:20分/每个物体,共60分

  • 全部完成奖励:10分

任务2:工业零件质检(100分)

测评时,会在任意一排放置五个套管,需要将一排五个套管全部抓取完成,并根据“绿灯合格,红灯不合格”的规则放置,评分标准如下:

  • 准确放至电子称:10分/每个套管,共50分

  • 正确放至目标区域:10分/每个套管,共50分

任务3:汽车大件上料(100分)

  • 抓取成功且稳定:40分

  • 准确放至指定位置:60分

真机赛数据介绍

备注

真机视频的size是848*480,区别于仿真数据的640*480

与仿真赛类似,我们提供的真机数据是原生的rosbag,各位选手可根据需要自行处理。真机数据的话题名称、话题内容、数据格式等均与仿真数据相同(除视频图像尺寸)。若仍然使用kuavo_data_challenge的baseline代码框架,则可完全按照之前仿真数据的数据转换、训练、推理流程。需要修改的部分是config文件中的部分配置。

考虑到在仿真赛环节大家的算力等问题,首批真机数据为每个任务1000条。若后续测试过程中诊断为数据量不够导致模型性能表现不佳,可以联系主办方补充数据。

真机数据下载地址(modelscope)

https://www.modelscope.cn/datasets/lejurobot/LET-Tianchi-Dataset

真机赛配置文件说明(可对照修改,最好不要直接复制粘贴)

数据转换(可能需要修改的地方有注释)

########不需要修改#######
hydra:
    run:
        dir: ./outputs/data_cvt_hydra_save/singlerun/${now:%Y%m%d_%H%M%S}
    sweep:
        dir: ./outputs/data_cvt_hydra_save/multirun/${now:%Y%m%d_%H%M%S}
        subdir: ${hydra:job.override_dirname}

########根据实际目录修改#######
rosbag:
    rosbag_dir: /path/to/your/rosbag
    num_used: null
    lerobot_dir: /path/to/your/lerobot/save/file

dataset:
    only_arm: true  # 默认true, 是否只使用手臂数据
    eef_type: rq2f85 # 真机可选:leju_claw, qiangnao,任务一二是夹爪 leju_claw,任务三是灵巧手 qiangnao
    which_arm: both  # 需要哪一只手臂的数据,可选: left, right, both,注意这会同时选择对应手臂的相机,已默认包含头部相机,任务一和三是单手操作,可以选right(但不是一定选),任务二必须选both
    use_depth: true  # 是否需要深度图像数据,与上面手臂保持一致的深度数据,目前本分支只有diffusion policy支持了深度,ACT policy暂不支持深度图像,但在dev分支中已经支持
    depth_range: [0, 1000]  # 深度图的裁剪范围,单位:毫米

    task_description: "Pick and Place"

    train_hz: 10
    main_timeline: head_cam_h
    main_timeline_fps: 30
    sample_drop: 10


    dex_dof_needed: 1

    is_binary: false
    delta_action: false
    relative_start: false

    resize:
        width: 848
        height: 480

模型推理配置文件

main分支(需要修改的config是kuavo_real_env.yaml,可能需要修改的地方有注释)

hydra:
    run:
        dir: ./outputs/kuavo_sim_deploy_hydra_save/singlerun/${now:%Y%m%d_%H%M%S}
    sweep:
        dir: ./outputs/kuavo_sim_deploy_hydra_save/multirun/${now:%Y%m%d_%H%M%S}
        subdir: ${hydra:job.override_dirname}


real: true # 设置为true,表示是真机赛配置

only_arm: true  # 设置为true,表示只使用手臂控制
eef_type: leju_claw  # 末端执行器类型,真机可选leju_claw或qiangnao: 根据任务使用的eef选择,任务一和二都是夹爪 leju_claw,任务三是灵巧手 qiangnao
control_mode: joint
which_arm: both  # 需要哪一只手臂的数据,可选: left, right, both,注意这会同时选择对应手臂的相机,已默认包含头部相机;任务一和三是单手操作,可以选right(但不是一定选),任务二必须选both
head_init: null

# input_images:输入图像,可选"head_cam_h",'depth_h','wrist_cam_l','depth_l','wrist_cam_r','depth_r'
# (每个都是可选,需要与你的机器人配置、训练模型一致)
# 通常:cameras = [{"left":['head_cam_h','wrist_cam_l'],
#                 "right":['head_cam_h','wrist_cam_r'],
#                 "both":['head_cam_h','wrist_cam_l','wrist_cam_r']
#                 },
#                 {"left":['head_cam_h','depth_h','wrist_cam_l','depth_l'],
#                 "right":['head_cam_h','depth_h','wrist_cam_r','depth_r'],
#                 "both":['head_cam_h','depth_h','wrist_cam_l','depth_l','wrist_cam_r','depth_r']
#                 }][int(self.use_depth)][self.which_arm]
input_images: ["head_cam_h",'depth_h','wrist_cam_l','depth_l','wrist_cam_r','depth_r'] # 目前本分支只有diffusion policy支持了深度,ACT policy暂不支持深度图像,但在dev分支中已经支持
depth_range: [0, 1000]  # 深度图的裁剪范围,单位:毫米,没有深度图时不起作用
image_size: [480, 848] # 图像大小(高,宽)
ros_rate: 10  # 推理频率,单位Hz

################### 以下环境配置为不建议改动配置################33
qiangnao_dof_needed: 1

leju_claw_dof_needed: 1

rq2f85_dof_needed: 1

arm_init: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

arm_min: [-180,-180,-180,-180,-180,-180,-180,-180,-180,-180,-180,-180,-180,-180]
arm_max: [180,180,180,180,180,180,180,180,180,180,180,180,180,180]

eef_min: [0]
eef_max: [1]

base_min: [-2.0, -2.0, -3.14, 0]
base_max: [2.0, 2.0, 3.14, 1]

is_binary: false

######### 以下为需要根据真机赛任务修改的配置 ###########
go_bag_path: /your_bag_path  # 真机推理时需要提供bag包的完整路径,请在kuavo_data_challenge仓库的任意地方存放此次任务的任意一个原始bag包,并给出正确路径

policy_type: "diffusion"  # 策略名字,支持diffusion,act等
use_delta: false # 是否使用增量动作,default=false(暂未支持)
eval_episodes: 10  # 测试回合数,真机推理可以连续推理,设置为10或者大于10数值均可
seed: 42
start_seed: 42
device: "cuda"
task: "your_task"
method: "your_method"
timestamp: "your_timestamp"
epoch: 1  # 使用训练保存的哪一个epoch。注意:代码将在outputs/<task>/<method>/run_<timestamp>/epoch10中load policy的模型参数
max_episode_steps: 500  # 最大回合步数,超过自动结束,根据任务所需时长调整,设置为500即可
env_name: Kuavo-Real  # kuavo仿真器环境名称

dev分支(可能需要修改的地方有注释)

hydra:
    run:
        dir: ./outputs/kuavo_deploy_hydra_save/singlerun/${now:%Y%m%d_%H%M%S}
    sweep:
        dir: ./outputs/kuavo_deploy_hydra_save/multirun/${now:%Y%m%d_%H%M%S}
        subdir: ${hydra:job.override_dirname}

env:
    env_name: Kuavo-Real  # kuavo环境名称,仿真Kuavo-Sim,真机Kuavo-Real
    control_mode: joint # joint 或 eef (正在开发中)
    eef_type: leju_claw  # 末端执行器类型,真机可选leju_claw或qiangnao: 根据任务使用的eef选择,任务一和二都是夹爪 leju_claw,任务三是灵巧手 qiangnao
    which_arm: both  # 需要哪一只手臂的数据,可选: left, right, both,注意这会同时选择对应手臂的相机,已默认包含头部相机;任务一和三是单手操作,可以选right(但不是一定选),任务二必须选both
    head_init: null  # 机器人头部初始位置,仿真请默认使用这个值,保持观测统一, 真机可根据需要调整,一般为null!!!
    ros_rate: 10  # 推理控制频率,单位Hz

    only_arm: true  # 默认true, 是否只使用手臂数据

    image_size: &IMGSIZE [848, 480]  # 图像大小:宽,高
    depth_range: &DEPTHRANGE [0, 1500]  # 深度图范围设置,单位mm,default=[0,1500]
    obs_key_map:  # 话题、消息类型、频率、图像尺寸、深度裁剪等配置,深度图范围设置,单位mm,default=[0,1500],请注意需要与训练保持一致!
        head_cam_h: ["/cam_h/color/image_raw/compressed", "CompressedImage", 30, *IMGSIZE]  # 头部RGB相机话题,必选
        wrist_cam_l: ["/cam_l/color/image_raw/compressed", "CompressedImage", 30, *IMGSIZE]  # 左手腕RGB相机话题,请对应选择,与下至少选择一个
        wrist_cam_r: ["/cam_r/color/image_raw/compressed", "CompressedImage", 30, *IMGSIZE]  # 右手腕RGB相机话题,请对应选择,与上至少选择一个
        depth_h: ["/cam_h/depth/image_raw/compressedDepth", "CompressedImage", 30, *IMGSIZE, *DEPTHRANGE]  # 头部相机深度图话题,可与上述对应选
        depth_l: ["/cam_l/depth/image_rect_raw/compressedDepth", "CompressedImage", 30, *IMGSIZE, *DEPTHRANGE]  # 左手腕相机深度图话题,可与上述对应选
        depth_r: ["/cam_r/depth/image_rect_raw/compressedDepth", "CompressedImage", 30, *IMGSIZE, *DEPTHRANGE]  # 右手腕相机深度图话题,可与上述对应选
        joint_q: ["/sensors_data_raw", "sensorsData", 500]  # 关节角度话题,必选
        qiangnao: ["/dexhand/state", "JointState", 500]  # 末端执行器的话题,灵巧手
        leju_claw: ["/leju_claw_state", "lejuClawState", 500]  # 末端执行器的话题,夹爪
        rq2f85: ["/gripper/state", "JointState", 500]  # 末端执行器的话题,仿真中夹爪

    arm_state_keys: ["joint_q","gripper"]  # 默认不动,模型观测输入的手臂状态包含关节角度和夹爪开合状态
    frame_alignment: false  # 是否启用帧对齐,default=false
    ratio: 1.0 # 使用帧对齐时,获取最近观测占所有历史观测的比例,default=1.0

    limits:
        joint_q:
        min: [-3.14, -3.14, -3.14, -3.14, -3.14, -3.14, -3.14, -3.14, -3.14, -3.14, -3.14, -3.14, -3.14, -3.14]
        max: [3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14, 3.14]

        gripper:
        min: [0, 0]
        max: [1, 1]

        eef:
        min: [-1, -1, -1, -3.14, -3.14, -3.14, -1, -1, -1, -3.14, -3.14, -3.14]
        max: [1, 1, 1, 3.14, 3.14, 3.14, 1, 1, 1, 3.14, 3.14, 3.14]

        eef_relative:
        min: [-0.005, -0.0075, -0.004, -0.03, -0.03, -0.05, -0.005, -0.0075, -0.004, -0.03, -0.03, -0.05]
        max: [0.005, 0.0075, 0.004, 0.03, 0.03, 0.05, 0.005, 0.0075, 0.004, 0.03, 0.03, 0.05]

        base:
        min: [-2.0, -2.0, -3.14, 0]
        max: [2.0, 2.0, 3.14, 1]

    # 以下环境配置为不建议改动配置

    qiangnao_dof_needed: 1

    is_binary: false

inference:
    go_bag_path: /path/to/your/go.bag # 真机推理时需要提供bag包的完整路径,请在kuavo_data_challenge仓库的任意地方存放此次任务的任意一个原始bag包,并给出正确路径
    policy_type: "act"  # 策略名字,支持diffusion,act等
    eval_episodes: 10  # 测试回合数,真机推理可以连续推理,设置为10或者大于10数值均可
    seed: 42
    start_seed: 42
    device: "cuda"
    task: "your_task"
    method: "your_method"
    timestamp: "your_timestamp"
    epoch: best  # 使用训练保存的哪一个epoch,可填50,100,best等,注意:代码将在outputs/train/<task>/<method>/<timestamp>/epoch<epoch>中load policy的模型参数
    max_episode_steps: 500  # 最大回合步数,设置为500即可

真机赛提交说明

跟仿真赛同理,真机赛代码提交也是环境和代码打包为 docker 镜像。具体步骤如下: 1. 配置docker加速,打包环境:可参考仿真赛 提交说明 docker/readme 步骤1-2

  1. 复制以下Dockerfile模板(专为真机赛的定制版),修改必要参数,例如Conda环境名、Conda环境包名、添加额外必要系统、python包等,保存为项目根目录下的 Dockerfile

    # =========================
    # Stage 1: Builder
    # =========================
    FROM ros:noetic-ros-core-focal AS builder
    
    ARG DEBIAN_FRONTEND=noninteractive
    
    # 国内APT源
    RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
       sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
    
    # 安装必要工具和ROS依赖
    RUN apt-get update && apt-get install -y \
       curl wget gnupg2 lsb-release sudo ca-certificates build-essential bzip2 \
       ros-noetic-cv-bridge \
       ros-noetic-apriltag-ros \
       && rm -rf /var/lib/apt/lists/*
    
    # 安装 Miniforge
    ENV MINIFORGE_URL="https://mirrors.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/LatestRelease/Miniforge3-Linux-x86_64.sh"
    RUN curl -L ${MINIFORGE_URL} -o /tmp/miniforge.sh \
       && bash /tmp/miniforge.sh -b -p /opt/conda \
       && rm /tmp/miniforge.sh
    
    ENV PATH="/opt/conda/bin:${PATH}"
    ENV LANG=C.UTF-8
    ENV LC_ALL=C.UTF-8
    
    # 配置国内镜像并安装 mamba
    RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ \
       && conda config --set show_channel_urls yes \
       && conda install -y mamba -c conda-forge
    
    # 工作目录
    WORKDIR /root/kuavo_data_challenge
    COPY . .
    
    # 解压 Conda 环境并安装项目
    # TODO: 修改Conda环境名和包名,请确保每一个myenv都修改全
    RUN if [ -f "myenv.tar.gz" ]; then \
          mkdir -p ./myenv && tar -xzf myenv.tar.gz -C ./myenv && rm myenv.tar.gz; \
       fi && \
       /bin/bash -c "\
          source ./myenv/bin/activate && \
          conda-unpack && \
          pip install -e . && \
          cd ./third_party/lerobot && pip install -e . -i https://mirrors.aliyun.com/pypi/simple/ && \
          pip install deprecated kuavo_humanoid_sdk==1.2.2 opencv-python==4.11.0.86 opencv-python-headless==4.11.0.86 numpy==1.26.4 -i https://mirrors.aliyun.com/pypi/simple/ && \
          conda clean -afy && \
          rm -rf ./myenv/lib/python*/site-packages/*/tests ./myenv/lib/python*/site-packages/*/test ./myenv/pkgs/* \
       "
    
    # =========================
    # Stage 2: Final
    # =========================
    FROM ros:noetic-ros-core-focal
    
    # 设置工作目录
    WORKDIR /root/kuavo_data_challenge
    
    # 复制 Conda 环境和项目代码
    COPY --from=builder /opt/conda /opt/conda
    COPY --from=builder /root/kuavo_data_challenge /root/kuavo_data_challenge
    
    # 环境变量
    ENV PATH="/opt/conda/bin:${PATH}"
    ENV LANG=C.UTF-8
    ENV LC_ALL=C.UTF-8
    
    RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
       sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
    # TODO: 如果需要安装其它系统包,请在这里插入
    RUN apt-get update && apt-get install -y \
       ros-noetic-cv-bridge \
       ros-noetic-apriltag-ros \
       && rm -rf /var/lib/apt/lists/*
    
    # 保留 ROS 环境变量
    # 激活 Conda 环境
    RUN echo "source /opt/ros/noetic/setup.bash" >> /root/.bashrc && \
       echo "source /root/kuavo_data_challenge/myenv/bin/activate" >> /root/.bashrc && \
       echo "chmod 777 -R /root/kuavo_data_challenge/kuavo_deploy" >> /root/.bashrc && \
       echo "export ROS_IP=192.168.26.10" >> /root/.bashrc && \
       echo "export ROS_MASTER_URI=http://kuavo_master:11311" >> /root/.bashrc
    
    # 默认命令
    CMD ["bash"]
    
  2. 后续步骤同仿真赛提交说明4-5,注意修改run_with_gpu.sh中的docker镜像名称为你刚刚打包的真机赛镜像名称即可。

真机赛成绩说明

真机赛的返回结果将包含以下内容:

  1. 任务平均得分:十轮测试的平均总得分与小分

  2. 每轮评测得分:每轮测试的总得分与小分

  3. 每轮评测视频:每轮测试的机器人操作视频(第三视角)

  4. log文件:每轮测试的详细log文件,来源 log/kuavo_deploy/kauavo_deploy.log