【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 的技术博客。 📚

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nest.js

Nestjs中文文档链接 TypeORM 中文文档 小满视频 1. 安装Nest.js 安装脚手架 npm i -g nestjs/cli创建nestjs工程 nest new工程目录 app.module.ts 根模块用于处理其他类的引用与共享。app.controller.ts 常见功能是用来处理http请求(处理请求的路径&#xff09…

如何升级用 Helm 安装的极狐GitLab Runner?

本分分享如何对 Helm 安装的 Runner 进行升级。整个过程分为三步:1、确定 Runner 最新版本或者想要升级的版本是否存在;2、用 Helm upgrade 命令进行升级;3、升级确认。 极狐GitLab 为 GitLab 的中国发行版,中文版本对中国用户更…

react18基础教程系列-- 框架基础理论知识mvc/jsx/createRoot

react的设计模式 React 是 mvc 体系,vue 是 mvvm 体系 mvc: model(数据)-view(视图)-controller(控制器) 我们需要按照专业的语法去构建 app 页面,react 使用的是 jsx 语法构建数据层,需要动态处理的的数据都要数据层支持控制层: 当我们需要…

1730. 购买贺年卡

代码 #include<bits/stdc.h> using namespace std; struct c {int a,b; }t[1005]; int cmp(c a,c b) {return a.a>b.a; } int main() {int n,m,sum0;cin>>n>>m;for(int i1;i<m;i){cin>>t[i].a>>t[i].b;}sort(t1,t1m,cmp);for(int im;i&g…

如何在Linux下升级R版本和RStudio

一、升级R版本 在Linux上&#xff0c;R的安装通常通过包管理器完成。不同的Linux发行版&#xff08;如Ubuntu、Debian、Fedora等&#xff09;可能略有不同。下面以Ubuntu为例&#xff0c;介绍如何升级R版本。如果你使用其他发行版&#xff0c;步骤可能类似。 二.更新步骤 2.…

【可视化大屏系列】数据列表自动滚动效果

要实现列表的自动滚动效果&#xff0c;这里提供两种解决方案&#xff1a; 1.vue插件 官方文档&#xff1a;链接: vue-seamless-scroll &#xff08;1&#xff09;安装依赖 npm install vue-seamless-scroll --save&#xff08;2&#xff09;全局注册&#xff08;main.js中&a…

【机器学习】--- 自监督学习

1. 引言 机器学习近年来的发展迅猛&#xff0c;许多领域都在不断产生新的突破。在监督学习和无监督学习之外&#xff0c;自监督学习&#xff08;Self-Supervised Learning, SSL&#xff09;作为一种新兴的学习范式&#xff0c;逐渐成为机器学习研究的热门话题之一。自监督学习…

【linux-Day3】linux的基本指令<中>

【linux-Day3】linux的基本指令<中> linux下的基本指令&#x1f4e2;man&#xff1a;访问linux手册页&#x1f4e2;echo&#xff1a;把字符串写入指定文件中&#x1f4e2;cat&#xff1a;查看目标文件的内容&#x1f4e2;cp&#xff1a;复制文件或目录&#x1f4e2;mv&am…

AJAX 入门 day3

目录 1.XMLHttpRequest 1.1 XMLHttpRequest认识 1.2 用ajax发送请求 1.3 案例 1.4 XMLHttpRequest - 查询参数 1.5 XMLHttpRequest - 数据提交 2.Promise 2.1 Promise认识 2.2 Promise - 三种状态 2.3 案例 3.封装简易版 axios 3.1 封装_简易axios_获取省份列表 3…

Fisco Bcos 2.11.0配置console控制台2.10.0及部署调用智能合约

Fisco Bcos 2.11.0配置console控制台2.10.0及部署调用智能合约 文章目录 Fisco Bcos 2.11.0配置console控制台2.10.0及部署调用智能合约前言版本适配一、启动FIsco Bcos区块链网络二、获取控制台文件三、配置控制台3.1 执行download_console.sh脚本3.2 拷贝控制台配置文件3.3 修…

Mac下nvm无法安装node问题

背景 最近换用mac开发&#xff0c;然后使用nvm&#xff08;版本0.40.1&#xff09;进行node安装的时候出现了一些问题 使用 nvm ls-remote发现只有 iojs 版本 原因可能是nodejs升级了某个协议导致的 解决方案 可以使用 NVM_NODEJS_ORG_MIRRORhttp://nodejs.org/dist nvm ls-re…

数据结构(八)——Java实现七大排序

一、插入排序 1.直接插入排序 public static void insertSort(int []arr){for (int i 0; i < arr.length; i) {int j i-1;int tmp arr[i];for (; j >0 ; j--) {if(arr[j] > tmp){arr[j1] arr[j];}else{break;}}arr[j1] tmp;}}直接插入排序特性总结 1. 元素集合越…

TikTok商家如何通过真人测评提高流量和销量?

在当今的社交媒体营销领域&#xff0c;TikTok&#xff08;抖音国际版&#xff09;以其独特的短视频内容和庞大的用户群体&#xff0c;成为了品牌营销和产品推广的热门平台。其中&#xff0c;真人测评作为一种有效的营销策略&#xff0c;正逐渐受到商家的青睐。本文将探讨TikTok…

华硕产品资料的查询方法

华硕网站有些奇怪&#xff0c;比如我要查询x99-pro这款已经停售的主板的资料&#xff0c;在它的首页搜索&#xff0c;搜索结果为空&#xff1a; 然后在服务支持和下载中心&#xff0c;同样搜不到。 经高人指点&#xff0c;用下面的方法&#xff0c;可以搜到&#xff1a; https…

微信小程序页面制作——婚礼邀请函(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

web基础—dvwa靶场(四)​File Inclusion

File Inclusion(文件包含) 有些 web 应用程序允许用户指定直接文件流的输入&#xff0c;或允许用户将文件上载到服务器。稍后 web 应用程序访问 web 应用程序上下文中用户提供的输入。通过这样种操作&#xff0c;web 应用程序允许恶意文件执行。 如果选择要包含的文件是目标计…

【Hot100】LeetCode—51. N 皇后

目录 1- 思路题目识别回溯 2- 实现⭐51. N 皇后——题解思路 3- ACM 实现 原题链接&#xff1a;51. N 皇后 1- 思路 题目识别 识别1 &#xff1a;给定一个整数 n &#xff0c;求解如何放置棋子的问题。 回溯 回溯三部曲 1- 回溯参数和返回值 传参 cheeseBoard、n、row 传递…

如何设置 Django 错误邮件通知 ?

Django 是一个强大的 web 框架&#xff0c;非常适合那些想要完美快速完成任务的人。它有许多内置的工具和特性&#xff0c;一个有用的特性是 Django 可以在出现错误时发送电子邮件提醒。这对开发人员和管理员非常有用&#xff0c;因为如果出现问题&#xff0c;他们会立即得到通…

改编pikachu的打靶经历(题目不全)

前言 题目很少&#xff0c;只做了一些。正常版本的&#xff0c;完整的pikachu可参考下面这个师傅写的 https://www.cnblogs.com/henry666/p/16947270.html xss &#xff08;get&#xff09;反射xss 先尝试 1 这里有长度限制&#xff0c;而且&#xff0c;我改了长度&#xf…

MySQL_数据类型简介

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…