# 仿真车端代理

这个模块模拟真实 Windows 小车上的车端电脑。

它的职责是：

- 监听与真实车端一致的 TCP 端口。
- 接收 `vehicle_agent_gateway` 发来的底盘/运控请求。
- 校验 `vehicle_id` 和动作参数。
- 把被接受的动作转换为私有 Isaac 执行器话题。
- 执行完成后返回标定任务结果。
- 对底盘动作和运控评估做任务互斥，避免同时控制车辆。
- 支持急停请求。
- 通过 WiFi6/TCP 接收外部真值位姿，并对工控机下发的轨迹做闭环跟踪。
- 订阅底盘遥测作为速度反馈，不把底盘里程计作为默认全局位姿源。
- 发布车端电脑与车辆本体之间的内部阿克曼控制命令、车辆状态、健康状态和时间同步状态。

默认私有控制话题：

```text
/vehicle/<vehicle_id>/actuator/cmd_vel
```

默认车辆内部话题：

```text
/vehicle/<vehicle_id>/internal/ackermann_cmd
/vehicle/<vehicle_id>/internal/state
/vehicle/<vehicle_id>/internal/health
/vehicle/<vehicle_id>/internal/time_sync_status
```

默认一键仿真的 TCP 端口：

```text
9000 车端统一 WiFi6/TCP 入口，由 isaac_vehicle_unified_agent_sim.py 对外暴露
```

车间工控机不应该直接发布这个话题。它应该通过：

```text
workshop_orchestrator -> vehicle_agent_gateway -> vehicle_agent_sim -> Isaac cmd_vel
```

在默认仿真部署中，`vehicle_agent_gateway` 实际连接的是 `9000` 统一入口；不同 frame_type 在统一车端 agent 内部分发。

启动：

```bash
python3 src/simulation/tools/launch_sim_stack.py --component vehicle-agent
```

直接启动脚本：

```bash
source install/setup.bash
python3 src/simulation/tools/isaac_vehicle_unified_agent_sim.py \
  --vehicle-id demo_agv_001 \
  --vehicle-port 9000 \
  --cmd-vel-topic /vehicle/demo_agv_001/actuator/cmd_vel \
  --external-pose-topic /isaac/external_localization/telemetry \
  --external-pose-transport wifi6_tcp \
  --chassis-telemetry-topic /chassis/telemetry
```

验收：

```bash
source install/setup.bash
python3 src/simulation/tools/smoke_test_vehicle_agent.py
```

小距离运动验收：

```bash
python3 src/simulation/tools/smoke_test_vehicle_agent.py --motion
```

底盘动作和运控评估一起验收：

```bash
python3 src/simulation/tools/smoke_test_vehicle_agent.py --motion --control-eval
```

无 Isaac 时验证轨迹接口：

```bash
python3 src/simulation/tools/smoke_test_vehicle_agent.py --trajectory --fake-telemetry
```

验证分段轨迹下发：

```bash
python3 src/simulation/tools/smoke_test_vehicle_agent.py --trajectory --fake-telemetry --split-trajectory
```

外部真值链路：

- `external_pose_wifi6_bridge.py` 订阅 Isaac 或外部真值系统发布的 `ExternalLocalizationTelemetry`。
- 桥接程序把位姿按 31/32 帧类型推送到车端统一 `9000` 端口，再由统一车端 agent 写入车端位姿缓存。
- 车端只把底盘里程计作为显式降级输入，不作为默认全局位姿源。

当前支持的仿真任务：

- 底盘直线动作
- 底盘圆弧动作
- 运控轨迹跟踪，基于 WiFi6/TCP 外部真值位姿做 Pure Pursuit 闭环控制；短轨迹默认整包下发，长轨迹可用 `trajectory_id`、`segment_index`、`total_segments` 分段上传，最后一段触发拼接执行
- 运控速度阶跃
- 运控加减速
- 运控停车精度的简化执行
- 车辆内部接口仿真：阿克曼命令、底盘状态、健康诊断、时间同步

现场部署时，外部真值/定位系统也应按同一语义经 WiFi 6 传到车端；仿真中由 Isaac 的 external truth 发布器提供同形态数据，再由桥接程序转成 TCP 输入。
