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 &

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/869813.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

环境搭建-Docker搭建ClickHouse

Docker搭建ClickHouse 一、前言二、ClickHouse安装2.1 拉取镜像运行ClickHouse服务 三、测试安装3.1 进入clickhouse容器3.2 命令补充说明 四、测试连接五、设置CK的用户名密码 一、前言 本文使用的Docker使用Windows搭建&#xff0c;Linux版本的搭建方式一样。 Windows系统搭…

【笔记:3D航路规划算法】二、RRT*

目录 RRT*于RRT的不同之处1、路径优化&#xff1a;2、成本计算&#xff1a;3、重连线步骤&#xff1a; 图解1、初始化2、路径搜索3、效果展示 总结 3D路径规划是在三维空间中寻找从起点到终点的最短或最优路径的一种技术。它广泛应用于无人机导航、机器人运动规划、虚拟现实等领…

前台文本直接取数据库值doFieldSQL插入SQL

实现功能&#xff1a;根据选择的车间主任带出角色。 实现步骤&#xff1a;OA的“字段联动”功能下拉选项带不出表“hrmrolemembers”&#xff0c;所以采用此方法。 doFieldSQL("select roleid from HrmResource as a inner join hrmrolemembers as b on a.id b.resource…

c++笔记2

目录 2.2 栈底&#xff08;bottom&#xff09; } 大数乘大数 节点&#xff1a;包含一个数据元素及若干指向子树分支的信息 。 节点的度&#xff1a;一个节点拥有子树的数目称为节点的度 。 叶子节点&#xff1a;也称为终端节点&#xff0c;没有子树的节点或者度为零的节点…

环信+亚马逊云科技服务:助力出海AI社交应用扬帆起航

随着大模型技术的飞速发展&#xff0c;AI智能体的社交体验得到了显著提升&#xff0c;AI社交类应用在全球范围内持续火热。尤其是年轻一代对新技术和新体验的热情&#xff0c;使得AI社交产品在海外市场迅速崛起。作为领先的即时通讯解决方案提供商&#xff0c;环信与亚马逊云科…

【Python】sqlite加密库pysqlcipher3编译安装步骤

目录 说明准备工作openssl编译sqlitetcl setup.py修改quote_argumentopenssl路径 安装加密示例代码测试附录参考 说明 pysqlcipher3是针对Python 3使用的pysqlcipher的一个分支&#xff0c; 尽管仍然维护对Python 2的支持。它仍然处于测试阶段&#xff0c; 尽管这个库包含的最…

uniapp集成安卓原生录屏插件以及使用

概述 我们知道UniApp的出现简化了开发者的工作流程&#xff0c;并减少了代码的重复编写。开发者可以使用一套代码编译到iOS、Android、以及各种小程序的应用&#xff0c;节省了人力和时间成本&#xff0c;但是涉及到与系统交互的时候&#xff0c;比如录屏、录音、录像、文件操…

实现Nginx的反向代理和负载均衡

一、反向代理和负载均衡简介 1.1、反向代理 反向代理(reverse proxy)指:以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。此时代理服务器对外就表现为一个反向代理服务器。 反向代…

为什么idea建议使用“+”拼接字符串

今天在敲代码的时候&#xff0c;无意间看到这样一个提示&#xff1a; 英文不太好&#xff0c;先问问ChatGPT&#xff0c;这个啥意思&#xff1f; IDEA 提示你&#xff0c;可以将代码中的 StringBuilder 替换为简单的字符串连接方式。 提示信息中说明了使用 StringBuilder 进行…

【VSCode实战】Go插件依赖无法安装

使用VSCode来进行Go的开发有一段时间了&#xff0c;一直忍受着无法跳转定义的尴尬。正常情况下&#xff0c;VSCode安装Go插件后&#xff0c;应该就能具备跳转定义的功能&#xff0c;但因为一些未知的原因&#xff0c;换了工作环境&#xff0c;突然就不能用了。 以前在网上找到…

数据传输安全--IPSEC

目录 IPSEC IPSEC可以提供的安全服务 IPSEC 协议簇 两种工作模式 传输模式 隧道模式 两个通信保护协议&#xff08;两个安全协议&#xff09; AH&#xff08;鉴别头协议&#xff09; 可以提供的安全服务 报头 安全索引参数SPI 序列号 认证数据 AH保护范围 传输模…

Vue3时间选择器datetimerange在数据库存开始时间和结束时间

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

【AIGC】构建自己的谷歌搜索引擎服务并使用

一、谷歌 谷歌的搜索引擎需要自己创建服务才能启用检索api。&#xff08;需自行翻墙和创建自己的谷歌账号&#xff09; 1.1 API服务创建 1&#xff09;登陆https://console.cloud.google.com/: 2&#xff09; 选择新建项目&#xff0c;取号项目名即可&#xff08;比如:Olin…

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建(前期准备工作)

这是项目的初始页面 接下来我先写下我的初始项目搭建 技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 首先我们打开页面&#xff0c;准备搭建项目的初始准备 1.New Project 2.随后点击Next&#xff0c;勾…

Vue3 + Vite 打包引入图片错误

1. 具体报错 报错信息 报错代码 2. 解决方法 改为import引入&#xff0c;注意src最好引用为符引入&#xff0c;不然docker部署的时候可能也会显示不了 <template><img :src"loginBg" alt""> </template><script langts setup> …

深入理解SQL中的INNER JOIN操作

本文介绍了INNER JOIN的定义、使用场景、计算方法及与其他JOIN的比较。INNER JOIN是关系数据库中常用的操作&#xff0c;用于返回两个表中匹配的行&#xff0c;只有在连接条件满足时才返回数据。本文详细解释了INNER JOIN的语法及其在一对多、多对多关系中的应用&#xff0c;通…

stm32平台为例的软件模拟时间,代替RTC调试

stm32平台为例的软件模拟时间&#xff0c;代替RTC调试 我们在开发项目的时候&#xff0c;如果用到RTC&#xff0c;如果真正等待RTC到达指定的时间&#xff0c;那调试时间就太长了。 比如每隔半个小时&#xff0c;存储一次数据&#xff0c;如果要观察10次存储的效果&#xff0…

学习笔记之Java篇(0725)

p this 普通方法中&#xff0c;this总是指向调用该方法的对象。 构造方法中&#xff0c;this总是指向正要初始化的对象。 this&#xff08;&#xff09;调用必须重载的构造方法&#xff0c;避免相同地址初始化代码&#xff0c;但只能在构造方法中用&#xff0c;比企鹅必须位…

WordPress 后台开发技巧:向文章发布页右侧添加自定义菜单项

案例图片 这个案例向你介绍了如何在文章发布页的右侧边栏增加一个新的自定义菜单项。具体用它实现什么功能&#xff0c;就看你的需要了。 代码 function add_custom_menu_item() { add_meta_box(custom_menu_item, 这里是菜单项名称, display_custom_menu_item, post, side, …

梅卡曼德高精度 DLP 结构光焊接专用 3D 相机

精度高&#xff0c;抗环境光、抗反光&#xff0c;成像效果好 自研蓝光 DLP 投影技术及双目结构光 3D 成像算法&#xff0c;相 机精度高&#xff0c;抗环境光、抗反光性能优异。在实际场景中&#xff0c; 可对各类复杂焊接件、焊缝高质量成像。 超小体积&#xff0c;超强适…