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

news2024/11/19 2:47:41

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占用,给核心算法留点计算空间

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

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

相关文章

【教程】Linux/Jetson 安装X11VNC同步屏幕内容

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;请不吝给个[点赞、收藏、关注]哦~ 目录 背景说明 实际效果 安装步骤 安装 x11vnc 配置 x11vnc 配置 x11vnc 作为系统服务 使用 VNC 客户端连接 背景说明 通常vnc-server是单…

基于Java的俄罗斯方块游戏的设计与实现

关于俄罗斯方块项目源码.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89300281 基于Java的俄罗斯方块游戏的设计与实现 摘 要 俄罗斯方块是一款风靡全球&#xff0c;从一开始到现在都一直经久不衰的电脑、手机、掌上游戏机产品&#xff0c;是一款游戏规则简单…

[MRCTF2020]PixelShooter

是个安卓游戏题 re手肯定不会去玩游戏&#xff0c;先jadx分析一波 没有什么关键信息&#xff0c;但找到了一个unity类&#xff0c;想到apk也可以解压缩得到 .so 或者 Assembly-CSharp.dll 故又在dnspy分析一下 看了半天没有和flag有关信息&#xff0c;看wp&#xff1a; Asse…

用友网络的危与机:2023年亏损约10亿元,王文京面临严肃拷问

“企业在新的产业浪潮来临时&#xff0c;应该主动推进新阶段的产品和业务创新&#xff0c;这样才能够在新的浪潮成为主流的时候&#xff0c;走到行业前面&#xff0c;否则就会从产业发展的潮流中掉下来”。用友网络创始人王文京&#xff0c;曾用“冲浪理论”形容一家企业成功的…

单区域OSPF实验

实验目的&#xff1a; 理解OSPF的基本概念。掌握单曲于OSPF的配置掌握OSPF邻居状态的解读掌握通过Cost控制OSPF选路的方法掌握OSPF认证的配置方法 一、基础配置&#xff1a; 搭建实验拓扑图&#xff1b; 配置路由器接口的IP地址以及配置环回地址待后续使用 &#xff08;1&a…

ICode国际青少年编程竞赛- Python-6级训练场-多重递归

ICode国际青少年编程竞赛- Python-6级训练场-多重递归 1、 def move(a, b):if a > 12:returnDev.step(a)Dev.turnRight()if b < 4:move(a, b1)else:move(a2, 1) move(2, 1)2、 def move(a, b):if a < 2:returnif b 1: Spaceship.step(2)Dev.step(a)Dev.turnRight()De…

leetcode.K站中转(python)

开始准备用dfs深度搜索&#xff0c;发现n100&#xff0c;dfs可能会超时&#xff0c;即使用了剪枝。 class Solution:def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int:length k 2ans float(inf)rec []vis [True]*n…

idea2023.3.2版本全局设置maven地址

idea每次新建项目都默认使用了一个user目录下的地址&#xff0c;而不是自己安装的maven地址&#xff0c;每次创建项目后&#xff0c;都要重新从settings中设置一下maven地址。 可以全局修改&#xff1a;首先在File-->Close Project回到idea最开始的界面 然后在Customize里点…

重写muduo网络库之调用流程的梳理

目录 1、流程叙述 2、我们看看TcpServer的构造都做了什么&#xff1f; 3、start() 3.1 开启loop 3.2 连接的建立 3.3 数据的收发 4、连接的关闭 muduo网络库各组件梳理见此博客 重写muduo库之组件梳理 1、流程叙述 首先&#xff0c;我们是怎么使用的&#xff1f; 1.定…

每日一学—K邻算法:在风险传导中的创新应用与实践价值

文章目录 &#x1f4cb; 前言&#x1f3af; K邻算法的实践意义&#x1f3af; 创新应用与案例分析&#x1f525; 参与方式 &#x1f4cb; 前言 在当今工业领域&#xff0c;图思维方式与图数据技术的应用日益广泛&#xff0c;成为图数据探索、挖掘与应用的坚实基础。本文旨在分享…

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

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

关键字详解

1.用于定义访问权限修饰符的关键字 面向对象程序三大特性&#xff1a;封装、继承、多态。 1.1 访问权限符 Java 中主要通过类和访问权限来实现封装&#xff1a; 类可以将数据以及封装数据的方法结合在一起 &#xff0c;更符合人类对事物的认知&#xff0c;而访问权限用来控制…

怎样计算Excel一列数值中十位数为5的个数?

有一列数字&#xff0c;可能正数也可能是负数&#xff0c;有可能有小数&#xff0c;要怎么计算这列数字中十位数为5的数量有多少个&#xff1f; 一、按示例情况&#xff0c;数字均为整数 公式如下&#xff1a; SUM(--(MID(A1:A6,LEN(A1:A6)-1,1)"5")) 数组公式&a…

python的文件操作及函数式编程介绍

五、文件操作 1、读取键盘输入 input 获取标准输入&#xff0c;数据类型统一为字符串 #!/usr/bin/python # -*- coding: UTF-8 -*- str input("请输入&#xff1a;") print&#xff08;"你输入的内容是: ", str&#xff09; 这会产生如下的对应着输入的…

解锁客户需求密码:银行业数据分析在业务决策中的关键作用

一、引言 在数字化和大数据时代的浪潮下&#xff0c;银行业正经历着前所未有的变革。作为数据分析领域的资深专家&#xff0c;我深知数据分析在银行业务发展中的重要性和价值。本文将从银行业数据分析的角度出发&#xff0c;深入探讨相关业务场景下的数据分析应用&#xff0c;…

基于spingboot,vue线上辅导班系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 权限划分&#xff1a;用户&#xff0c;管理员 具有前后台展示&#xff0c;前台供用户使用&#xff1b;用户具有自己的后台&#xff0c;查看自己的老师课程等&#xff1b;管理员具有最大的权限后台。 用户&#xff1a…

Linux 第二十九章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

vuex的基本认知

目录 一、什么是vuex 二、vuex的应用场景 三、vuex的优势 一、什么是vuex Vuex是一个vue的状态管理工具&#xff0c;状态就是数据。 进一步解释&#xff1a;vuex是一个插件&#xff0c;可以帮助我们管理vue通用的数据&#xff08;多组件共享的数据&#xff09; 二、vuex的…

2024中国(厦门)国际医用消毒及感控设备展览会

2024中国&#xff08;厦门&#xff09;国际医用消毒及感控设备展览会 2024 China (Xiamen) International Medical Disinfection And Infection Control Exhibition 致力于打造医用消毒及感控设备产业采购一站式平台 时 间&#xff1a;2024年11月1-3日 November 1-3, 2024 …

算法_前缀和

DP34 【模板】前缀和 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n in.nextInt(),q in.ne…