ros2_hik_camera
A ROS2 packge for Hikvision USB3.0 industrial camera
Usage
ros2 launch hik_camera hik_camera.launch.py
离线视频回放(VideoPlayerNode,用于没有相机时跑全链路/复现):
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_frameuse_sensor_data_qos:是否使用 sensor_data QoS
成像控制:
exposure_time:曝光时间(单位:us),支持运行时ros2 param setgain:增益,支持运行时ros2 param setauto_white_balance:自动白平衡(0=Off,非0=Continuous)frame_rate:期望帧率(会尝试下发到相机的AcquisitionFrameRate*节点;不同型号可能不支持)
ROI / 裁剪(已接入海康 SDK 的 Width/Height/OffsetX/OffsetY,且会按相机的 min/max/inc 自动对齐):
resolution_widthresolution_heightoffsetXoffsetY
像素格式(发布端输出格式,驱动会用 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)。