当前位置: 首页 > news >正文

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 文件中并保存。

<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

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

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为单位)

rosbag record --buffsize=1024 /usb_cam1/image_raw /usb_cam2/image_raw /usb_cam3/image_raw /usb_cam4/image_raw

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

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

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

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 &

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python文件的读写
  • FFplay介绍及命令使用指南
  • 大数据采集工具——Flume简介安装配置使用教程
  • 【扩散模型思考记录(一)】图像生成的本质是什么?什么是适合采样的复杂分布?
  • Springer旗下中科院2区TOP,国人优势大!
  • C 语言动态链表
  • SSH相关
  • Hive3:一键启动、停止、查看Hive的metastore和hiveserver2两个服务的脚本(好用)
  • C语言关键字
  • 昇思25天学习打卡营第22天|基于MindNLP+MusicGen生成自己的个性化音乐案例
  • 如何在 VitePress 中增加一个全局自定义组件
  • 如果想不明白,那就读书吧
  • windows系统下编译和使用grpc
  • 代码随想录——打家劫舍Ⅱ(Leetcode 213)
  • 对JAVA的包package的理解
  • 《Java编程思想》读书笔记-对象导论
  • 【刷算法】从上往下打印二叉树
  • 【译】理解JavaScript:new 关键字
  • 2019.2.20 c++ 知识梳理
  • gitlab-ci配置详解(一)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • ViewService——一种保证客户端与服务端同步的方法
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 回流、重绘及其优化
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 爬虫模拟登陆 SegmentFault
  • 前端临床手札——文件上传
  • 软件开发学习的5大技巧,你知道吗?
  • 实现菜单下拉伸展折叠效果demo
  • 网页视频流m3u8/ts视频下载
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 鱼骨图 - 如何绘制?
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • linux 淘宝开源监控工具tsar
  • Spring Batch JSON 支持
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​数据结构之初始二叉树(3)
  • ​虚拟化系列介绍(十)
  • # 数论-逆元
  • #APPINVENTOR学习记录
  • #HarmonyOS:Web组件的使用
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (C++20) consteval立即函数
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (力扣题库)跳跃游戏II(c++)
  • (四)Controller接口控制器详解(三)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)利用webkit抓取动态网页和链接
  • .axf 转化 .bin文件 的方法
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布