本帖最后由 jujubond 于 2024-11-27 17:26 编辑
1. 传感器介绍
机器人传感器类型和作用简介:
数采场景下,机器人传感器分为本体传感器+外部传感器。
本体传感器分布:
外部传感器分布:
2. 数据采集范围
具身数据采集,包括采集本体的关节数据+各传感器数据,各模块采集频率不一,落盘时单独录制,再基于时间戳对齐进行处理。
2.1 视觉感知数据
RGBD相机,相机的内参和外参信息如下表所示:
- 数据采集前需要进行外参标定;
- 相机的内外参需要保存在每个episode的meta_info中;
雷达数据
数采机器人某些场景会用到激光雷达数据(雷达点云数据质量高于RGBD点云质量)。
2.2 力觉感知数据
其中,
3 数据采集流程
- 按照 task_id->job_id->collector_id->episode_id 的目录结构管理数据:
- {
- "task_id": "xxx", // 任务模板的唯一id
- "task_name": "烤面包", // 任务名
- "task_usage": "试采", // 任务用途:正式任务,试采任务,测试任务,仿真评测
- "task_state": "运营中", // 任务状态:未发布、运营中、已归档
- "robot_type": "humanoid", //采集设备类型,
- # bimanual:双臂
- # single_arm:单臂
- # AGV:自动导引车
- # quadrupedal:四足的
- # wheeled:轮式的
- # humanoid:人形机器人
- "ee_type": "omnipicker", // 采集末端类型
- "telecontrol_type": "VR", // 遥操类型:动捕、VR
- "scene_label": "工业场景", // 任务所属场景,如工业、家居、超市等
- "collect_mode": "双臂", // 任务采集模式,如单臂、双臂、全身等
- "task_instance_list":[ // 单个任务下的实例任务列表
- {
- "job_id": "xxx", // 动作的唯一id
- "initial_state_desp":"初始场景文本描述", // 描述初始场景布局,包括机器人位姿、操作物体位姿等
- "action_config":[ // 动作过程配置:起止时间 + 文本 + 原子能力
- {
- "start_time": "0.0",
- "end_time": "8.0",
- "action_text":"使用右臂打开 @微波炉1",
- "skill": "open"
- },
- {
- "start_time": "8.0",
- "end_time": "15.0",
- "action_text":"使用右臂抓起 @面包2 放进 @微波炉1",
- "skill": "pick_place"
- },
- {
- "start_time": "15.0",
- "end_time": "20.0",
- "action_text":"关闭 @微波炉1",
- "skill": "close"
- },
- ],
- "max_collectors": 50, // 单个动作的最多领取/参与采集员数
- "num_per_collector": 20, // 单个采集员的重复采集次数
- "collector_list":[ // 采集员列表
- {
- "user_id":"xxx", // 采集员唯一id
- "user_name":"xxx", // 采集员姓名
- },
- ....
- ],
- ...
- },
- ...
- ],
- ...
- }
复制代码
数采设备管理(云端)
- 云端维护设备列表,设备需要完成注册准入平台后才能进行采集工作;
- 云端维护不同本体+末端的URDF;
- {
- "device_SN": // 采集设备的SN号
- {
- "robot_name": "青龙01", // 机器人名称
- "robot_type": "humanoid", //设备类型
- "ee_type": "omnipicker", // 采集末端类型
- "robot_urdf": "tos://", // urdf存储地址
- "device_status": "已注册", // 设备状态:未注册、已注册
- "register_time": "2024-08-12 12:00:00",
- "update_time": "2024-08-12 12:00:00"
- },
- ...
- }
复制代码 数据落盘格式
- // 落盘数据举例
- ├── meta_info.json // 基础信息汇总
- ├── camera // camera rgbd数据
- │ ├── cam_left_wrist
- │ │ ├── color // 以时间戳命名
- │ │ │ └── png or jpeg
- │ │ └── depth // 以时间戳命名
- │ │ └── png
- │ ├── cam_right_wrist
- │ │ ├── color
- │ │ │ └── png or jpeg
- │ │ └── depth
- │ │ └── png
- │ ├── cam_head
- │ │ ├── color
- │ │ │ └── png or jpeg
- │ │ └── depth
- │ │ └── png
- │ ├── cam_head_front_fisheye
- │ │ ├── head_front_fisheye.h265
- │ │ └── head_front_fisheye.txt // 帧对齐信息
- │ ├── cam_head_left_fisheye
- │ │ ├── head_left_fisheye.h265
- │ │ └── head_left_fisheye.txt
- │ ├── ...
- ├── lidar // 雷达数据
- ├── record // ros消息, *.bag,记录遥操数据、控制指令数据(h5)、本体执行数据(臂、手、底盘等, h5)
- │ ├── .bag
- │ ├── raw_joints.h5
- ├── logs // 各模块log数据
- ├── parameters // 传感器外参,软硬件参数等
- │ ├── hardware // 硬件版本号和软件版本号
- │ ├── camera //相机的内参外参怎么体现
- │ │ ├── cam_head
- │ │ ├── ...
- │ │ └── back_left_fisheye
- ├── config // 各个算法模型的配置文件
- │ ├── wbc
- │ ├── hal
- │ ├── remote_hal
- │ ├── hmi
- │ ├── feature_manager
- │ └── algorithm
- └── others // 其他文件,除meta_info外,其他文件不放在根目录
- // meta_info.json
- {
- "version": "v0.0.1", //落盘meta_info的版本号,由采集端决定,需向前兼容
- "author": "青龙01",
- "robot_type": "humanoid", // 本体类型
- "camera_list":["cam_left_wrist", "cam_right_wrist",...],
- "camera_type":["d405", "d435",...],
- "camera_fps": "30", // 相机fps
- "fisheye_fps": "30", // 鱼眼fps
- "ee_type": "30", // 末端类型
- "task_id": "1234", // 云端任务模板id
- "job_id": "",// 云端实例任务id
- "episode_id": 10032, // 数据id
- "duration": "18.02s",
- "file_size": "500.12 MB",
- "create_time": "2024-09-23 09:42:50",
- }
- // raw_joints.h5
- {
- "state": {
- "timestamp": [] // 精确到纳秒,Unix时间戳
- "joint":{
- "effort": [], // 力矩
- "velocity": [], // 速度
- "position": [], // 关节数据
- "attribute":{ // joint 的 attribute,这里不是key,只是展示说明附在joint上
- "name":[], // 关节名称,与落盘数据顺序对应
- }
- },
- "robot":{
- "velocity": [], // 机体速度 {odom}系
- "angular ": [], // 机体角速度 {odom}系
- "position": [], // 机体位置 {odom}系
- "orientation": [], // 机体姿态 {odom}系 四元数
- "position_drift": [], // odom->map dirft
- "orientation_drift": [], // odom->map dirft 四元数
-
- "end_velocity": [], // 末端速度 {B}系
- "end_angular ": [], // 末端角速度 {B}系
- "end_position": [], // 末端位置 {B}系
- "end_orientation": [], // 末端姿态XYZ+臂形角 {B}系
- "end_arrival": true, // 可不填
-
- "attribute":{ // robot 的 attribute,这里不是key,只是展示说明附在robot上
- "name":[], // base_link 名称,end_link名称(从左到右)
- }
- },
- "effector":{
- "force": [], // 末端夹具/五指手力数据
- "position": [], // 末端夹具/五指手关节角度
- "clamped": true, // 可不填
- "attribute":{ // effector的attribute,这里不是key,只是展示说明附在effector上
- "name":[], // 末端名称,与落盘数据顺序对应
- }
- },
- },
- "action": { // 关节期望指令 国际单位
- "timestamp": [] // 精确到纳秒,Unix时间戳
- "joint":{
- "effort": [], // 力矩
- "velocity": [], // 速度
- "position": [], // 关节数据
- "attribute":{ // joint 的 attribute,这里不是key,只是展示说明附在joint上
- "name":"", // 关节名称,与落盘数据顺序对应
- }
- },
- "robot":{
- "velocity": [], // 机体速度 {odom}系
- "orientation": [], // 机体姿态 {odom}系 四元数
- // 或者是"angular": [], // 机体角速度 {odom}系?
- "end_position": [], // 末端位置 {B}系
- "end_orientation": [], // 末端姿态XYZ+臂形角 {B}系
- "attribute":{ // robot 的 attribute,这里不是key,只是展示说明附在robot上
- "name":[], // base_link 名称,end_link名称(从左到右)
- }
- },
- "effector":{
- "force": [], // 末端夹具/五指手力数据
- "position": [], // 末端夹具/五指手关节角度
- "attribute":{ // effector的attribute,这里不是key,只是展示说明附在effector上
- "name":[], // 末端名称,与落盘数据顺序对应
- }
- }
- }
- }
复制代码
云端进行数据标注审核,现阶段包括关键帧标注和质量打标。
- "label_info":{ //标注信息
- "is_valid": "false", //动作是否有效
- "is_completed": "true", //动作是否完成
- "error_label":"动作不流畅", //错因标签
- "action_config":[ // 动作过程配置:起止时间 + 文本 + 原子能力
- {
- "start_time": "0.0",
- "end_time": "7.5",
- "action_text":"使用右臂打开 @微波炉",
- "skill": "open"
- },
- {
- "start_time": "7.5",
- "end_time": "16.0",
- "action_text":"使用右臂抓起 @面包2 放进 @微波炉1",
- "skill": "pick_place"
- },
- {
- "start_time": "16.0",
- "end_time": "22.0",
- "action_text":"关闭 @微波炉1",
- "skill": "close"
- },
- ],
-
- "key_frame":[ //关键帧标注
- "frame_id":{
- "start_index": "100",
- "end_index": "120",
- "content":"这是一段文本描述"
- },
- ...
- ]
- }
复制代码
|