我和jetson-Nano的故事(11)——在ros中编译usb_cam

在jetson nano中编译旧版本的usb_cam

  • 1. 问题背景
    • 1.1 jetson nano的软件环境版本
  • 2.问题现象
  • 3.问题原因及解决办法

1. 问题背景

最近给jetson nano重装了系统之后,在编译今年人工智能ROS小车比赛用的工程包的时候,遇到一个问题迟迟没有解决,花费了一段时间才弄清楚原因和找到解决办法,现在记录如下

1.1 jetson nano的软件环境版本

这里可以直接使用jtop进行查看,没有jtop的话,先安装一下,安装方法如下:

Jetson Nano上安装jtop的步骤如下

  1. 安装pip3和依赖项:
    打开终端,运行以下命令安装pip3(如果尚未安装):
sudo apt-get install python3-pip python3-dev -y

安装其他依赖项,这些对于jtop的运行是必要的:

sudo apt-get install git cmake  
sudo apt-get install libhdf5-serial-dev hdf5-tools  
sudo apt-get install libatlas-base-dev gfortran
  1. 安装jtop
    使用pip3安装jetson-stats,它包含了jtop:
sudo -H pip3 install jetson-stats

安装完成后,可能需要重启jetson_stats服务:

sudo systemctl restart jetson_stats.service

重启系统以确保所有更改都已生效(可选):

reboot
  1. 运行jtop:

在终端中输入以下命令来启动jtop:

sudo jtop

如果安装后遇到无法运行jtop,并且一直提示重启jtop服务的问题,可以尝试再次使用pip3重新安装jetson-stats。

另外,如果你需要配置CUDA的环境变量,可以运行以下命令来编辑~/.bashrc文件(假设你的CUDA已经正确安装):

  • 查看cuda的bin目录下是否有nvcc:
ls /usr/local/cuda/bin
  • 如果存在nvcc,编辑~/.bashrc文件:
sudo vim ~/.bashrc

在文件末尾添加以下两行(注意在vim中,按I进入插入模式,按Esc退出插入模式,然后按:进入命令模式,输入wq并按Enter保存并退出):

export PATH=/usr/local/cuda/bin:$PATH  
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

保存并关闭文件后,运行以下命令使更改生效:

source ~/.bashrc

以上步骤应该能帮助你在Jetson Nano上成功安装并运行jtop。如果仍然遇到问题,请检查你的网络连接、软件源设置以及任何相关的错误消息,以便进一步诊断问题。



最终显示信息如下,注意OpenCV的版本,最好使用3.2.0的,如果是4.1.1的话,可能会出现冲突。
这里可以直接卸载掉,然后使用ros里面的opencv
其他安装opencv的方式可以参考我的另外一篇博文:
我和jetson-Nano的故事(10)——安装OpenCV3.2.0
在这里插入图片描述



2.问题现象

在使用catkin_make编译usb_cam编译时,报错信息如下

[ 75%] Linking CXX executable /home/agilex/idrive_ws/devel/lib/usb_cam/usb_cam_node
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_packet_from_data'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `sws_scale'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_frame_alloc'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `avcodec_close'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_frame_get_buffer'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_new_packet'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `avcodec_alloc_context3'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_log_set_level'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `avcodec_free_context'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_free'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `avcodec_open2'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `avcodec_send_packet'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `sws_getContext'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_image_get_buffer_size'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_parser_close'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_parser_init'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `avcodec_register_all'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `sws_freeContext'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `avcodec_receive_frame'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `av_image_copy_to_buffer'
/home/agilex/idrive_ws/devel/lib/libusb_cam.so: undefined reference to `avcodec_find_decoder'

3.问题原因及解决办法

出现这些链接错误是因为在编译过程中没有正确链接 FFmpeg 库。为了正确链接这些库,你需要确保 CMakeLists.txt 文件中包含了必要的库和头文件路径。

以下是详细步骤,确保 FFmpeg 库被正确找到并链接:

  1. 安装 FFmpeg 库
    首先,确保系统上安装了 FFmpeg 库。

    sudo apt-get update
    sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev
    
  2. 更新 CMakeLists.txt 文件
    编辑你的 ROS 包的 CMakeLists.txt 文件,确保正确链接所有必需的 FFmpeg 库。

    cmake_minimum_required(VERSION 3.0.2)
    project(usb_cam)find_package(catkin REQUIRED COMPONENTSroscppstd_msgs# Add other required components here
    )find_package(PkgConfig REQUIRED)
    pkg_check_modules(AV REQUIRED libavcodec libavformat libavutil libswscale)catkin_package(CATKIN_DEPENDS roscpp std_msgsDEPENDS AV
    )include_directories(${catkin_INCLUDE_DIRS}${AV_INCLUDE_DIRS}
    )add_executable(${PROJECT_NAME}_node src/your_node.cpp)target_link_libraries(${PROJECT_NAME}_node${catkin_LIBRARIES}${AV_LIBRARIES}
    )
    

    确保 pkg_check_modules 找到所有必要的 FFmpeg 库(libavcodec, libavformat, libavutil, libswscale)。

  3. 清理和重新编译
    在工作空间的根目录下,清理并重新编译:

    catkin_make clean
    catkin_make
    
  4. 完整的 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)
pkg_check_modules(AV REQUIRED libavcodec libavformat libavutil libswscale)###################################################
## 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}
DEPENDS AV
)###########
## Build ##
###########include_directories(include
${catkin_INCLUDE_DIRS}
${avcodec_INCLUDE_DIRS}
${swscale_INCLUDE_DIRS}
${avutil_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${AV_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}
${AV_LIBRARIES}
)#############
## 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"
)
  1. 确保头文件路径和库路径正确
    确保所有必要的头文件路径和库路径都在 include_directoriestarget_link_libraries 中正确配置。如果你的库安装在非标准路径中,可以通过手动设置路径来确保编译器能找到它们。

  2. 调试链接问题
    如果问题仍然存在,可以使用以下命令查看链接器的详细输出,以便进一步调试:

    VERBOSE=1 catkin_make
    

通过这些步骤,你应该能够解决链接错误并成功编译项目。

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

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

相关文章

惠海 H4112 同步整流30V降压芯片IC 24V转12V5V3.3V3.5A方案EN使能控制

惠海H4112同步整流30V降压芯片IC是一款DCDC电源管理芯片,它具备精确恒压和恒流的同步降压能力,适用于多种应用场景,如汽车充电器、照明灯、便携式设备供电电源和电池充电器等。 输出电压与电流调整: H4112支持输出电压在2.5V到2…

HNU-算法设计与分析-作业4

第四次作业【贪心算法】 文章目录 第四次作业【贪心算法】<1> 算法分析题4-1 会场安排问题<2> 算法实现题4-9 虚拟汽车加油问题<3> 算法实现题4-13 非单位时间任务安排问题<4> 算法实现题4-14 多元Huffman编码问题 <1> 算法分析题4-1 会场安排问…

牛客热题:合并二叉树

牛客热题&#xff1a;二叉树与双向链表> &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题…

最高18K/月!云计算、网络方向招人啦~

云计算工程师岗位职责&#xff1a; 1.计算机网络相关专业&#xff0c;云计算、虚拟化相关开局、维护为主&#xff1b; 2.主要负责H3C云产品项目交付&#xff0c;重大故障处理、包括虚拟化、私有云平台、分布式/集中式存储、云桌面等&#xff1b;任职要求&#xff1a; 1.精通云计…

java优先级队列

1. 优先级队列 1.1 概念 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该中场景下&#xff0c;使用队列显然…

【代码随想录】面试常考题目类型之贪心1

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记&#xff0c;为了之后方便观看 本质 局部最优推出全局最优 验证 验证可不可以用贪心算法最好用的策略就是举反例&#xff0c;想不到反例就试贪心 分发饼干 455. 分发饼干 - 力扣&#xff08;…

深入理解 House of Cat

Index 序言利用 FSOP 调用 House of Cat利用条件伪造IO流条件完整调用链分析 模板System (one_gadget) 模板ORW模板 Demo & Exp利用 __malloc_assert 调用 House of Cat例题&#xff1a;题目思路Exp 序言 原文章&#xff1a;深入理解 House of Cat 随着 GNU 持续不断的更…

redis7基础篇2 redis的3种模式(主从,哨兵,集群)模式

一 主从复制模式 1.1 主从模式 主从模式&#xff1a; 主机可以读&#xff0c;写&#xff0c;重机只能写操作。 主机shutdown后&#xff0c;从机上位还是原地待命&#xff1a;从机不动&#xff0c;原地待命&#xff0c;数据正常使用&#xff0c;等待主机重启归来。 主机shu…

【Threejs进阶教程-算法篇】1.常用坐标系介绍与2d/3d随机点位算法

2d/3d随机算法 学习ThreeJS的捷径坐标系简介平面直角坐标系和极坐标系空间直角坐标系圆柱坐标系球坐标系球坐标系与直角坐标系的转换 基于坐标系系统的随机点位算法平面直角坐标系随机平面直角坐标系随机的变形 空间直角坐标系随机二维极坐标系随机圆柱坐标系随机基于Cylinderc…

QT学习----知识整理(入门篇)

一、初识QT 1、序章 1.1 下载地址 官网&#xff1a;Try Qt | Develop Applications and Embedded Systems | Qt 或者&#xff1a;Index of /archive/qt&#xff08;下载慢&#xff09; 或者&#xff1a;FFmpeg中文网站 中文教程 Android 安卓 -QT 下载 1.2 组件介绍 MSVC…

在面对各种问题时,我们应该如何进行数据分析

python数据分析汇总 前言一、对比分析概念特征类型案例Matplotlib的颜色字母对照表解决遇到未知函数 二、相关性分析概念类型案例一案例二 三、时间序列分析概念类型案例 四、回归分析概念类型案例一案例二案例三 五、决策树概念计算过程案例 六、主成分分析概念计算过程案例 七…

分析人工智能在智慧银行服务中的实际应用以及面临的挑战

一、引言 近年来,人工智能(AI)技术快速发展,其在金融领域,特别是智慧银行服务中的应用日益广泛。人工智能以其独特的数据处理能力、预测分析能力以及自动化决策能力,极大地提升了智慧银行的服务效率、降低了运营成本,并优化了客户体验。然而,人工智能在智慧银行服务中…

web安全学习笔记(16)

记一下第27-28课的内容。Token 验证 URL跳转漏洞的类型与三种跳转形式&#xff1b;URL跳转漏洞修复 短信轰炸漏洞绕过挖掘 一、token有关知识 什么是token&#xff1f;token是用来干嘛的&#xff1f;_token是什么意思-CSDN博客 二、URL跳转漏洞 我们在靶场中&#xff0c;…

计算机SCI期刊,中科院2区TOP,对国人相当友好,一周内出版!

一、期刊名称 ISA Transactions 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;7.3 中科院分区&#xff1a;2区TOP 出版方式&#xff1a;订阅模式/开放出版 版面费&#xff1a;选择开放出版需支付$3950 三、期刊征稿范…

抖音小店有订单后怎么发货?实操分享!发货全流程来了

哈喽~我是电商月月 做无货源抖音小店的店铺在出单后怎么发货&#xff1f;今天我就来给大家解答这个问题&#xff0c;其中的注意事项新手商家可以收藏一下&#xff0c;避免犯错 抖音小店的商品出单后&#xff0c;商家在“管理中心-订单管理”页面就能看见所有待处理的订单 一…

github新手用法

目录 1&#xff0c;github账号注册2&#xff0c;github登录3&#xff0c;新建一个仓库4&#xff0c;往仓库里面写入东西或者上传东西5&#xff0c; 下载Git软件并安装6 &#xff0c;获取ssh密钥7&#xff0c; 绑定ssh密钥8&#xff0c; 测试本地和github是否联通9&#xff0c;从…

618好物推荐大赏:2024年必囤好物一网打尽,购物攻略助你抢购无忧!

在618购物狂欢节来临之际&#xff0c;我为大家精心挑选了一系列好物&#xff0c;它们不仅品质卓越&#xff0c;更能在日常生活中为我们带来无限便利与乐趣。这里的每一款产品都经过我严格筛选&#xff0c;只为给你最优质的购物体验。让我们一起在这个618&#xff0c;发现生活中…

统计学第2天

参数估计 基本概念 估计量与估计值 估计量&#xff1a;用于估计总体参数的随机变量 如&#xff1a;样本均值&#xff0c;样本比例&#xff0c;样本方差等 例如&#xff1a;样本均值就是总体均值的一个估计量 估计值&#xff1a;估计参数时计算出来的统计量的具体值 如&…

后端之路第一站——Maven

前提&#xff1a;得会基础java 前言&#xff1a;不知道出于什么原因&#xff0c;可能是喜欢犯贱吧&#xff0c;本人从大一到大二都一直在专研前端开发&#xff0c;一点也没接触过后端&#xff0c;但是突然抽风想学后端了&#xff0c;想试着自己全栈搞一下项目&#xff0c;于是在…

武汉星起航深耕亚马逊跨境,助力合作伙伴实现全球业务增长

在数字化浪潮席卷全球的今天&#xff0c;跨境电商业务蓬勃发展&#xff0c;成为推动国际贸易增长的重要引擎。亚马逊&#xff0c;作为全球最大的电商平台之一&#xff0c;以其独特的平台特点和全球化布局&#xff0c;为卖家和买家提供了便捷、高效的交易环境&#xff0c;成为众…