双目测距------双目相机V1.0,将双目相机采集到任意一点的深度数据进行串口传输(带源码)
Depth2Uart
双目测距------双目相机V1.0,将双目相机采集到任意一点的深度数据进行串口传输
一、项目说明/Overview
所实现的功能:基于Intel Realsense官方提供的SDK,双目深度相机能获取到相机任何一个像素点距离前方障碍物的距离(即深度信息),并将深度信息串口数据发送至其它设备。
这个版本都是基于物理层上功能的实现,双目相机在这个工程当中只是作为了一个传感器使用,而Linux设备端也只做了双目相机的载体以及对双目采集到的深度信息进行串口传输,没有使用任何基于视觉相关的算法。
所以,这个版本肯定不是我们用上嵌入式设备的最终代码,大家可以把这个当作双目相机的一个入门工程来学习。
二、设备环境/Hardware

- 双目相机:能使用Intel Realsense SDK的深度相机均可实现功能,使用USB3.2的端口,这里我们使用的是Intel Realsense D435i深度实感相机;
- Linux设备:需要有两个及以上的USB口,可以选择树莓派、NVIDIA Jetson系列等主机,也可以使用虚拟机,测试使用的是Jetson Nano;
- 数据接收端: MCU系统,进行串口数据传输以及数据的使用,测试使用的是STM32进行串口数据接收。
三、使用方法/Usage
1、安装Ubuntu
推荐Ubuntu 18/20 LTS版本,兼容Ubuntu 22 LTS,本文部分依赖(如Intel Realsense SDK)官方文档暂未支持Ubuntu22,但实测可行。
2、安装ROS/ROS2
根据Ubuntu版本安装ROS/ROS2,安装方法可前往观看古月居/鱼香ROS相关视频,可使用一键安装脚本:https://github.com/fishros/install 。
本版本双目测距理论上不需要安装ROS系统,但安装ROS比较方便解决相关依赖,同时后续版本也会使用到就直接安装了。
3、安装Intel Realsense SDK
如出现问题可查看Linux官方安装文档
(1) 安装依赖
sudo apt-get install git libssl-dev libusb-1.0-0-dev libudev-dev pkg-config libgtk-3-dev libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
(2) 下载Intel Realsense SDK
git clone https://github.com/IntelRealSense/librealsense.git
这行代码默认是下载的最新稳定版的SDK,现在只支持ROS2了,可以前往github仓库查看具体要求。
下载指定版本在git clone后加上-b,如Ubuntu18/20一般安装ROS,v2.50.0版本为支持ROS1的最后版本,就使用下面这个代码:
git clone -b v2.50.0 https://github.com/IntelRealSense/librealsense.git
(3) 安装Intel Realsense SDK
cd librealsense
./scripts/setup_udev_rules.sh
mkdir build && cd build
cmake ..
make -j8
sudo make install
测试可以输入命令 realsense-viewer,可以看到一个软件打开,可以在此测试相机是否正常。
4、编译depth2uart.cpp
复制depth2uart.cpp(项目Software文件夹下)到Linux设备,在所在目录打开终端,输入以下代码编译cpp文件,生成depth2uart可执行文件,部分硬件可能会报错,可以根据报错查看缺少什么库文件,在最末尾加上-l再输入库名称。
g++ depth2uart.cpp -o depth2uart -lrealsense2 -lboost_system
5、给串口添加权限
输入以下命令可查询串口所在USB口。
ls -l /dev/ttyUSB*
默认是USB0,输入以下命令给串口添加权限,如果是其他USB则需要修改USB后面数字。
sudo chmod 777 /dev/ttyUSB0
6、运行depth2uart
./depth2uart
可以看到输出摄像头最中央一点的深度信息,数据串口发送至MCU系统接收。
7、设置开机自启动
开机自启动有很多种方法,比如在rc.local文件添加命令,即可开机自己动,可以上网查询。
这里推荐命令行输入‘gnome-session-properties’通过gnome设置开机自启动。
四、软件说明/SoftWare
具体代码见 2.Software/depth2uart.cpp 。
这个工程功能实现的原理:
- 串口数据的传输使用的是C++中的Boost库,这也是步骤4中增加-lboost_system的原因,使用其中的asio库实现IO操作。
- 双目相机数据的采集使用的是Intel Realsense官方的SDK,可以前往官方GitHub仓库查看学习。
五、后续/Questions
- 在这个工程中,传输的数据是某一点像素对应的深度值,仅仅获取这个数据在我们的嵌入式系统并没有太多的效果,所以在最终上嵌入式系统时,一般都是双向数据传输,将MCU设备端获取到的数据传输至Linux主控中进行计算,最后返回计算出来的控制信号给MCU端进行控制。
- 往Linux设备增加算法,CPU本身是能计算的,同时Jetson Nano等还配备“显卡”能够加速视觉计算,后续可以运行OpenCV视觉算法以及TensorFlow等深度学习算法,搭配控制系统进行更高级的运用……
六、源码下载
https://download.csdn.net/download/liufang_imei/87442500?spm=1001.2014.3001.5503
相关文章:
双目测距------双目相机V1.0,将双目相机采集到任意一点的深度数据进行串口传输(带源码)
Depth2Uart 双目测距------双目相机V1.0,将双目相机采集到任意一点的深度数据进行串口传输 一、项目说明/Overview 所实现的功能:基于Intel Realsense官方提供的SDK,双目深度相机能获取到相机任何一个像素点距离前方障碍物的距离࿰…...
jetson nano(ubuntu)安装Cmake
文章目录安装环境一.命令行安装二.Cmake源码编译安装安装环境 jetson nano 系统:4.6.1 一.命令行安装 sudo apt install cmake这种直接安装cmake的方式,其实安装的版本都太老了,这种方式不推荐 二.Cmake源码编译安装 更新一下系统软件 su…...
图的基本介绍和表示方式
图的基本介绍 为什么要有图这个基本数据结构? 我们还学习过线性表(数组、队列、链表和栈)和树,但是我们可以发现,线性表局限于一个直接前驱(就是只能有唯一一个前面的结点)和一个直接后继的(…...
本周大新闻|传微软解散工业元宇宙团队,MIT研发垂直堆叠全彩Micro LED
本周大新闻,AR方面,消息称微软解散工业元宇宙团队;德国AR公司Gixel GmbH亮相;Brilliant推出单片式附加形态AR眼镜;MIT研发垂直堆叠全彩Micro LED;谷歌XR串流正式上线。VR方面,索尼发布了PS VR2的…...
SpringMVC:拦截器(12)
拦截器1. 拦截器概念2. 拦截器入门案例2.1 环境准备2.2 拦截器开发步骤1: 创建拦截器类步骤2: 配置拦截器类步骤3: SpringMVC添加SpringMvcSupport包扫描和interceptor包扫描步骤4: 简化SpringMvcSupport的编写5 测试3. 拦截器参数解析(了解)3.1 前置处理…...
计算机网络3:HTTP1.0和HTTP1.1的区别
目录1. HTTP是什么2.HTTP1.0和HTTP1.1的区别3.名词解释(1)If-Modified-Since(IMS)、Expires(2)If-None-Match,Etag(3)If-Unmodified-Since1. HTTP是什么 超文本传输协议…...
Urho3D 编辑器说明
Urho3D编辑器是一个脚本应用程序,可以与Urho3D播放器应用程序一起运行。要开始,请执行以下任意命令:(在bin目录中)Editor.bat、Editor.sh或Urho3DPlayer Scripts/Editor.as Urho3D播放器应用程序支持的所有命令行选项…...
C++类基础(十一)
运算符重载(二) ● 对称运算符通常定义为非成员函数以支持首个操作数的类型转换 struct Str {int val 0;Str(int input): val(input){}auto operator(Str x){std::cout << "auto operator(Str x)\n";return Str(val x.val);} }; int …...
Windows安装系列:SVN Server服务
一、下载与安装 1、下载VisualSVN-Server-5.1.1-x64.msi 地址:Download | VisualSVN Server 2、找到最新版本SVN 5.1.1,直接双击它,弹出如下安装界面 3、点击Next 4、勾选我接受, 点击"Next" 5、默认选项,…...
快速傅里叶算法(FFT)快在哪里?
目录 前言 1、DFT算法 2、FFT算法 2.1 分类 2.2 以基2 DIT(时间抽取) FFT 算法为例 2.2.1 一次分解 2.2.2 多次分解 参考 前言 对信号分析的过程中,为了能换一个角度观察问题,很多时候需要把时域信号波形变换到频域进行分…...
利用Markdown写学术论文资料汇总贴
1是最详细的,重点看! Markdown 写作,Pandoc 转换:我的纯文本学术写作流程 2补充一些细节,也可以看看。 用Markdown写作学术论文 3写得和上面差不多,如果上面两篇有什么问题还没解决,可以看看…...
MySQL 高级查询
目录1.左关联2.右关联3.子查询4.联合查询5.分组查询1.左关联 MySQL中的左关联(Left Join)是一种基于共同列的连接操作, 它将左侧表中的所有行与右侧表中匹配的行结合在一起, 如果右侧表中没有匹配的行,则结果集中右侧…...
JavaSE学习day4_01 循环for,while,do...while
1. 循环高级 1.1 无限循环 for、while、do...while都有无限循环的写法。 最为常用的是while格式的。 因为无限循环是不知道循环次数的,所以用while格式的 代码示例: while(true){} 1.2 跳转控制语句(掌握) 跳转控制语句&…...
C/C++中的static关键字
概述在C/C中都有static关键字的使用,可以分别修饰变量和函数,分为静态变量【静态成员】、静态成员函数。2. static用法概况静态变量的作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0ÿ…...
67 自注意力【动手学深度学习v2】
67 自注意力【动手学深度学习v2】 深度学习学习笔记 学习视频:https://www.bilibili.com/video/BV19o4y1m7mo/?spm_id_fromautoNext&vd_source75dce036dc8244310435eaf03de4e330 给定长为n 的序列,每个xi为长为d的向量,自注意力将xi 既当…...
电子学会2022年12月青少年软件编程(图形化)等级考试试卷(二级)答案解析
青少年软件编程(图形化)等级考试试卷(二级) 一、单选题(共25题,共50分) 1. 一个骰子,从3个不同角度看过去的点数如图所示,请问5的对面是什么点数?( ) …...
关于链表中插入结点的操作……
服了,好久没敲链表了,这都忘了 newnode->next cur->next; cur->next newnode; newnode->next cur->next; cur->next newnode; newnode->next cur->next; cur->next newnode; newnode->next cur->next; cur-…...
【项目精选】百货中心供应链管理系统
点击下载源码 近年来,随着计算机技术的发展,以及信息化时代下企业对效率的需求,计算机技术与通信技术已经被越来越多地应用到各行各业中去。百货中心作为物流产业链中重要的一环,为了应对新兴消费方式的冲击,从供货到销…...
Qt优秀开源项目之十六:SQLite数据库管理系统—SQLiteStudio
首先,感谢CSDN官方认可 SQLiteStudio是一款开源、跨平台(Windows、Linux和MacOS)的SQLite数据库管理系统。 github地址:https://github.com/pawelsalawa/sqlitestudio 官网:https://sqlitestudio.pl/ 特性很多…...
Python __doc__属性:查看文档
在使用 dir() 函数和 __all__ 变量的基础上,虽然我们能知晓指定模块(或包)中所有可用的成员(变量、函数和类),比如:import string print(string.__all__)程序执行结果为:[ascii_lett…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
