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

2024-05-15 14:44

本文主要是介绍地平线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 L515Serial Number                 :     f0211269Firmware Version              :     01.05.08.01Recommended Firmware Version  :     01.05.08.01Physical Port                 :     2-1-2Debug Op Code                 :     15Product Id                    :     0B64Camera Locked                 :     YESUsb Type Descriptor           :     3.2Product Line                  :     L500Asic Serial Number            :     0003a9d3dadaFirmware 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:continuedepth_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占用,给核心算法留点计算空间

这篇关于地平线X3开发板Intel Realsense深度相机调试记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中