SmartEDT/汽车数字孪生系统_数据交互协议.md

571 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 汽车数字孪生系统
主控程序和Unity数据交互协议文档
# 一、系统交互
系统由两台独立主机组成:
• 主控程序(负责传感器数据采集、系统控制、数据记录存储等)
• Unity数字孪生负责三维场景渲染、运动计算、视频录制
数据流向:
| | | | |
| --- | --- | --- | --- |
| **数据类型** | **方向** | **频率** | **说明** |
| InitConfig | 主控 → Unity | 1次/任务 | 初始化车辆、驾驶员、场景配置 |
| Command | 主控 → Unity | 低频 | 开始/停止/暂停等控制指令 |
| DriveData | 主控 → Unity | 50Hz | 传感器数据驱动虚拟车运动 |
| FrameRecord | Unity → 主控 | 50Hz | 车辆位置记录用于回放 |
| Status | Unity → 主控 | 按需 | Unity运行状态反馈 |
# 二、InitConfig - 初始化配置
方向:主控 → Unity
频率:任务开始时发送 1 次
用途:配置车辆信息、驾驶员信息、场景参数、录制设置
{
"msgType": "init", // 消息类型:初始化配置
"timestamp": 1737388800000, // 发送时间戳
"session": { // ===== 会话信息 =====
"sessionId": "sess\_20250120\_143000\_001", // 会话唯一ID
"taskId": "task\_brake\_001", // 任务ID
"taskName": "紧急制动测试", // 任务名称(显示用)
"createTime": "2025-01-20 14:30:00", // 创建时间(可读格式)
"syncTimestamp": 1737388800000 // 同步基准时间戳(数据/视频对齐用)
},
"driver": { // ===== 驾驶员信息 =====
"driverId": "D20250001", // 驾驶员编号
"name": "张三", // 驾驶员姓名
"department": "培训一部", // 所属部门
"level": "初级学员", // 学员等级/身份
"avatar": "" // 头像URL或预制
},
"vehicle": { // ===== 车辆配置 =====
"vehicleId": "V003", // 车辆编号
"model": "改装教学车A型", // 车型名称
"plateNo": "沪A·12345", // 车牌号
"color": "#FFFFFF", // 车身颜色(十六进制)
"colorName": "珍珠白" // 颜色名称(显示用)
},
"scene": { // ===== 场景配置 =====
"sceneId": "scene\_03", // 场景ID
"sceneName": "城市道路", // 场景名称
"sceneFile": "CityRoad", // Unity场景文件名
"weather": "sunny", // 天气sunny/rain/fog/night
"spawnPoint": "SpawnPoint\_A", // 出生点预制体名称
"hasGpsMapping": true // 该场景是否有GPS坐标映射
},
"recording": { // ===== 录制设置 =====
"enabled": true, // 是否启用录制
"recordId": "rec\_20250120\_143000\_001", // 录制ID与视频文件关联
"frameRate": 50, // 数据录制帧率
"videoFrameRate": 30, // 视频录制帧率
"videoResolution": "1280x720" // 视频分辨率
},
"vehicleParams": { // ===== 车辆物理参数 =====
"wheelRadius": 0.32, // 轮胎半径(米)
"steeringRatio": 15.5, // 方向盘转向比
"wheelbase": 2.68 // 轴距(米)
}
}
# 三、Command - 控制指令
方向:主控 → Unity
频率:低频,人工触发时发送
用途系统控制、模式切换、回放控制、相机和UI控制
{
"msgType": "command", // 消息类型:控制指令
"timestamp": 1737388800000, // 发送时间戳
"seqId": 1, // 指令序列号(递增)
"action": "start", // ===== 主动作 =====
// start - 开始任务
// stop - 停止任务
// pause - 暂停
// resume - 恢复
// reset - 重置到起点
// emergency\_stop - 紧急制动
"mode": { // ===== 模式设置(可选)=====
"type": "realtime", // realtime - 实时驱动模式
// playback - 回放模式
// standby - 待机模式
"playbackId": null // 回放模式时指定录制ID
},
"playback": { // ===== 回放控制(回放模式有效)=====
"action": "play", // play/pause/seek/setSpeed
"seekFrame": 0, // 跳转到指定帧号
"seekTime": 0.0, // 跳转到指定时间(秒)
"playSpeed": 1.0 // 播放速度倍率
},
"camera": { // ===== 相机控制(可选)=====
"viewMode": "chase", // driver - 驾驶员视角
// chase - 追尾视角
"fov": 60 // 视野角度
},
"ui": { // ===== UI控制暂定根据UI调整=====
"showDashboard": true, // 显示仪表盘
"showTelemetry": true, // 显示遥测数据面板
"showTrajectory": false, // 显示行驶轨迹线
"showMinimap": true // 显示小地图
}
}
# 四、DriveData - 实时驱动数据
方向:主控 → Unity
频率50Hz每 20ms 一帧)
用途传感器数据驱动Unity虚拟车辆运动
{
"msgType": "drive", // 消息类型:驱动数据
"ts": 1737388800123, // 时间戳(毫秒)
"seq": 50001, // 帧序列号(递增,丢帧检测用)
// ==================== 运动控制核心 ====================
"speed": 45.6, // 车速km/h
"steer": 12.5, // 方向盘角度(度)左负右正
"wheelRpm": { // 各轮转速rpm
"fl": 650.0, // 左前轮 Front-Left
"fr": 652.0, // 右前轮 Front-Right
"rl": 648.0, // 左后轮 Rear-Left
"rr": 649.0 // 右后轮 Rear-Right
},
// ==================== 踏板状态 ====================
"throttle": 0.35, // 油门/电门开度 0.0~1.0
"brake": 0.0, // 刹车开度 0.0~1.0
"handbrake": 0.0, // 手刹开度 0.0~1.0
// ==================== 传动系统 ====================
"gear": 3, // 挡位:-1倒挡/0空挡/1~N前进挡
"engine": { // 发动机/电机数据(可选)
"rpm": 2800, // 转速rpm可选
"torque": 180.5 // 输出扭矩N·m可选
},
// ==================== IMU数据可选====================
"imu": { // 惯性测量单元
"ax": 0.15, // X轴加速度m/s²纵向
"ay": -0.02, // Y轴加速度m/s²垂直
"az": 0.05, // Z轴加速度m/s²横向
"gx": 0.01, // X轴角速度rad/s俯仰
"gy": 0.005, // Y轴角速度rad/s横滚
"gz": 0.12 // Z轴角速度rad/s偏航
},
// ==================== 车灯状态 ====================
"lights": { // 车灯
"head": 1, // 大灯0关/1近光/2远光
"turn": 0, // 转向灯0关/1左/2右/3双闪
"brake": false, // 刹车灯
"reverse": false, // 倒车灯
"fog": false // 雾灯
},
// ==================== 其他状态 ====================
"misc": { // 其他
"horn": false, // 喇叭
"wiper": 0, // 雨刷0关/1低速/2高速
"seatbelt": true // 安全带是否系好
}
}
# 五、FrameRecord - 帧记录数据
方向Unity → 主控
频率50Hz每 20ms 一帧)
用途记录Unity计算的车辆绝对位置用于精确回放
{
"msgType": "frame", // 消息类型:帧记录
"ts": 1737388800123, // 时间戳(毫秒)
"seq": 50001, // 帧序列号与DriveData对应
"elapsed": 100.02, // 相对任务开始的时间(秒)
// ==================== 车辆位置Unity世界坐标====================
"pos": { // 位置
"x": 1250.35, // X坐标
"y": 0.42, // Y坐标/高度(米)
"z": 3560.78 // Z坐标
},
// ==================== 车辆旋转 ====================
"rot": { // 旋转(四元数)程序用
"x": 0.0,
"y": 0.383,
"z": 0.0,
"w": 0.924
},
"euler": { // 旋转(欧拉角,度)便于查看
"pitch": 0.5, // 俯仰角(抬头为正)
"yaw": 45.2, // 偏航角/航向(顺时针为正)
"roll": -0.1 // 横滚角(右倾为正)
},
// ==================== 速度向量 ====================
"vel": { // 速度
"x": 32.1, // X方向速度m/s
"y": 0.0, // Y方向速度m/s
"z": 31.8, // Z方向速度m/s
"speed": 45.2 // 合速度km/h
},
// ==================== 车轮状态(视觉还原用)====================
"wheels": { // 车轮
"steerAngle": 12.5, // 前轮实际转向角(度)
"fl": { // 左前轮
"rot": 1250.6, // 累计旋转角度(度)
"susp": 0.05 // 悬挂压缩量(米)
},
"fr": { // 右前轮
"rot": 1252.1,
"susp": 0.04
},
"rl": { // 左后轮
"rot": 1248.3,
"susp": 0.03
},
"rr": { // 右后轮
"rot": 1249.0,
"susp": 0.03
}
},
// ==================== 视觉状态 ====================
"visual": { // 视觉状态
"gear": 3, // 挡位显示
"steerWheel": 45.0, // 方向盘角度(内饰视角用)
"speedometer": 45.6, // 速度表读数
"tachometer": 2800, // 转速表读数
"lights": { // 车灯状态
"head": 1,
"turn": 0,
"brake": false,
"reverse": false
}
},
// ==================== GPS显示数据学校场景用 ====================
"gps": { // GPS坐标从Unity坐标换算
"valid": true, // 该场景是否有GPS映射
"lat": 31.230416, // 纬度
"lng": 121.473701, // 经度
"alt": 4.5, // 海拔(米)
"heading": 45.2 // GPS航向
}
}
# 六、Status - Unity状态反馈
方向Unity → 主控
频率:状态变化时发送,或主控查询时响应
用途反馈Unity运行状态、性能指标、错误信息
{
"msgType": "status", // 消息类型:状态反馈
"ts": 1737388800000, // 时间戳
"state": "running", // ===== Unity当前状态 =====
// loading - 加载场景中
// ready - 就绪,等待开始
// running - 任务运行中
// paused - 已暂停
// stopped - 已停止
// playback - 回放中
// error - 出错
"scene": { // ===== 场景状态 =====
"loaded": true, // 场景是否加载完成
"sceneId": "scene\_03", // 当前场景ID
"spawnPointFound": true // 出生点预制体是否找到
},
"recording": { // ===== 录制状态 =====
"isRecording": true, // 是否正在录制
"recordId": "rec\_20250120\_143000\_001", // 当前录制ID
"frameCount": 15000, // 已录制帧数
"duration": 300.0 // 已录制时长(秒)
},
"performance": { // ===== 性能指标 =====
"fps": 58, // 当前帧率
"renderTime": 12.5, // 渲染耗时ms
"physicsTime": 2.3, // 物理计算耗时ms
"encodeTime": 8.2 // 视频编码耗时ms
},
"connection": { // ===== 连接状态 =====
"lastDriveDataSeq": 50001, // 最后收到的DriveData序列号
"lastDriveDataTime": 1737388800123, // 最后收到DriveData的时间
"dataLossCount": 0 // 累计丢帧数
},
"error": { // ===== 错误信息 =====
"code": 0, // 错误码0表示无错误
"message": "" // 错误描述
}
}
# 状态汇总:
## 车灯状态
| | | |
| --- | --- | --- |
| **字段** | **值** | **说明** |
| head | 0 / 1 / 2 | 大灯:关 / 近光 / 远光 |
| turn | 0 / 1 / 2 / 3 | 转向灯:关 / 左 / 右 / 双闪 |
| wiper | 0 / 1 / 2 | 雨刷:关 / 低速 / 高速 |
| gear | -1 / 0 / 1~N | 挡位:倒挡 / 空挡(N/P) / 前进挡 |
## Unity状态
| | |
| --- | --- |
| **state值** | **说明** |
| loading | 加载场景中 |
| ready | 就绪,等待开始指令 |
| running | 任务运行中(实时模式) |
| paused | 已暂停 |
| stopped | 已停止 |
| playback | 回放模式运行中 |
| error | 发生错误 |
## 天气
| | |
| --- | --- |
| **weather值** | **说明** |
| sunny | 晴天 |
| rain | 雨天 |
| fog | 雾天 |
| night | 夜间 |