跳到主要内容

数据格式约定文档

Protobuf 数据结构

本系统采用 Protocol Buffers 作为主要的数据序列化格式,定义在以下 proto 文件中:

  • body_tracking_extended.proto: 主要的VR数据结构
  • hand_wrench_srv.proto: 物品质量与力相关服务
  • delayed_diagnosis.proto: 延迟诊断相关数据

主要消息类型

VRData

主要的数据容器,包含所有类型的VR和机器人数据:

字段类型描述
headerHeader消息头,包含时间戳和ID
full_bodyFullBodyData全身骨骼数据(可选)
upper_bodyUpperBodyData上半身骨骼数据(可选)
controllerControllerData手柄数据(可选)
robot_dataRobotData机器人数据(可选)
vr_commandVrCommandDataVR命令数据(可选)
delayed_diagnosis_commandDelayDiagnosticCommand延迟诊断命令(可选)

PICO VR 下发的数据格式

PICO VR 中的应用会下发包含在 VRData 消息中的以下几种数据类型:

1. 全身骨骼数据 (FullBodyData)

包含完整的身体骨骼追踪信息,每个关节的位置和旋转数据。

数据结构变化:

  • 原有版本:24个关节数据
  • 当前版本:25个数据(24个关节 + 1个脚部状态)

数据组织:

  • Index 0-23:标准身体关节的位置和旋转数据
  • Index 24:脚部状态编码(特殊用途)

脚部状态编码说明 (Index 24)

Index 24 的 Pose 数据被特殊用作脚部接地状态编码,而非传统的关节位置数据:

字段用途值范围描述
pos_x左脚状态0.0 或 1.01.0 = 接地,0.0 = 抬起
pos_y右脚状态0.0 或 1.01.0 = 接地,0.0 = 抬起
pos_z保留字段0.0未使用,固定为 0.0
rot_qx保留字段0.0未使用,固定为 0.0
rot_qy保留字段0.0未使用,固定为 0.0
rot_qz保留字段0.0未使用,固定为 0.0
rot_qw保留字段0.0未使用,固定为 0.0

使用示例:

  • 双脚着地:pos_x = 1.0, pos_y = 1.0
  • 左脚抬起,右脚着地:pos_x = 0.0, pos_y = 1.0
  • 右脚抬起,左脚着地:pos_x = 1.0, pos_y = 0.0
  • 双脚抬起(跳跃):pos_x = 0.0, pos_y = 0.0

2. 上半身骨骼数据 (UpperBodyData)

仅包含上半身骨骼追踪信息,适用于桌面VR应用场景。

3. 手柄数据 (ControllerData)

包含左右手柄的按键状态、摇杆位置、扳机值等信息:

字段类型描述
primary_buttonbool主按钮状态
secondary_buttonbool副按钮状态
grip_buttonbool握把按钮状态
trigger_buttonbool扳机按钮状态
grip_valuedouble握把值 (0.0 到 1.0)
trigger_valuedouble扳机值 (0.0 到 1.0)
thumbstickrepeated double摇杆位置 [x, y]

4. VR命令数据 (VrCommandData)

包含VR端发出的控制命令:

  • 物品质量与力配置请求
  • 控制模式切换命令

5. 延迟诊断命令 (DelayDiagnosticCommand)

用于启动或停止延迟诊断功能:

字段类型描述
runbooltrue=启动, false=停止/取消

机器人端上传数据格式

机器人端通过 RobotData 消息上传以下信息:

1. 物品质量与力响应 (ItemMassForceResponse)

响应VR端的物品质量力配置请求:

字段类型描述
operationItemMassForceOperation操作类型 (GET/SET)
statusOperationStatus操作状态 (SUCCESS/ERROR/TIMEOUT/INVALID_REQUEST)
descriptionstring操作描述
item_mass_forcesrepeated ItemMassForce物品质量力配置列表

2. 电机电流数据 (motor_cur)

机器人各关节电机的当前电流值数组。

3. 末端执行器电流 (eef_cur)

末端执行器(如手爪)的电流值数组。

4. 控制模式 (ControlMode)

当前机器人的控制模式字符串。

5. 延迟诊断结果 (DelayedDiagnosisResult)

延迟诊断功能的执行结果:

字段类型描述
statusStatus状态 (NOT_STARTED/IN_PROGRESS/SUCCESS/FAILED/FORCE_KILLED)
messagestring状态描述信息
progressdouble执行进度 (0.0 到 1.0)
resultResult诊断结果(可选)

诊断结果 (Result)

包含系统辨识的最终结果:

字段类型描述
bias_calibdouble偏置校准值
time_delay_calibdouble时间延迟校准值 (秒)
bandwidthdouble带宽 (-3dB) Hz
mean_coherencedouble平均相干性

详细的 Protobuf 数据结构

Pose 消息

骨骼关节的位置和旋转数据结构,也用于特殊状态编码:

字段类型标准用途特殊用途(Index 24)
pos_xdoubleX轴位置坐标左脚状态 (0.0=抬起, 1.0=接地)
pos_ydoubleY轴位置坐标右脚状态 (0.0=抬起, 1.0=接地)
pos_zdoubleZ轴位置坐标保留字段 (固定为 0.0)
rot_qxdouble四元数旋转X分量保留字段 (固定为 0.0)
rot_qydouble四元数旋转Y分量保留字段 (固定为 0.0)
rot_qzdouble四元数旋转Z分量保留字段 (固定为 0.0)
rot_qwdouble四元数旋转W分量保留字段 (固定为 0.0)

注意:

  • Index 0-23: 使用标准用途,表示关节的3D位置和四元数旋转
  • Index 24: 使用特殊用途,仅 pos_x 和 pos_y 字段有效,用于脚部接地状态编码

ItemMassForce 消息

物品质量与力配置数据:

字段类型描述
case_namestring配置名称
descriptionstring配置描述
item_massdouble物品质量 (kg)
lforce_xdoubleX轴力 (N)
lforce_ydoubleY轴力 (N)
lforce_zdoubleZ轴力 (N)

Header 消息

所有消息的通用头部:

字段类型描述
timestampgoogle.protobuf.Timestamp消息时间戳
idint64消息唯一标识符

服务接口

物品质量与力服务

基于 hand_wrench_srv.proto 定义的服务接口:

请求 (ItemMassForceRequest)

字段类型描述
operationItemMassForceOperationGET=获取配置, SET=设置配置
dataItemMassForce当operation为SET时的配置数据(可选)

响应 (ItemMassForceResponse)

字段类型描述
operationItemMassForceOperation操作类型回显
statusOperationStatus操作状态
descriptionstring操作描述信息
item_mass_forcesrepeated ItemMassForceGET操作返回的配置列表

延迟诊断功能

基于 delayed_diagnosis.proto 定义的诊断功能:

诊断状态枚举

  • NOT_STARTED: 未开始
  • IN_PROGRESS: 进行中
  • SUCCESS: 成功
  • FAILED: 失败
  • FORCE_KILLED: 强制停止

ROS 数据格式

Topics

PICO 手柄数据

话题名称: /pico/joy

话题描述: 发布 PICO 左右手柄数据

数据类型: kuavo_msgs/JoySticks

字段类型描述
left_xfloat32左手柄摇杆X轴位置
left_yfloat32左手柄摇杆Y轴位置
left_triggerfloat32左手柄扳机值 (0.0 到 1.0)
left_gripfloat32左手柄握把值 (0.0 到 1.0)
left_first_button_pressedbool左手柄主按钮按下状态 (X按键)
left_second_button_pressedbool左手柄副按钮按下状态 (Y按键)
left_first_button_touchedboolpico不支持这个参数
left_second_button_touchedboolpico不支持这个参数
right_xfloat32右手柄摇杆X轴位置
right_yfloat32右手柄摇杆Y轴位置
right_triggerfloat32右手柄扳机值 (0.0 到 1.0)
right_gripfloat32右手柄握把值 (0.0 到 1.0)
right_first_button_pressedbool右手柄主按钮按下状态 (A按键)
right_second_button_pressedbool右手柄副按钮按下状态 (B按键)
right_first_button_touchedboolpico不支持这个参数
right_second_button_touchedboolpico不支持这个参数

PICO手柄

VR 数据主题

话题名称: /pico/vr_data

话题描述: 发布基于 Protobuf 格式的完整 VR 数据

数据类型: 基于 VRData Protobuf 消息序列化的二进制数据

机器人状态主题

话题名称: /robot/status

话题描述: 发布机器人当前状态和传感器数据

数据类型: 基于 RobotData Protobuf 消息序列化的二进制数据

Services

物品质量与力配置服务

服务名称: /robot/item_mass_force_config

服务描述: 获取或设置物品质量与力参数配置

请求类型: ItemMassForceRequest (Protobuf) 响应类型: ItemMassForceResponse (Protobuf)

延迟诊断服务

服务名称: /robot/delayed_diagnosis

服务描述: 启动或停止延迟诊断功能,获取诊断结果

请求类型: DelayDiagnosticCommand (Protobuf) 响应类型: DelayedDiagnosisResult (Protobuf)

使用说明

数据流向

  1. VR -> 机器人: PICO VR 通过 WebSocket 发送 VRData 消息
  2. 机器人 -> VR: 机器人通过 WebSocket 发送 RobotData 响应
  3. 内部处理: ROS节点将 Protobuf 数据转换为 ROS 消息格式

集成步骤

  1. 使用提供的 .proto 文件生成对应语言的代码
  2. 建立 WebSocket 连接进行数据传输
  3. 根据消息类型解析对应的数据结构
  4. 通过 ROS 接口访问转换后的数据