地平线X3开发板Intel Realsense深度相机调试记录

1.  预编译包

编译这个SDK花费了5.6个小时,为了方便各位后续使用,

各位可以直接下载编译好的文件,包含C++和Python的库,相关文件已经上传至百度云(提取码:awe4 )

在提供的这些文件中,压缩包built_realsense.zip为这些文件夹的集合。

  • 文件夹libincludebin的内容都要放在/usr/local文件夹下
  • 文件夹python3的内容注意要放在/usr/lib/python3/dist-packages/里面

 这里只提供了编译好的一些库,并没有测试,有问题的话欢迎各位指出。

2.  编译SDK

编译所需要的文件已经放在百度云(提取码:li0f )中,在编译前请提前下载

编译前需要注意以下几点:

  • 由于编译过程需要联网,然而开发板的有线网默认为静态地址,因此要强行关掉有线网的连接,关闭指令为sudo nmcli device disconnect eth0,eth0为网络名,可以利用sudo nmcli dev查看。
  • 依赖一些包,在安装前要安装上sudo apt-get install libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libusb-dev
  • 所需SDK依赖GLFW库,源码包已放在上述的百度云中,也可以从https://github.com/glfw/glfw/releases/download/3.3.7/glfw-3.3.7.zip中下载,之后参考博客《Ubuntu18.04安装glfw3.3》的方式进行安装。

以上内容是编译过程中记录的一些笔记,可能对丢失一些库,但是这些都会在系统上提示,根据需求安装即可。

下面开始编译Realsense的SDK,下面是操作步骤:

  1. 解压librealsense-2.50.0.zip,进入文件夹cd librealsense-2.50.0,并创建编译文件夹mkdir build
  2. 编译过程参考《Running pyrealsense2 on JetsonNano》,这里提到了利用RSUSB方法进行编译,我个人理解为是在编译过程中要将深度相机连接到开发板上(不确定是否正确啊)。我使用的cmake指令为:cmake ../ -DFORCE_RSUSB_BACKEND=ON -DBUILD_PYTHON_BINDINGS:bool=true -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=release,切记安装过程要联网
  3. cmake过程中会下载一些依赖的代码文件,有错误的话一定要根据需求修改,防止后续make的时候出错,导致白白编译。
  4. cmake成功之后就要使用make进行编译,因为系统内存只有2G,因此如果想一遍成的话,在build文件夹下输入make即可,切记不能使用多线程编译,内存不够(我没成功创建虚拟内存,似乎系统内核删除了虚拟内存的分配功能)。如果想更快的话,可以动态的输入make -j2,这样在内存不够的地方再改回make即可。
  5. 编译成功之后,输入sudo make install将编译好的库复制到系统中。

本方法编译的结果包含C++库和Python函数包

3.  使用Realsense

在使用前,一定要输入sudo rs-enumerate-devices查看设备支持的分辨率以及连接信息。

下面为设备连接信息,可以看到,当前设备识别的USB接口为3.2接口,这样就可以获取更大分辨率的RGBD图像了

Device info:
    Name                          :     Intel RealSense L515
    Serial Number                 :     f0211269
    Firmware Version              :     01.05.08.01
    Recommended Firmware Version  :     01.05.08.01
    Physical Port                 :     2-1-2
    Debug Op Code                 :     15
    Product Id                    :     0B64
    Camera Locked                 :     YES
    Usb Type Descriptor           :     3.2
    Product Line                  :     L500
    Asic Serial Number            :     0003a9d3dada
    Firmware Update Id            :     0003a9d3dada

同时记录,彩色相机和深度相机支持的配置,方便后续相机分辨率的设置。

下面提供获取RGBD数据的python代码

from hobot_vio import libsrcampy as srcampy
import cv2
import numpy as np
import time
import pyrealsense2.pyrealsense2 as rs

# 这里把前面的HDMI可视化部分的代码贴上
# 复制类class ImageShow(object)

pipeline = rs.pipeline()
config = rs.config()
## 这里根据前面sudo rs-enumerate-devices的输出进行配置
config.enable_stream(rs.stream.depth, 1024, 768, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 1920, 1080, rs.format.rgb8, 30)
align_to = rs.stream.color
alignedFs = rs.align(align_to)
profile = pipeline.start(config)

#######################################
## 下面是获取内参的方式
frames = pipeline.wait_for_frames()
depth = frames.get_depth_frame()
color = frames.get_color_frame()
# 获取内参
depth_profile = depth.get_profile()
print('depth_profile:', depth_profile)
# <pyrealsense2.video_stream_profile: 1(0) 640x480 @ 30fps 1>
print(type(depth_profile))
# <class 'pyrealsense2.pyrealsense2.stream_profile'>
print('fps:', depth_profile.fps())
# 30
print(depth_profile.stream_type())
# stream.depth
print('', depth_profile.unique_id)
# <bound method PyCapsule.unique_id of <pyrealsense2.video_stream_profile: 1(0) 640x480 @ 30fps 1>>
color_profile = color.get_profile()
print(depth_profile.fps())
print(depth_profile.stream_index())
color_intrin = cvsprofile.get_intrinsics()
print(color_intrin)
# width: 640, height: 480, ppx: 318.482, ppy: 241.167, fx: 616.591, fy: 616.765, model: 2, coeffs: [0, 0, 0, 0, 0]
depth_intrin = dvsprofile.get_intrinsics()
print(depth_intrin)
extrin = depth_profile.get_extrinsics_to(color_profile)
print(extrin)

depth_sensor = profile.get_device().first_depth_sensor()
depth_scale = depth_sensor.get_depth_scale()
print('depth scale: ', depth_scale)

####################
# 视频流展示
im_show = ImageShow()
while True:
    # 获取图片帧
    frameset = pipeline.wait_for_frames()
    aligned_frames = alignedFs.process(frameset)

    color_frame = aligned_frames.get_color_frame()
    depth_frame = aligned_frames.get_depth_frame()

    if not depth_frame or not color_frame:
        continue

    depth_img = np.asanyarray(depth_frame.get_data())
    color_img = np.asanyarray(color_frame.get_data())

    color_img = cv2.cvtColor(color_img, cv2.COLOR_RGB2BGR)
    depth_bgr = cv2.applyColorMap(cv2.convertScaleAbs(depth_img, alpha=0.03), cv2.COLORMAP_JET)
    show_img = np.hstack([color_img, depth_bgr])
    im_show.show(show_img)    
im_show.close()

跑起来之后,在显示屏上的展示效果如下,能够有效地获取目标的RGBD数据。

在这里插入图片描述

但是,比较危险的一点,在整体的展示过程中,内存耗用200M,CPU几乎占满,

这样很难继续做其他的工作(这也与RGBD分辨率为1920*1080有关,

而且获取数据这个过程存在大量的线程)。

希望后续这个板子能从硬件上对这个SDK进行一个适配,以腾出更多的计算空间给下游算法

 

4.  小结

终于完成了realsense的SDK编译与使用,这意味着这个新板子可应用在更多的场景。

希望后续能够对这个问题进行适配,降低CPU占用,给核心算法留点计算空间

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

思科模拟器学习1--Vlan Trunk

实验说明&#xff1a;将三台电脑的vlan 加到一台交换机里面&#xff0c;为了验证什么是虚拟局域网&#xff0c;把一个设备隔成三个空间&#xff0c;三个电脑互相不能通讯&#xff1b;目的是&#xff1a;vlan 1的通讯不可以向vlan 2传送&#xff0c;就是消息传送互不干扰的&…

独家揭秘:亲历清华大学答辩现场,惊喜万分 名校答辩不简单

会议之眼 快讯 五月&#xff0c;对于学术界来说&#xff0c;迎来了答辩的高潮&#xff01;是收获的季节&#xff01;今天&#xff0c;趁着阳光明媚&#xff0c;小编怀揣着对学术探索的无限热情和好奇心&#xff0c;决定亲自踏入中国顶尖学术殿堂——清华大学深圳国际研究生院&…

【核弹】我的第一款IDEA插件

SuperHotSwap 插件名称叫做&#xff1a;SuperHotSwap&#xff08;超级热更新&#xff09; 开发初心&#xff1a;旨在做出一款最便捷的IDEA热更新插件&#xff0c;减少用户操作步骤&#xff0c;提供零配置的可视化操作更新。 为什么要写这个插件&#xff1a; 每次改一下Mappe…

Linux内核发送网络数据

前言 我们开始今天对 Linux 内核⽹络发送过程的深度剖析。还是按照我们之前的传统&#xff0c;先从⼀段代码作为切⼊。 上述代码中&#xff0c;调⽤ send 之后内核是怎么样把数据包发送出去的。本⽂基于Linux 3.10&#xff0c;⽹卡驱动采⽤Intel的igb举例。 基础框架 我们看…

08 必会框架 - Spring全家桶

本课时主要介绍 Java 中常用的应用框架&#xff0c;重点讲解如下三部分内容。 Spring 框架中的主要知识点&#xff1b; NIO 框架 Netty 以及基于 Netty 实现的主流 RPC 框架 Motan、Dubbo 和 gRPC&#xff1b; ORM 框架 MyBatis。 常用框架汇总 先来看常用框架的知识点汇总…

AuroraFOC使用指南一(STM32F405双路FOC)

一. 简介 哈喽&#xff0c;感谢各位选择AuroraFOC开发板&#xff0c;在这里将对其进行一个详细的介绍&#xff0c;方便大家使用。并且对提供的工程文件和上位机的操作也进行了详细的说明。 有什么疑问或者好的建议 可以微信联系: WU1356742146 最后再次感谢大家的支持。 Aur…

番外篇 | 手把手教你利用YOLOv8进行热力图可视化 | 针对视频

前言:Hello大家好,我是小哥谈。YOLOv8的热力图可视化可以帮助我们更加直观地了解模型在图像中的检测情况,同时也可以帮助我们进行模型的调试和优化。热力图是一种颜色渐变的图像,不同颜色的区域表示不同程度的关注度或者置信度。在YOLOv8中,可以通过设置阈值来控制热力图的…

产品品牌CRUD

文章目录 1.renren-generator生成CRUD1.数据库表设计1.数据表设计2.分析 2.代码生成器生成crud1.查看generator.properties&#xff08;不需要修改&#xff09;2.修改application.yml 连接的数据库修改为云数据库3.启动renren-generator模块4.浏览器访问 http://localhost:81/5…

能聚合各站热点的DailyHot

什么是 DailyHot ? 今日热榜&#xff08;DailyHot&#xff09;是一个获取各大热门网站热门头条的聚合网站&#xff0c;能追踪全网热点、实现简单高效阅读。项目分为前、后端&#xff0c;其中后端提供了一个聚合热门数据的 API 接口。 &#x1f6a9; 后端 API 特性 极快响应&a…

vue3+ts(<script setup lang=“ts“>)刷新页面后保持下拉框选中效果

效果图&#xff1a; 代码&#xff1a; <template><div class"app-layout"><div class"app-box"><div class"header"><div class"header-left"></div><div class"title">室外智…

css实现围绕中心进行圆形旋转

效果如下 通过css animation属性能实现以上效果 先试用定位&#xff0c;将每一项设置一个初始位置 {cursor: pointer;left: 50%;width: 144px;height: 144px;display: flex;align-items: center;justify-content: center;margin-left: -72px;top: 228px;position: absolute;a…

Cesium 3DTileset Style 原理简析

Cesium 3DTileset Style 原理简析 应用层会看到这样的使用。那么原理是什么, 为啥写 height, 除了这个还有啥? const tileset await Cesium.Cesium3DTileset.fromUrl("../../public/tileset/building/tileset.json"); tileset.style new Cesium.Cesium3DTileSty…

【基本数据结构】链表

文章目录 前言链表简介头节点与尾节点特性 分类单向链表双向链表循环链表 单链表基本操作定义并初始化单链表读取节点插入节点删除节点修改节点 参考资料写在最后 前言 本系列专注更新基本数据结构&#xff0c;现有以下文章&#xff1a; 【算法与数据结构】数组. 【算法与数…

Python 操作数据库

十、Python3 操作数据库 1、Python3 操作 MySQL 1、基本介绍 Python3 操作 MySQL 数据库 可以使用的模块是 pymysql 和 MySQLdb。 这个两个模块都是通过自己的 API 执行原生的 SQL 语句实现的。 MySQLdb 是最早出现的一个操作 MySQL 数据库的模块&#xff0c;核心由C语言编…

LangChain-Chatchat 实践

1. 说明 比较了几个AI LLM的集成应用工具(比如Quivr, Dify, one-api), 还是LangChain-Chatchat更符合我的需要: 支持私有化部署不同的LLM知识库支持Api支持开源免费, 容易二开 相关路径: 条项路径LangChain-Chatchat 项目/data0/Projects/Langchain-ChatchatLLM 语言模型保…

【计算机毕业设计】ssm旅游景点管理系统设计

现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统 数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本旅游景点管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

vaspkit 画 Charge-Density Difference

(echo 314;echo $(cat 1))|vaspkit 文件1提前写好使用的CHGCAR路径 SPIN_DW.vasp ../ML2scf/SPIN_DW.vasp ../ML1scf/SPIN_DW.vasp POSite and negative 默认为blue,and 青色 (RGB 30 245 245) 正值&#xff1a;blue 。负值&#xff1a;青色 RGB 30 245 245。 提示&…

LLM Agent智能体综述(万字长文)

前言 &#x1f3c6;&#x1f3c6;&#x1f3c6;在上一篇文章中&#xff0c;我们介绍了如何部署MetaGPT到本地&#xff0c;获取OpenAI API Key并配置其开发环境&#xff0c;并通过一个开发小组的多Agent案例感受了智能体的强大&#xff0c;在本文中&#xff0c;我们将对AI Agent…

C++设计模式|创建型 5.原型模式

1.什么是原型模式&#xff1f; 原型模式⼀种创建型设计模式&#xff0c;该模式的核⼼思想是基于现有的对象创建新的对象&#xff0c;⽽不是从头开始创建。 在原型模式中&#xff0c;通常有⼀个原型对象&#xff0c;它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状…

Mysql数据存储格式分析

一、整体存储逻辑 1.1 Mysql数据存放位置 不同的存储引擎&#xff0c;对Mysql数据的存储是不同的。新建一个test数据库&#xff0c;里面有t1,t2和test5三张表&#xff0c;以Innodb和Myisam存储引擎为例&#xff1a; Innodb存储引擎&#xff1a; .frm文件&#xff1a;与表相…