# ros2_hik_camera

A ROS2 packge for Hikvision USB3.0 industrial camera

## Usage

```
ros2 launch hik_camera hik_camera.launch.py
```

离线视频回放（VideoPlayerNode，用于没有相机时跑全链路/复现）：

```bash
ros2 run hik_camera video_player_node --ros-args --params-file <your_video_player_params.yaml>
```

也可以在整套工程里通过 rm_bringup 启动（推荐），此时相机参数通常来自：

- rm_bringup/config/node_params/camera_driver_params.yaml

注意：rm_bringup 里加载的是自己的参数文件，hik_camera 包内的 config 主要用于“单独启动 hik_camera.launch.py”时测试。

## Params

以下参数均为 `camera_driver` 节点的 ROS 参数（YAML 中写在 `/**/ros__parameters` 下面即可）：

- `camera_info_url`：标定文件 URL（如 `package://rm_bringup/config/camera_info.yaml`）
- `camera_name`：相机名字标签（主要给 CameraInfo/工具识别用，不影响取图）
- `camera_frame_id`：发布图像的 frame_id，默认 `camera_optical_frame`
- `use_sensor_data_qos`：是否使用 sensor_data QoS

成像控制：

- `exposure_time`：曝光时间（单位：us），支持运行时 `ros2 param set`
- `gain`：增益，支持运行时 `ros2 param set`
- `auto_white_balance`：自动白平衡（0=Off，非0=Continuous）
- `frame_rate`：期望帧率（会尝试下发到相机的 `AcquisitionFrameRate*` 节点；不同型号可能不支持）

ROI / 裁剪（已接入海康 SDK 的 Width/Height/OffsetX/OffsetY，且会按相机的 min/max/inc 自动对齐）：

- `resolution_width`
- `resolution_height`
- `offsetX`
- `offsetY`

像素格式（发布端输出格式，驱动会用 SDK 转码后发布）：

- `pixel_format`：`rgb8`（默认）/ `bgr8` / `mono8`

录像：

- `recording`：是否录制，`true` 时保存到 `~/fyt2024-log/video/<timestamp>.avi`

VideoPlayerNode 参数（与 rm_bringup/config/node_params/video_player_params.yaml 对齐）：

- `path`：视频文件路径
- `frame_rate`：发布帧率
- `start_frame`：从第几帧开始发布（前面只读不发）
- `keep_looping`：播到结尾是否循环
- `frame_id`：发布 frame_id

示例：
/**:
	ros__parameters:
		camera_info_url: package://rm_bringup/config/camera_info.yaml
		camera_name: narrow_stereo
		camera_frame_id: camera_optical_frame
		pixel_format: rgb8

		exposure_time: 2500
		gain: 15.0
		auto_white_balance: 1
		frame_rate: 210

		resolution_width: 1280
		resolution_height: 1024
		offsetX: 0
		offsetY: 0

		recording: false

```

## Topics

- `image_raw`：图像（Image）
- `image_raw/camera_info`：相机标定信息（CameraInfo）
- `camera_driver/heartbeat`：心跳（Int64，自增，1Hz）

## Health / Reconnect

- 驱动包含看门狗：超过 5 秒没有收到新帧会触发 `close()` 并自动重连 `open()`。

## Daheng 风格参数说明（为什么有些需要重启）

在本工程里，类似 `resolution_width/height`、`offsetX/Y`、`auto_white_balance`、`frame_rate` 这类参数属于“相机配置”，通常是在相机 `open()` 时一次性下发到硬件。

- 对 Daheng 原实现：运行时只支持动态改 `exposure_time/gain`；其它参数改 YAML 后需要重启节点生效。
- 对当前 Hik 实现：这些参数已支持运行时动态改（`ros2 param set` 会立即尝试下发到相机），但具体是否成功取决于相机型号是否暴露对应 GenICam 节点（失败会 WARN）。

