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 &

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

相关推荐
嵌入式老牛3 天前
去饱和检测+前沿消隐+两级关断:SiC MOSFET 短路保护方案
驱动·sic·短路保护
暂未成功人士!4 天前
点云处理的关键技术流程和常用算法
ros·pcl·点云处理·点云去噪滤波
提伯斯6465 天前
Fast-Lio和LIO-SAM分别在有gps情况下与PX4融合的过程
ros·px4·fast-lio·lio-sam
南檐巷上学8 天前
基于地平线RDK X5的智能医药机器人系统
ubuntu·机器人·ros·机械臂·openclaw
程序猿玖月柒9 天前
ubuntu22.04.2安装英伟达驱动
驱动开发·驱动·英伟达·端侧ai
加成BUFF9 天前
第七天 ROS《 参数服务器与Launch文件》
运维·ros·参数服务器
加成BUFF10 天前
第六天 ROS 《Action 通信实验》
linux·机器人·ros
加成BUFF10 天前
第5天 ROS 《Service 通信实验指导书》
机器人·ros
提伯斯64611 天前
解决Fast-Drone-250编译相关错误
linux·ros·无人机·fast-drone
rqtz13 天前
【C++】源码编译 Qt5.15.3|Ubuntu22.04 下 ROS 开发环境搭建
开发语言·c++·qt·ros