疑难杂症篇(二十一)--Ubuntu18.04安装usb-cam过程出现的问题

news2024/11/27 8:27:11

U b u n t u 18.04 {\rm Ubuntu 18.04} Ubuntu18.04环境下的 R O S {\rm ROS} ROS m e l o d i c {\rm melodic} melodic版本安装 u s b − c a m {\rm usb-cam} usbcam过程出现的两个常见问题提出解决方案。



1.问题1:usb-cam功能包编译时出现"未定义的引用"的问题

问题描述:把 u s b − c a m {\rm usb-cam} usbcam功能包下载到工作空间进行编译时,出现很多的"未定义的引用"的错误,具体问题见下图所示:
1

2.解决方案

查看 u s b − c a m {\rm usb-cam} usbcam功能包下的 C M a k e L i s t s . t x t {\rm CMakeLists.txt} CMakeLists.txt文件,其中 C M a k e L i s t s . t x t {\rm CMakeLists.txt} CMakeLists.txt文件具体内容如下代码块所示:

cmake_minimum_required(VERSION 2.8.12)
project(usb_cam)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS cv_bridge image_transport roscpp std_msgs std_srvs sensor_msgs camera_info_manager)

# Find OpenCV
find_package(OpenCV REQUIRED)

## pkg-config libraries
find_package(PkgConfig REQUIRED)
pkg_check_modules(avcodec libavcodec REQUIRED)
pkg_check_modules(avutil libavutil REQUIRED)
pkg_check_modules(swscale libswscale REQUIRED)

###################################################
## Declare things to be passed to other projects ##
###################################################

## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
  INCLUDE_DIRS include
  LIBRARIES ${PROJECT_NAME}
)

###########
## Build ##
###########

include_directories(include
  ${catkin_INCLUDE_DIRS}
  ${avcodec_INCLUDE_DIRS}
  ${swscale_INCLUDE_DIRS}
  ${avutil_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

## Build the USB camera library
add_library(${PROJECT_NAME} src/usb_cam.cpp)
target_link_libraries(${PROJECT_NAME}
  ${avcodec_LINK_LIBRARIES}
  ${avutil_LINK_LIBRARIES}
  ${swscale_LINK_LIBRARIES}
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
)

## Declare a cpp executable
add_executable(${PROJECT_NAME}_node nodes/usb_cam_node.cpp)
target_link_libraries(${PROJECT_NAME}_node
  ${PROJECT_NAME}
  ${avcodec_LINK_LIBRARIES}
  ${avutil_LINK_LIBRARIES}
  ${swscale_LINK_LIBRARIES}
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
)

#############
## Install ##
#############

## Mark executables and/or libraries for installation
install(TARGETS ${PROJECT_NAME}_node ${PROJECT_NAME}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
)

## Copy launch files
install(DIRECTORY launch/
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch
  FILES_MATCHING PATTERN "*.launch"
)

install(DIRECTORY include/${PROJECT_NAME}/
   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
   FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)

分析 C M a k e L i s t s . t x t {\rm CMakeLists.txt} CMakeLists.txt文件可知在编译内容上,所依赖的库: a v c o d e c 、 s w s c a l e 、 a v u t i l {\rm avcodec、swscale、avutil} avcodecswscaleavutil,使用 l o c a t e {\rm locate} locate命令找出路径:

###########
## Build ##
###########

include_directories(include
  ${catkin_INCLUDE_DIRS}
  ${avcodec_INCLUDE_DIRS}
  ${swscale_INCLUDE_DIRS}
  ${avutil_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

## Build the USB camera library
add_library(${PROJECT_NAME} src/usb_cam.cpp)
target_link_libraries(${PROJECT_NAME}
  ${avcodec_LINK_LIBRARIES}
  ${avutil_LINK_LIBRARIES}
  ${swscale_LINK_LIBRARIES}
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
)

## Declare a cpp executable
add_executable(${PROJECT_NAME}_node nodes/usb_cam_node.cpp)
target_link_libraries(${PROJECT_NAME}_node
  ${PROJECT_NAME}
  ${avcodec_LINK_LIBRARIES}
  ${avutil_LINK_LIBRARIES}
  ${swscale_LINK_LIBRARIES}
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
)
# 在终端下分别locate出三个库的具体路径
locate libavcodec
locate libavutil
locate libswscale

得出具体路径后,在 C M a k e L i s t s . t x t {\rm CMakeLists.txt} CMakeLists.txt文件写入路径,见下面代码块:

## Declare a cpp executable
add_executable(${PROJECT_NAME}_node nodes/usb_cam_node.cpp)

# CMakeLists.txt文件新增路径部分
# ====================================================================
set(avcodec_LINK_LIBRARIES /usr/lib/x86_64-linux-gnu/libavcodec.so)
set(avutil_LINK_LIBRARIES /usr/lib/x86_64-linux-gnu/libavutil.so)
set(swscale_LINK_LIBRARIES /usr/lib/x86_64-linux-gnu/libswscale.so)
# ====================================================================

target_link_libraries(${PROJECT_NAME}_node
  ${PROJECT_NAME}
  ${avcodec_LINK_LIBRARIES}
  ${avutil_LINK_LIBRARIES}
  ${swscale_LINK_LIBRARIES}
  ${catkin_LIBRARIES}
  ${OpenCV_LIBS}
)

修改 C M a k e L i s t s . t x t {\rm CMakeLists.txt} CMakeLists.txt文件后,返回工作空间进行编译,如下图所示:
2

3.问题2:usb-cam安装好后出现"找不到video0"的问题

问题描述:解决问题1后,成功进行编译,但在打开摄像头的时候出现找不到 V i d e o 0 {\rm Video0} Video0的问题,具体如下图所示:
3

4.解决方案

# 1.关闭虚拟机,进入编辑虚拟机设置;
# 2.在"USB控制器选项"的"显示所有USB设备"前打上√;
# 3.启动虚拟机;
# 4.在虚拟机选项-->可移动设备-->USB 2.0 HD UVC Web Cam-->点击"连接";
# 5.查看是否显示video0;
cd /dev/
ls

4
5

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

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

相关文章

@RefreshScope 加在 Quartz 触发器类导致异常问题分析

背景 承接上篇,测试过程中又遇到了 Nacos Config 的动态刷新注解 RefreshScope 与 Quartz 框架结合的问题,Bug 排查路上,顺手记录一下吧。 问题 有个模块使用了Quartz ,通过配置控制任务调度的周期和分组名称。 因为引用了动态…

如何解决thinkphp验证码不能显示问题?

thinkPHP做验证码这一块,可以使用自带的验证码扩展,具体步骤如下: 一、安装扩展 composer require topthink/think-captcha 二、模版中使用 将原来静态页面的验证码图片替换为{:captcha_img()},这个会自动生成验证码图片。 <div>{:captcha_img()}</div> 或者 &…

如何理解 K8s 动态伸缩与触发上线?

K8s 版本&#xff1a;1.23.6 目录一、动态伸缩二、触发上线一般地&#xff0c;如果仅修改 Pod 的副本数&#xff08;如新增/缩减&#xff09;&#xff0c;这就属于动态伸缩。如果是修改容器镜像的版本&#xff0c;则会触发上线&#xff0c;具体看下面例子。 一、动态伸缩 1、…

00后整顿职场?公司测试岗却新来了个00后卷王,3个月薪资干到20K...

最近聊到软件测试的行业内卷&#xff0c;越来越多的转行和大学生进入测试行业。想要获得更好的待遇和机会&#xff0c;不断提升自己的技能栈成了测试老人迫在眉睫的问题。 不论是面试哪个级别的测试工程师&#xff0c;面试官都会问一句“会编程吗&#xff1f;有没有自动化测试…

Mybatis框架(全部基础知识)

&#x1f44c; 棒棒有言&#xff1a;也许我一直照着别人的方向飞&#xff0c;可是这次&#xff0c;我想要用我的方式飞翔一次&#xff01;人生&#xff0c;既要淡&#xff0c;又要有味。凡事不必太在意&#xff0c;一切随缘&#xff0c;缘深多聚聚&#xff0c;缘浅随它去。凡事…

2023年了,来试试前端格式化工具

在大前端时代&#xff0c;前端的各种工具链穷出不断&#xff0c;有eslint, prettier, husky, commitlint 等, 东西太多有的时候也是trouble&#x1f602;&#x1f602;&#x1f602;,怎么正确的使用这个是每一个前端开发者都需要掌握的内容&#xff0c;请上车&#x1f697;&…

DHCP Relay中继实验

DHCP Relay实验拓扑图设备配置结果验证拓扑图 要求PC1按照地址池自动分配&#xff0c;而PC要求分配固定的地址&#xff0c;网段信息已经在图中进行标明。 设备配置 AR1&#xff1a; AR1作为DHCP Server基本配置跟DHCP Server没区别&#xff0c;不过要加一条静态路由&#xff…

基础篇:02-SpringCloud概述

1.SpringCloud诞生 基于前面章节&#xff0c;我们深知微服务已成为当前开发的主流技术栈&#xff0c;但是如dubbo、zookeeper、nacos、rocketmq、rabbitmq、springboot、redis、es这般众多技术都只解决了一个或一类问题&#xff0c;微服务并没有一个统一的解决方案。开发人员或…

计算机组成原理(三)

5.掌握定点数的表示和应用&#xff08;主要是无符号数和有符号数的表示、机器数的定点表示、数的机器码表示&#xff09;&#xff1b; 定点数&#xff1a;小数点位置固定不变。   定点小数&#xff1a;小数点固定在数值位与符号位之间&#xff1b;   定点整数&#xff1a;小…

R语言贝叶斯方法在生态环境领域中的高阶技术

贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于频率思想的统计学即频率学派完全不同的统计学方法&#xff0c;它在统计建模中具有灵活性和先进性特点&#xff0c;使其可以轻松应对复杂数据和模型结构。然而&#xff0c;很多初学者在面对思想、技术和方法都与传统统计学有着…

Springcloud----Nacos快速搭建使用

Nacos使用指南 Nacos完整的搭建和项目配置流程&#xff0c;上手简单 一、Nacos安装启动 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHub主…

尚硅谷的尚融宝项目

先建立一个Maven springboot项目 进来先把src删掉&#xff0c;因为是一个父项目&#xff0c;我们删掉src之后&#xff0c;pom里配置的东西&#xff0c;也能给别的模块使用。 改一下springboot的版本号码 加入依赖和依赖管理&#xff1a; <properties><java.versi…

大型智慧校园系统源码 智慧校园源码 Android电子班牌源码

一款针对中小学研发的智慧校园系统源码&#xff0c;智慧学校源码带电子班牌、人脸识别系统。系统有演示&#xff0c;可正常上线运营正版授权。 私信了解更多&#xff01; 技术架构&#xff1a; 后端&#xff1a;Java 框架&#xff1a;springboot 前端页面&#xff1a;vue e…

keepalived+mysql高可用

一.设置mysql同步信息两节点安装msyql略#配置节点11.配置权限允许远程访问mysql -u root -p grant all on *.* to root% identified by Root1212# with grant option; flush privileges;2.修改my.cnf#作为主节点配置(节点1)#作为主节点配置 server-id 1 …

leetcode刷题 | 关于前缀和题型总结1

leetcode刷题 | 关于前缀和题型总结1 文章目录leetcode刷题 | 关于前缀和题型总结1题目链接和为K的子数组连续数组/0 和 1 个数相同的子数组和大于等于 target 的最短子数组/长度最小的子数组路经总和Ⅲ题目链接 560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09;…

Python-第三天 Python判断语句

Python-第三天 Python判断语句一、 布尔类型和比较运算符1.布尔类型2.比较运算符二、if语句的基本格式1.if 判断语句语法2.案例三、 if else 语句1.语法2.案例四 if elif else语句1.语法五、判断语句的嵌套1.语法六、实战案例一、 布尔类型和比较运算符 1.布尔类型 布尔&…

【学习笔记】Nginx实战

反向代理实战 解压Tomcat两次-Tomcat8081、Tomcat8082两个文件夹Tomcat8081只需要修改http协议端口8081Tomcat8082&#xff1a;&#xff08;三个都需要改&#xff0c;不然只会启动其中一个&#xff09;1.修改server的默认端口2.修改http协议的默认端口3.膝盖默认ajp协议的默认端…

面试题: Redis的数据备份

1 RDBRDB全称为Redis Database Backup file &#xff0c;也被叫做Redis数据快照&#xff0c;简单来说就是将当前的所有数据都记录打哦磁盘中&#xff0c;当redis故障重启时&#xff0c;从磁盘读取快照文件进行数据恢复。连接客户端后&#xff0c;使用save命令进保存&#xff0c…

设置Visual Studio 2022背景图

前言 编写代码时界面舒服&#xff0c;自己喜欢很重要。本篇文章将会介绍VS2022壁纸的一些设置&#xff0c;主题的更改以及如何设计界面。 理想的界面应该是这样的 接下来我们来一步步学习如何将界面设计成这样 一、壁纸插件下载 1.拓展->点击拓展管理 2.右上角搜索backgro…

【shell 编程大全】shell 变量的定义以及使用

shell 变量定义 以及使用从此刻开始跟我一起学习shell 相关知识吧 前情回顾 上一章节【shell 前奏知识】 我们已经学习了很多shell的必备知识&#xff0c;让我们一起来回顾下。 shelll的存放位置如何切换shellshell文件中的注释有哪些查看当前系统的shell类型执行shell的n种方…