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

【Ubuntu】虚拟机安装USB摄像头ROS驱动 usb_cam(最新方法)

写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。

🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒
若您觉得内容有价值,还请评论告知一声,以便更多人受益。
转载请注明出处,尊重原创,从我做起。

👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜
在这里,您将收获的不只是技术干货,还有思维的火花

📚 系列专栏:【Linux】系列,带您深入浅出,领略控制之美。🖊
愿我的分享能为您带来启迪,如有不足,敬请指正,让我们共同学习,交流进步!

🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~


文章目录

  • 引言
  • 一、源码安装方法
    • 1.1 下载摄像头驱动usb_cam
    • 1.2 查找FFmpeg库路径
    • 1.3 添加FFmpeg库路径到CMakeLists.txt
    • 1.4 编译usb_cam包
    • 1.5 修改usb_cam驱动配置
    • 1.6 修改launch文件
  • 二、软件包安装方法
    • 2.1 安装ROS Melodic版本的usb_cam
    • 2.2 安装相机标定功能包
    • 2.3 安装UVC相机功能包
    • 2.4 启动摄像头节点
    • 2.5 处理摄像头连接问题
    • 2.6 相机启动警告处理
    • 2.7 相机标定方法
    • 2.8 查看相机话题和数据
  • 三、总结
  • 参考资料


引言

  usb_cam是针对USB摄像头的ROS驱动包,简单来说就是得有这个功能包,才能在ROS中把摄像头打开。但是官网给出的目前最新版 usb_cam 已不再支持 ROS1,因此若想在 ubuntu18.04 上安装摄像头驱动 usb_cam,则需修改配置文件, 本篇博客介绍具体操作。

  本篇博客提供两种安装方法:源码安装方法、软件包安装方法。


一、源码安装方法

1.1 下载摄像头驱动usb_cam

  下载usb_cam文件见本博客置顶的资源。

  参考以下方法,将下载到主机的驱动文件发送到虚拟机Ubuntu中:

  windows主机和ubuntu互传文件的4种方法

  虚拟机共享文件位置 /mnt/hgfs/Share

  从官网下载的usb_cam切换到支持ROS1的master分支。

git clone https://github.com/ros-drivers/usb_cam.git
cd usb_cam
git checkout master

  编译usb_cam会报错,提示链接不到FFmpeg相关的库文件

  因此通过添加FFmpeg库路径到LD_LIBRARY_PATH来解决这些错误。

1.2 查找FFmpeg库路径

  查找编译所需的文件位置

locate libavcodec.so

在这里插入图片描述

  编辑~/.bashrc文件:打开终端,输入

sudo nano ~/.bashrc

  在.bashrc文件末尾添加如下内容

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

  保存并关闭文件,然后执行以下命令来使更改立即生效:

source ~/.bashrc

1.3 添加FFmpeg库路径到CMakeLists.txt

  CMakeLists.txt文件中的内容如下:

cmake_minimum_required(VERSION 3.5)
project(test_ffmpeg)set(CMAKE_LIBRARY_PATH "/usr/lib/x86_64-linux-gnu")find_package(PkgConfig REQUIRED)
pkg_check_modules(AVCODEC REQUIRED libavcodec)
pkg_check_modules(AVUTIL REQUIRED libavutil)
pkg_check_modules(AVFORMAT REQUIRED libavformat)
pkg_check_modules(SWSCALE REQUIRED libswscale)add_executable(test_ffmpeg test_ffmpeg.cpp)target_link_libraries(test_ffmpeg${AVCODEC_LIBRARIES}${AVUTIL_LIBRARIES}${AVFORMAT_LIBRARIES}${SWSCALE_LIBRARIES}
)

  测试文件编译通过。

  因此,在usb_cam文件夹下的CMakeLists.txt添加如下内容:

# 添加内容
set(CMAKE_LIBRARY_PATH "/usr/lib/x86_64-linux-gnu")find_package(PkgConfig REQUIRED)
pkg_check_modules(AVCODEC REQUIRED libavcodec)
pkg_check_modules(AVUTIL REQUIRED libavutil)
pkg_check_modules(AVFORMAT REQUIRED libavformat)
pkg_check_modules(SWSCALE REQUIRED libswscale)# 添加内容
target_link_libraries(${PROJECT_NAME}_node${AVCODEC_LIBRARIES}${AVUTIL_LIBRARIES}${AVFORMAT_LIBRARIES}${SWSCALE_LIBRARIES}
)

1.4 编译usb_cam包

  再次编译。

catkin_make

  若编译出错,使用如下指令清理构建目录,并重新编译项目:

cd ~/catkin_ws
rm -rf build/ devel/
catkin_make

1.5 修改usb_cam驱动配置

  找到自己的USB摄像头所对应的端口。
在这里插入图片描述
  我的是/dev/video0 /dev/video1

1.6 修改launch文件

  在src/usb_cam目录下打开并编辑launch文件。

在这里插入图片描述


二、软件包安装方法

  下面介绍一种使用软件包安装usb-cam的方法。

2.1 安装ROS Melodic版本的usb_cam

  首先打开终端,输入:

sudo apt-get install ros-melodic-usb-cam

  这里melodic应该根据自己Ubuntu系统进行灵活变换,例如我使用的Ubuntu18.04,那么我对应的就是melodic版本。

2.2 安装相机标定功能包

  安装ROS Melodic版本的相机标定功能包。

sudo apt-get install ros-melodic-camera-calibration

  相机标定是确定相机内部参数(如焦距、主点等)的过程,这对于处理从相机获得的图像数据非常重要。

2.3 安装UVC相机功能包

  安装ROS Melodic版本的UVC相机功能包。

sudo apt-get install ros-melodic-uvc-camera

  UVC(Universal Video Class)是一种USB摄像头的标准,这个功能包允许ROS与UVC兼容的USB摄像头通信。

2.4 启动摄像头节点

  驱动安装完成后,会自带一个launch文件,我们打开launch文件就可以打开摄像头。

  启动名为usb_cam的ROS节点,并运行一个名为usb_cam-test.launch的launch文件。

roslaunch usb_cam usb_cam-test.launch

  这个launch文件配置了如何使用USB摄像头获取图像,并包括其他相关参数设置。

2.5 处理摄像头连接问题

  此时,保证相机已经开机,并通过usb接口连接至电脑,若出现以下问题:

在这里插入图片描述
  说明没有检测到USB摄像头,重新插入摄像头

在这里插入图片描述

2.6 相机启动警告处理

  如果报错如下select timeout
在这里插入图片描述

  说明USB兼容性选择错了,需要关闭虚拟机进行更改,点击编辑虚拟机,打开 USB 控制器,将 USB 兼容性改为USB 3.1,点击确定,重新打开虚拟机,再次运行即可打开摄像头。

在这里插入图片描述
  出现以下画面,成功打开摄像头。
在这里插入图片描述

2.7 相机标定方法

  如果相机启动时出现如下警告:

在这里插入图片描述

  说明相机没有进行标定,所以出现警告。

  参考以下链接进行相机标定:

  【相机内参标定】—— 如何标定单目相机的内参(张正友标定法)

2.8 查看相机话题和数据

   查看相机发布的话题。

rostopic list

在这里插入图片描述

  查看相机获取的数据。

rostopic echo /camera_info

在这里插入图片描述

  安装完成!


三、总结

  在Ubuntu18.04上安装USB摄像头驱动usb_cam的方法主要有两种:源码安装和软件包安装。

  • 源码安装方法
    需要从GitHub下载usb_cam源码,切换到支持ROS1的master分支,并通过添加FFmpeg库路径到LD_LIBRARY_PATH来解决编译错误。

  • 软件包安装方法
    通过使用sudo apt-get命令安装ROS Melodic版本的usb_cam、camera-calibration和uvc-camera功能包,然后运行usb_cam-test.launch文件来启动摄像头节点。

  安装完成后,可以通过rostopic list和rostopic echo命令查看摄像头发布的话题和获取的数据。

  总的来说,这两种方法都能在Ubuntu18.04上成功安装和使用usb_cam驱动,但在选择安装方法时,应根据自己的需求和环境进行选择。


参考资料

  1、windows主机和ubuntu互传文件的4种方法

  2、ubuntu利用usb_cam打开摄像头

  3、【相机内参标定】—— 如何标定单目相机的内参(张正友标定法)


后记:

🌟 感谢您耐心阅读这篇关于 虚拟机安装USB摄像头ROS驱动 usb_cam 的技术博客。 📚

🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢

🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀

🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡

🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀

相关文章:

【Ubuntu】虚拟机安装USB摄像头ROS驱动 usb_cam(最新方法)

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…...

免费的成绩查询微信小程序,让家长轻松掌握学生表现

传统的教学方式在不断地被革新。在成绩查询这一环节,老师们曾经面临着繁琐的手工操作和信息安全的风险。可现如今有一个让成绩查询变得轻松、高效且安全的新工具——易查分。 过去需要花费大量时间来整理成绩,然后通过短信或者打电话的方式告知给家长。以…...

[含视频和源码]CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)

关说不练假把式,在上一,二篇中介绍了我心目中的CRUD的样子 基于之前的理念,我开发了一个命名为PasteTemplate的项目,这个项目呢后续会转化成项目模板,转化成项目模板后,后续需要开发新的项目就可以基于这…...

如何把我另一个分支上的commit拿过来

在开源过程中,每一次PR都是要经过严格的review的,这期间可能会进行多次修改,补充提交,而且这一般来说不是一个很迅速的过程,此时我们可能会先往后进行开发。我一般会把项目分模块逐步建立分支,当前一个pr合…...

【rpg像素角色】俯视角-行走动画

制作像素角色的俯视角行走动画并不像看上去那么复杂,尤其是在你已经完成了角色的4个方向站立姿势之后(其中左右方向可以通过水平翻转实现)。接下来,我会一步步为你讲解如何制作行走动画。 1. 理解行走规律 在制作行走动画之前&am…...

Python时间序列分析新技能,轻松掌握时间索引

大家好,在数据分析领域,时间序列数据分析是一项非常重要的技能。Pandas作为Python中强大的数据处理库,在处理时间序列数据时提供了丰富的功能,其中时间索引的应用是时间序列分析中的关键。本文将介绍如何在Pandas中使用时间索引进…...

sklearn-逻辑回归-特征工程示例

sklearn-逻辑回归-特征工程示例 在实际应用场景中,有时候特征的数量会很多,我们出于业务考虑,也出于计算量的考虑,希望对逻辑回归进行特征选择来降维。比如在判断一个人是否会患乳腺癌的时候,医生如果看58个指标来确诊…...

RTMP播放器延迟最低可以做到多少?

技术背景 RTMP播放器的延迟可以受到多种因素的影响,包括网络状况、推流设置、播放器配置以及CDN分发等。因此,RTMP播放器的延迟并不是一个固定的数值,而是可以在一定范围内变化的。 正常情况下,网上大多看到的,针对R…...

细致刨析JDBC ① 基础篇

目录 一、JDBC概述 1.JDBC的概念 ​编辑2.JDBC的核心组成 ① 接口规范: ② 实现规范: 二、JDBC快速入门 1.JDBC搭建步骤 三、核心API理解 1.注册驱动 2.Connection 3.Statement 4.PreparedStatement 5.ResultSet 四、基于Preparedment实现CRUD 1.查询单行单列 2.查询单行…...

Reactive 编程-Loom 项目(虚拟线程)

Reactive 编程与 Loom 项目(虚拟线程) Java 项目 Loom 是 Oracle 在 JVM 上的一项重大变革,旨在引入 虚拟线程(Virtual Threads),以简化并发编程。传统的 Java 线程是重量级的,由操作系统管理&…...

Windows下使用MinGW编译安装zmq的步骤

背景: 在开发过程中,需要使用zmq库进行数据交互,因此需要编译zmq库。 安装步骤 软件下载 https://github.com/zeromq/libzmq.git 下载,将代码切换到git checkout 4c6cff6391分支 软件编译 cd .\libzmq\ mkdir build cd .\bu…...

电商云账户分账系统:打造高效资金流转体系

在当今的电子商务时代,随着消费者购物习惯的转变和在线交易量的激增,电商平台的运营模式也日趋复杂。为了满足多商家共存、利益共享的需求,电商分账成为了一个至关重要的环节。 电商分账是指电商平台在销售商品或服务后,根据事先…...

设计模式 -- 单例设计模式

1.1 单例 创建一个单例对象 SingleModel , SingleModel 类有它的私有构造函数和本身的一个静态实例。 SingleModel 类提供了一个静态方法,供外界获取它的静态实例。 DesignTest 我们的演示类使用 SingleModel 类来获取 SingleModel 对象。 创建 Single…...

python fastapi 打包exe

创建虚拟环境 python -m venv 国内依赖仓库 # 换源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set install.trusted-host mirrors.aliyun.com 安装nuitka pip install nuitka 生成exe nuitka --mingw64 --show-progress --s…...

【测试开岗面试】知识点总结

1.知识点总结 Q:请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试 单元测试 (Unit Testing) 单元测试是对软件中最小可测试单元(通常是函数或方法)进行验证的过程。它的目的是确保每个单元在设计时的功能能够正常运行。单元测试通常由…...

【高级编程】synchronized 解决并发问题 类的线程安全类型

文章目录 并发问题同步方法同步代码块 线程安全类型ArrayListHashtableHashMapVector 多线程共享数据引发的问题 模拟 “A” “B” “C” 三人抢票,总票数10张,打印抢票情况以及剩余票数。 public class Site implements Runnable {int count 10; // …...

Speculative RAG:为知识密集型数据服务的RAG

论文链接 RAG的一个棘手问题是不知道该召回多少chunk,少了可能丢信息,多了会引入噪声信息。虽然有self-reasoning等自我反思的解决办法,但是整体链路太长,延迟高,不利于工业落地。 虽然无法面对整个服务场景&#xff…...

[Go]-抢购类业务方案

文章目录 要点:1. 抢购/秒杀业务的关键挑战2. 技术方案3.关键实现点4.性能优化建议5.其他考虑因素 细节拆分:1. **高并发处理**2.**限流与防护**3.**库存控制**4. **异步处理**5. **数据一致性**6. **常用架构设计**7. **代码示例**8. 进一步优化9. 注意…...

Android 源码多个Launcher设置默认Launcher

目录 第一部分、android10之前 一.多个launcher 启动设置默认launcher的核心类 二 在自定义服务里面设置默认Launcher 第二部分、android10之后 一、Launcher应用内置并设置为默认Launcher 1.通过ResolverActivity.java设置为默认Launcher 改法一: 改法二&am…...

计算机毕业设计 网上体育商城系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...