在Ubuntu系统下进行ROS2开发海康工业相机的设备服务节点,
- CMake (3.16.1及以上版本)
- OpenCV (4.2.0及以上版本)
-
ROS2 (Foxy及以上版本)
- [海康工业相机SDK]
- [官方Demo下载链接]
1、安装过程
1、确认你的系统组成
输入下面指令,查看系统版本
bash
uname -a
2、安装ROS2环境,可以使用一键安装
3、安装海康机器人MVS

3.1 下载使用linux版本
若系统内核版本显示有 x86_64 x86_64 x86_64 GNU/Linux
安装包对应的操作系统
x86架构64位系统:
MVS-x.x.x_x86_64_xxxxxxxx.deb
MVS-x.x.x_x86_64_xxxxxxxx.tar.gz
x86架构32位系统:
MVS-x.x.x_i386_xxxxxxxx.deb
MVS-x.x.x_i386_xxxxxxxx.tar.gz
说明:
1. 根据系统名称选择相对应的安装包:在终端中输入"uname -a"命令,根据输出的信息选择安装包,例如:输出的信息包含x86_64就选择x86架构64位的安装包;
2. .deb安装包通过dpkg命令安装,主要应用于ubuntu等系统;如sudo dpkg -i MVS-4.6.1_x86_64_20251113.deb
3. .tar.gz安装包是一个压缩包,通tar命令解压后,再执行setup.sh脚本进行安装。
如
tar -zxvf MVS-4.6.1_x86_64_20251113.tar.gz
cd MVS-4.6.1_x86_64_20251113
sudo ./setup.sh
3.2 下载安装ARM版本
若系统内核版本显示aarch64 aarch64 aarch64 GNU/Linux,则系统是ARM 64 位架构,适配 Jetson 嵌入式平台。
安装包对应的操作系统
arm架构64位系统:
MVS-x.x.x_aarch64_xxxxxxxx.deb
MVS-x.x.x_aarch64_xxxxxxxx.tar.gz
arm架构32位系统:
MVS-x.x.x_armhf_xxxxxxxx.deb
MVS-x.x.x_armhf_xxxxxxxx.tar.gz
MVS-x.x.x_arm-none_xxxxxxxx.tar.gz
说明:
1. 根据系统名称选择相对应的安装包:在终端中输入"uname -a"命令,根据输出的信息选择安装包,例如:输出的信息包含aarch64就选择aarch64的安装包;
2. .deb安装包通过dpkg命令安装,主要应用于ubuntu等系统;如 sudo dpkg -i MVS-3.0.1_aarch64_20251113.deb
3. .tar.gz安装包是一个压缩包,通tar命令解压后,再执行setup.sh脚本进行安装。
如
tar -zxvf MVS-3.0.1_aarch64_20251113.tar.gz
cd MVS-3.0.1_aarch64_20251113
sudo ./setup.sh
3.3 若MVS安装过程中提示【依赖未满足】错误
使用下面指令
bash
# 自动安装缺失的依赖,并修复破损的安装包
sudo apt-get install -f
3.4 安装完成后,验证
bash
cd /opt/MVS/bin
./MVS.sh
如果能打开MVS交互界面,则安装成功
4、安装ROS2组件
下载ROS2的demo包,然后使用Colcon 编译
4.1 创建工作目录
bash
mkdir -p ~/project_hkcam/src
4.2. 将示例程序复制到工作目录
bash
cp -r ./mvcc_camera_ros2 ~/project_hkcam/src
cp -r ./mvcc_camera_ros2_interface ~/project_hkcam/src
4.3. 进入工作目录并编译
bash
cd ~/project_hkcam
colcon build
4.4. 打开终端设置环境
bash
source ./install/setup.bash
4.5. 在当前终端下启动程序
5、程序说明
5.1 发布模式
hik_camera_image_pub
- 支持传入配置文件并将参数配置到相机中
- 回调方式从SDK中获取图像,发布图像
- 发布标准图像:
/mvcc_camera/Image/mvcc_camera/ImageInfo(图像格式 mono8,rgb8) - 发布自定义图像:
/mvcc_camera/FrameInfo(仅当检测有外部客户端订阅时发布)(图像格式 mono8,rgb8)
- 发布标准图像:
- 创建参数配置服务端
- 支持客户端参数配置/读取命令
- 支持 float 类型:
get_float_valueset_float_value - 支持 string 类型:
get_string_valueset_string_value - 支持 command 类型:
execute_command - 支持 enum 类型:
get_enum_valueset_enum_value - 支持 int 类型:
get_integer_valueset_integer_value - 支持 bool 类型:
get_bool_valueset_bool_value
- 支持 float 类型:
- 支持客户端参数配置/读取命令
5.2 订阅模式
hik_camera_image_sub
搭配 hik_camera_image_pub 使用
- 接收图像
- 订阅并接收标准图像:
/mvcc_camera/Image/mvcc_camera/ImageInfo - 订阅并接收自定义图像:
/mvcc_camera/FrameInfo
- 订阅并接收标准图像:
- 参数配置(若服务端支持,则配置)
- 创建参数配置客户端,进行部分相机参数配置
hik_camera_params_test
搭配 hik_camera_image_pub 使用
bash
ros2 run mvcc_camera_ros2 hik_camera_params_test
- 参数配置客户端
- 发送读取/配置命令到服务端(配置相机),接收响应结果
6、启动程序
6.1 直接启动 (单个组件)
6.1.1 默认参数直接启动
bash
ros2 run mvcc_camera_ros2 hik_camera_image_pub
6.1.2 带序列号启动
若序列号是纯数字,需要添加string以确保ROS2将其识别为字符串类型
bash
ros2 run mvcc_camera_ros2 hik_camera_image_pub --ros-args -p cam_sn:='string:00775075482'
ros2 run mvcc_camera_ros2 hik_camera_image_pub --ros-args -p cam_sn:='J72215431'
6.1.3 指定配置文件路径启动
路径要是相对路径,或者绝对路径
bash
ros2 run mvcc_camera_ros2 hik_camera_image_pub --ros-args --params-file ./src/mvcc_camera_ros2/config/hik_camera_config.yaml
6.2通过 launch 文件启动 (推荐)
launch中可以配置多个组件启动
6.2.1默认启动(第一个相机)
bash
ros2 launch mvcc_camera_ros2 connect_by_config.xml
6.2.2指定相机序列号
bash
ros2 launch mvcc_camera_ros2 connect_by_config.xml cam_sn:="J72215431"
6.3 配置文件说明
| 文件名 | 功能说明 |
|---|---|
| connect_by_config.xml | 支持传入 cam_sn(可选),加载配置文件 config/hik_camera_config.yaml,启动 hik_camera_image_pub 和 hik_camera_image_sub |
7、启动方式说明
7.1 单独启动
bash
# 启动订阅者
ros2 run mvcc_camera_ros2 hik_camera_image_sub
# 启动发布者
ros2 run mvcc_camera_ros2 hik_camera_image_pub
7.2 一起启动
bash
# 启动订阅者和发布者
ros2 launch mvcc_camera_ros2 connect_by_config.xml
8、注意事项
-
相机序列号需要加引号,若序列号是纯数字,需要添加string以确保ROS2将其识别为字符串类型
- 示例:
cam_sn:='string:00775075482'或cam_sn:='A75075482'
- 示例:
-
可以使用launch文件更方便地设置参数
-
参数文件来设置参数,参数文件位于
config/hik_camera_config.yaml- 参数文件中的节点名称必须与实际运行的节点名称完全相同,否则参数将无法正确应用
- 可以手动增加/删除配置文件中的节点,实现对新功能的配置
- 当前示例 hik_camera_image_pub 是连接相机后,加载配置文件参数,并配置到相机中,之后取流,发布图像
9、包说明
xml
mvcc_camera_ros2/ # 相机组件
├── common/ # 接口文件
│ ├── camera_parameter_service_manager.h # 参数配置接口 头文件 (.srv 通信接口文件)
│ └── hik_camera.h # 相机SDK接口封装 头文件
├── config/ # 配置文件
│ └── hik_camera_config.yaml # ROS组件加载的配置文件
├── launch/ # launch 启动脚本
│ └── connect_by_config.xml
├── src/ # 源文件
│ ├── camera_parameter_service_manager.cpp # .srv 通信接口 实现
│ ├── hik_camera.cpp # 相机SDK接口封装 实现
│ ├── create_camera_image_pub.cpp # 相机ROS组件 发布端
│ ├── create_camera_image_sub.cpp # 相机ROS组件 接收端
│ └── camera_params_test.cpp # 相机ROS组件 参数配置服务
├── CMakeLists.txt # 编译脚本
└── package.xml # 包配置
mvcc_camera_ros2_interface/ # 相机组件接口文件
├── msg/ # .msg接口文件
│ ├── ChunkDataContent.msg # chunk接口文件
│ └── FrameInfo.msg # 自定义FrameInfo接口文件
├── srv/ # .srv 配置文件
│ ├── ExecuteCommand.srv # execute_command 接口定义
│ ├── GetBoolValue.srv # get_bool_value 接口定义
│ ├── SetBoolValue.srv # set_bool_value 接口定义
│ ├── GetEnumValue.srv # get_enum_value 接口定义
│ ├── SetEnumValue.srv # set_enum_value 接口定义
│ ├── GetFloatValue.srv # get_float_value 接口定义
│ ├── SetFloatValue.srv # set_float_value 接口定义
│ ├── GetIntegerValue.srv # get_integer_value 接口定义
│ ├── SetIntegerValue.srv # set_integer_value 接口定义
│ ├── GetStringValue.srv # get_string_value 接口定义
│ └── SetStringValue.srv # set_string_value 接口定义
├── CMakeLists.txt # 编译脚本
└── package.xml # 包配置