疑难杂症篇(二十一)--Ubuntu18.04安装usb-cam过程出现的问题
创始人
2024-05-25 03:13:37

对Ubuntu18.04{\rm Ubuntu 18.04}Ubuntu18.04环境下的ROS{\rm ROS}ROS的melodic{\rm melodic}melodic版本安装usb−cam{\rm usb-cam}usb−cam过程出现的两个常见问题提出解决方案。



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

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

2.解决方案

查看usb−cam{\rm usb-cam}usb−cam功能包下的CMakeLists.txt{\rm CMakeLists.txt}CMakeLists.txt文件,其中CMakeLists.txt{\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 includeLIBRARIES ${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}/launchFILES_MATCHING PATTERN "*.launch"
)install(DIRECTORY include/${PROJECT_NAME}/DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)

分析CMakeLists.txt{\rm CMakeLists.txt}CMakeLists.txt文件可知在编译内容上,所依赖的库:avcodec、swscale、avutil{\rm avcodec、swscale、avutil}avcodec、swscale、avutil,使用locate{\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

得出具体路径后,在CMakeLists.txt{\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}
)

修改CMakeLists.txt{\rm CMakeLists.txt}CMakeLists.txt文件后,返回工作空间进行编译,如下图所示:
2

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

问题描述:解决问题1后,成功进行编译,但在打开摄像头的时候出现找不到Video0{\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

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...