USB相机ROS驱动安装教程
USB相机ROS驱动安装教程
本文将详细介绍如何在ROS(机器人操作系统)环境中安装和使用USB相机驱动。通过V4L2接口,USB_CAM驱动可以将摄像头数据转换为ROS系统可以理解的格式,并发布到ROS主题上供其他节点使用。
1、USB_CAM驱动简介
USB_CAM并非传统意义上的Linux驱动,而是一个ROS(机器人操作系统)驱动。它是一个应用程序,通过V4L2接口设置摄像头并获取数据,然后利用ROS接口发布主题(Topic),供其他节点使用。V4L2是Linux内核提供给应用程序访问音视频驱动的统一接口,用于采集图片、视频和音频数据。
USB_CAM主要用于ROS环境中,作为连接USB摄像头和ROS系统的桥梁。它负责从摄像头捕获图像或视频数据,并转换为ROS系统可以理解的格式(如sensor_msgs::Image),然后发布到ROS主题上,供其他ROS节点订阅和使用。
在ROS中使用摄像头的前提是,摄像头在Linux系统下是可识别的。通常来说,遵循UVC协议的USB摄像头都可以正常使用。大部分笔记本电脑自带的摄像头都是UVC协议的,所以也可以直接使用。
驱动源码参考Github链接,拿来即用,只需修改部分参数适配本地相机。
2、检查相机
启动相机前,应该确认USB相机能够被Linux系统识别。执行以下指令:
ls /dev/video*
查看是否有相机设备被识别。输出结果示例如下:
这里偶数号(/dev/video0)表示真实物理相机,而奇数号(/dev/video1)则表示虚拟相机(无法正常打开)。一般来说,一个镜头会有一对奇偶设备号(如Intel的RealSense相机:双目红外+可见光)。但对于一部分非标件的双目相机,可能会被识别为一个相机设备,并将双目图像水平拼接为一张图发出。因此,在使用时可能需要通过代码将两幅图像分开使用。
设备号有利于后续开发过程中有针对性地获取某个镜头设备的数据,可以通过修改相机驱动包中特定yaml配置文件实现。
3、启动相机
非源码安装
sudo apt-get install ros-<rosdistro>-usb-cam # 将 rosdistro 切换为对应的ROS版本,比如 ROS1 的 melodic,ROS2 的 humble
创建工作空间
mkdir -p usb_driver/src
下载驱动源码
git clone https://github.com/ros-drivers/usb_cam.git # 仓库HEAD默认指向ROS2分支
git clone -b develop https://github.com/ros-drivers/usb_cam.git # 拉取develop分支使用ROS1版本
进入配置目录
cd usb_driver/src/usb_cam/config
修改配置文件
ROS2版本修改params_1.yaml
,ROS1版本修改usb_cam.yml
:主要修改设备号、帧率及分辨率,其他参数根据具体相机选择性修改。这里以params_1.yaml
为例。
如果需要将相机的参数发布出去,ROS2版本可以修改camera_info.yaml
中的各项参数,启动相机驱动后会以/camera_info
为话题名发布。
编译驱动
回到usb_driver
目录下,进行源码编译:
# ROS2指令
colcon build # 编译
source install/setup.bash # 初始化环境变量
# ROS1指令
catkin_make # 编译
source devel/setup.bash # 初始化环境变量
启动相机
# ROS2
ros2 run usb_cam usb_cam_node_exe --ros-args --params-file /path/to/usb_driver/src/usb_cam/config/params_1.yaml
# ROS1
rosrun usb_cam usb_cam_node 或 roslaunch usb_cam usb_cam.launch # 和ROS2类似
# 可以修改/usb_cam/src/usb_cam.cpp 或者 /usb_cam/launch/usb_cam.launch(注意remap参数以及默认加载的配置文件路径)调整参数
查看话题发布
# ROS2
ros2 topic list
# ROS1
rostopic list
# 图像数据一般会以 /image_raw 相关的名称发布,具体要看自己修改的参数
4、小结
非源码安装简单快捷但灵活性稍差,通过源码可以有更多更灵活的方式启动相机,可以启动多个相机以及通过launch方式启动,可以参考github上的指令实现。对于设备号为什么会有奇偶之分暂时不是太明白,欢迎在评论区讨论。