# 仿真车端传感器代理

这个模块模拟真实 Windows 小车上的传感器采集服务。

职责：

- 订阅 Isaac 发布的车载传感器 ROS2 topic。
- 将前视相机、下视相机、3D 激光雷达、2D 激光雷达、IMU 转成与 `VehicleSensorFrame` 对齐的 JSON payload。
- 默认由统一车端 agent 对外提供；本模块也可作为独立传感器后端调试使用。
- 对图像和点云支持按 `fragment_index / total_fragments` 分片读取。
- 发布车端内部 `SensorLinkStatus`，用于描述传感器在线、帧率、丢帧和延迟。

默认一键仿真的 TCP 端口：

```text
9000 车端统一 WiFi6/TCP 入口
```

默认订阅：

```text
/sensor/front_camera/image_raw
/sensor/down_camera/image_raw
/sensor/lidar_3d/pointcloud
/sensor/lidar_2d/scan
/sensor/imu/data
```

默认内部状态话题：

```text
/vehicle/<vehicle_id>/internal/sensor_link_status
```

启动：

```bash
source install/setup.bash
python3 src/simulation/tools/launch_sim_stack.py --component sensor-agent
```

无 Isaac 验收：

```bash
source install/setup.bash
python3 src/simulation/tools/smoke_test_vehicle_sensor_agent.py --fake-sensors
```

帧类型：

```text
21 SENSOR_GET_READINESS_REQ
22 SENSOR_GET_READINESS_RSP
23 SENSOR_GET_LATEST_FRAME_REQ
24 SENSOR_GET_LATEST_FRAME_RSP
25 SENSOR_LIST_SENSORS_REQ
26 SENSOR_LIST_SENSORS_RSP
```

正式现场部署时，真实 Windows 车端应订阅本车传感器驱动数据，再按 `sensor_calibration.proto` 中的 `VehicleSensorFrame` 通过 WiFi6 提供给车间电脑。

车间侧接入：

```bash
source install/setup.bash
python3 src/simulation/tools/launch_sim_stack.py --component sensor-ingest
```

默认会通过车端统一 `9000` 端口读取最新帧，再重新发布到：

```text
/workshop/vehicle_sensor/demo_front_camera/image_raw
/workshop/vehicle_sensor/demo_down_camera/image_raw
/workshop/vehicle_sensor/demo_lidar_3d/pointcloud
/workshop/vehicle_sensor/demo_lidar_2d/scan
/workshop/vehicle_sensor/demo_imu/data
```

后续传感器标定算法应订阅这些车间侧 topic，而不是直接订阅 Isaac 原始 `/sensor/...` topic。
