ROS配置并同时驱动多个UVC相机(含功能包)

配置并同时驱动多个UVC相机,并将数据保存为ROS话题形式的bag文件。

ROS可以同时驱动多个UVC相机。要实现这个目标并将数据保存成ROS话题的形式,再保存为bag文件,可以按照以下步骤操作:

1. 安装必要的包

复制代码
sudo apt-get update
sudo apt-get install ros-melodic-usb-cam ros-melodic-image-view ros-melodic-rosbag

2. 连接并识别UVC相机

连接所有的UVC相机到你的系统,然后使用以下命令确认系统识别了这些相机:

复制代码
ls /dev/video*

你应该能看到多个类似于 /dev/video0, /dev/video1 的设备节点,这些节点对应不同的相机。

3. 配置USB相机节点

为每个相机配置一个usb_cam节点。在你的ROS工作空间中创建一个新的包,例如 multi_cam

复制代码
cd ~/catkin_ws/src
catkin_create_pkg multi_cam rospy std_msgs sensor_msgs

multi_cam 包下创建 launch 目录并添加 multi_cam.launch 文件:

复制代码
mkdir -p ~/catkin_ws/src/multi_cam/launch
sudo gedit ~/catkin_ws/src/multi_cam/launch/multi_cam.launch

将下面的内容复制到 multi_cam.launch 文件中并保存。

bash 复制代码
<launch>
  <!-- 启动第一个相机节点 -->
  <node name="usb_cam1" pkg="usb_cam" type="usb_cam_node" output="screen">
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="mjpeg" />
    <param name="camera_frame_id" value="camera1" />
    <param name="frame_rate" value="30" /> <!-- 设置采样频率为 30 FPS -->
  </node>

  <!-- 启动第二个相机节点 -->
  <node name="usb_cam2" pkg="usb_cam" type="usb_cam_node" output="screen">
    <param name="video_device" value="/dev/video1" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="mjpeg" />
    <param name="camera_frame_id" value="camera2" />
    <param name="frame_rate" value="30" /> <!-- 设置采样频率为 30 FPS -->
  </node>

  <!-- 启动第三个相机节点 -->
  <node name="usb_cam3" pkg="usb_cam" type="usb_cam_node" output="screen">
    <param name="video_device" value="/dev/video2" />
    <param name="image_width" value="2560" />
    <param name="image_height" value="1440" />
    <param name="pixel_format" value="mjpeg" />
    <param name="camera_frame_id" value="camera3" />
    <param name="frame_rate" value="30" /> <!-- 设置采样频率为 30 FPS -->
  </node>

  <!-- 启动第四个相机节点 -->
  <node name="usb_cam4" pkg="usb_cam" type="usb_cam_node" output="screen">
    <param name="video_device" value="/dev/video3" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="mjpeg" />
    <param name="camera_frame_id" value="camera4" />
    <param name="frame_rate" value="30" /> <!-- 设置采样频率为 30 FPS -->
  </node>
</launch>

4. 编译工作空间

编译你的工作空间:

复制代码
cd ~/catkin_ws
catkin_make
source devel/setup.bash

5. 启动相机节点

使用你创建的启动文件来启动相机节点:

复制代码
roslaunch multi_cam multi_cam.launch

6. 验证相机数据

你可以使用 rqt_image_view 检查相机发布的图像话题:

复制代码
rosrun rqt_image_view rqt_image_view

7. 记录bag文件

使用 rosbag 记录相机数据到bag文件:

复制代码
rosbag record /usb_cam1/image_raw /usb_cam2/image_raw /usb_cam3/image_raw /usb_cam4/image_raw

如果多次警告可以进行如下操作:

bash 复制代码
rosbag record --buffsize=1024 /usb_cam1/image_raw &
rosbag record --buffsize=1024 /usb_cam2/image_raw &
rosbag record --buffsize=1024 /usb_cam3/image_raw &
rosbag record --buffsize=1024 /usb_cam4/image_raw &

这将记录相机发布的图像话题到一个bag文件中。

8. 停止并保存bag文件

当你完成数据记录时,按 Ctrl+C 停止记录,bag文件将保存到当前目录。

9. 额外提示

如果你有多个相机,确保每个相机的 video_device 参数和 camera_frame_id 参数是唯一的。你可以根据需要添加更多的相机节点到启动文件中。

10. WARN提醒解决方案

WARN\] \[1721910884.444759008\]: rosbag record buffer exceeded. Dropping oldest queued message. \[ WARN\] \[1721910889.464797358\]: rosbag record buffer exceeded. Dropping oldest queued message. \[ WARN\] \[1721910894.497846400\]: rosbag record buffer exceeded. Dropping oldest queued message. \[ WARN\] \[1721910899.573648293\]: rosbag record buffer exceeded. Dropping oldest queued message. fairlee@vivobook:\~/catkin_ws/src$

解决方法

增加缓冲区大小 :你可以增加 rosbag 记录的缓冲区大小,以减少消息丢失。使用 --buffsize 选项指定缓冲区大小(以MB为单位)

bash 复制代码
rosbag record --buffsize=1024 /usb_cam1/image_raw /usb_cam2/image_raw /usb_cam3/image_raw /usb_cam4/image_raw

降低帧率:如果可能,考虑降低相机帧率,以减少数据生成速率。

提升磁盘写入速度:确保你使用的是一个高速存储设备(如SSD),并且没有其他进程在大量占用磁盘I/O。

分割记录 :如果你有多个相机,考虑分别记录每个相机的数据,这样能减轻单个 rosbag 记录的负载:

bash 复制代码
rosbag record --buffsize=1024 /usb_cam1/image_raw &
rosbag record --buffsize=1024 /usb_cam2/image_raw &
rosbag record --buffsize=1024 /usb_cam3/image_raw &
rosbag record --buffsize=1024 /usb_cam4/image_raw &

------------------------------- 撒花,结束-------------------------------

相关推荐
DW_DROME2 小时前
ROS2 多机时间同步(Chrony配置简明指南)
ros
Rorsion13 小时前
ROS Master多设备连接
机器人·ros
古希腊掌握嵌入式的神7 天前
[ROS]ROS系统是如何协调工作机器人
机器人·ros
慕羽★13 天前
多无人车协同探索开源包启动文件介绍(上)
机器人·ros·gazebo·运动规划·rrt·多无人车·协同探索
Mr.Winter`20 天前
轨迹优化 | 基于梯度下降的路径规划算法(附ROS C++/Python仿真)
c++·人工智能·算法·机器人·自动驾驶·ros·ros2
白云千载尽24 天前
开源的自动驾驶视觉语言模型标注数据集
算法·机器学习·自动驾驶·ros
PNP机器人1 个月前
Franka机器人ROS 2 发布:赋能机器人研究和行业应用
人工智能·深度学习·机器人·ros·franka fr3
小仇学长1 个月前
ROS实践一构建Gazebo机器人模型文件urdf
机器人·ros
Mr.Winter`1 个月前
深度强化学习 | 详解过估计现象与Double DQN算法(附Pytorch实现)
人工智能·pytorch·深度学习·神经网络·自动驾驶·ros·强化学习
通信小小昕1 个月前
Verilog IIC驱动| FPGA驱动
fpga开发·iic·状态机·驱动·i2c