使用 TX2 和 realsense D435i 相机运行 ORBSLAM3

2023-05-16

非 ROS 版本。
之后可能会更新 ROS 版本的 ORBSLAM3 配置指南。TODO

目录

  • TX2 刷机JetPack-4.6.1
  • 安装 realsense SDK 2.0
  • 编译 opencv-4.5.0
  • 编译 Pangolin-0.5
  • 编译运行 ORBSLAM3

TX2 刷机JetPack-4.6.1

  1. 在另外一台ubuntu系统的电脑或者虚拟机上(笔者的是ubuntu18.04虚拟机),下载并安装 NVIDIA SDK Manager。
    下载地址:https://developer.nvidia.com/nvidia-sdk-manager
    安装:

    sudo apt install ./sdkmanager_[version]-[build#]_amd64.deb 
    

    安装完成后,终端执行 sdkmanager即可启动。

  2. 按照官方教程 Install Jetson Software with SDK Manager: https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html,刷机 JetPack。

    各个版本的Jetpack的信息,包括对应的 ubuntu 版本,可以在这个网站查看:
    JetPack Archive: https://developer.nvidia.com/embedded/jetpack-archive

    刷机时需要将 TX2 和给 TX2 刷机的电脑连接在同一局域网下。

刷机完成后,环境中自带 eigen-3.3.4 以及 opencv-4.1.1,eigen 满足 ORBSLAM3 的版本要求,但是 opencv 不满足版本要求,所以需要额外的 opencv 。

安装 realsense SDK 2.0

TX2 安装教程:https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_jetson.md
通过 DEB 包方式安装:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev

终端执行 realsense-viewer,能够打开一个可视化窗口,说明安装成功。

如果安装成功,在 CMakeLists.txt 中加入类似以下代码,就能使用 realsense 提供的库。

cmake_minimum_required(VERSION 3.1.0)
# Find librealsense2 installed package
find_package(realsense2 REQUIRED)
# Enable C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
# Add the application sources to the target
add_executable(${PROJECT_NAME} hello_librealsense2.cpp)
# Link librealsense2 to the target
target_link_libraries(${PROJECT_NAME} ${realsense2_LIBRARY})

编译 opencv-4.5.0

最新的 ORBSLAM3(2022.04.29) CMakeLists.txt 文件里要求 OpenCV > 4.4。
选择合适版本下载:https://opencv.org/releases/

  1. 安装依赖:
    sudo apt install -y g++
    sudo apt install -y cmake
    sudo apt install -y make
    
  2. 编译:
    cd opencv
    mkdir build
    cd build
    cmake ..
    make -j4
    
  3. 安装(可选):
    sudo make install
    
    也可以选择不安装,之后在 CMakeLists.txt 文件里指定 opencv 库的路径即可。

编译 Pangolin-0.5

尝试过安装 Pangolin-0.6,但是有的依赖太新了,没有安装成功。
github 仓库:https://github.com/stevenlovegrove/Pangolin/tree/v0.5

  1. 安装依赖:
    sudo apt-get install libglew-dev
    sudo apt-get install cmake
    sudo apt-get install libpython2.7-dev
    sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev
    sudo apt-get install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev
    
  2. 下载Pangolin-0.5,编译:
    cd Pangolin
    mkdir build
    cd build
    cmake ..
    make -j4
    
  3. 安装(可选):
    sudo make install
    
    也可以选择不安装,之后在 CMakeLists.txt 文件里指定 Pangolin 库的路径即可。

编译运行 ORBSLAM3

github仓库:https://github.com/UZ-SLAMLab/ORB_SLAM3
ORBSLAM3 提供了 build.sh 脚本文件,该脚本首先编译第三方库 DBoW2, Sophus 和 g2o,然后解压 Vocabulary/ORBvoc.txt.tar.gz 文件,最后编译 ORBSLSM3。

以上编译过程都使用了 make -j加速编译,这容易导致编译过程中系统卡顿,甚至会降低编译速度,所以宜把 build.sh 文件里的 make -j改为 make -j4,使用 4 个线程编译。

编译 ORBSLAM3 的时候,首先会生成一个 ORBSLAM3 库,然后再基于该库编译 Examples 和 Examples_old 文件夹的子文件夹里相应的源文件,生成相应的可执行程序。
如果不需要生成所有的可执行程序,可以在 CMakeLists.txt 里注释掉,缩短编译时间。

  1. 执行脚本 build.sh,开始编译
    如果之前安装了 opencv 和 Pangolin,就不需要修改 CmakeLists.txt 文件;如果只编译没安装,为了让 CMake 能够找到我们编译好的 opencv 和 Pangolin ,需要在在CmakeLists.txt 中指定库的路径:

    ...
    set(OpenCV_DIR opencv路径/opencv/build)
    find_package(OpenCV 4.4)
    ...
    set(Pangolin_DIR Pangolin路径/Pangolin/build)
    find_package(Pangolin REQUIRED)
    ...
    

    即在相应的 find_package(…) 前指定路径到 build 文件夹。

    执行 build.sh 文件:

    cd ORB_SLAM3
    chmod +x build.sh
    ./build.sh
    

    等待完成编译即可。
    如果 realsense SDK 没有安装成功,是不会生成 realsense 可执行程序的。

  2. 运行
    这里运行 双目-惯性 例子,其它类似:

    ./Examples/Stereo-Inertial/stereo_inertial_realsense_D435i Vocabulary/ORBvoc.txt ./Examples/Stereo-Inertial/RealSense_D435i.yaml
    

    笔者在运行该程序的时候,程序初始化阶段会出现段错误:Segmentation fault (core dumped),最后发现是 src/Settings.cc 文件中 运算符重载函数 ostream &operator<<(std::ostream& output, const Settings& settings) 中下以下代码导致:

    for(size_t i = 0; i < settings.originalCalib2_->size(); i++){
    	output << " " << settings.originalCalib2_->getParameter(i);
    }
    

    然而并没有发现代码存在什么问题。TODO
    注释以上代码,重新编译,就能成功运行。

    附上一张运行成功的截图:
    ORBSLAM3这里直接使用了 ORBSLAM3 提供的标定文件,实际应用中需要自行对 相机 和 IMU 进行内外参标定。ORBSLAM3 提供了标定文档 Calibration_Tutorial.pdf ,使用 Kalibr ROS 标定包进行标定。TODO

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TX2 和 realsense D435i 相机运行 ORBSLAM3 的相关文章

  • linux c语言高级编程-目录操作

    目录操作总共有以下几个函数 xff1a 1 创建目录 int mkdir const char pathname mode t mode 2 删除目录 int rmdir const char pathname 3 查看目录状态 int s
  • BeagleBone Black使用(一):狗板简介

    前言 BeagleBone 与 Arduino 和 Raspberry Pi xff08 树莓派 xff09 可以说是目前应用最广泛的三大嵌入式开源平台 而 BeagleBone 在一定程度上可视为融合了 Arduino 与树莓派的优点 x
  • 慧数汽车大数据分析:车市竞争将由打造爆款向构建“产品矩阵”转型

    在车企只要完成年销量三十万辆的目标时 xff0c 只需认认真真培育出一款爆款车就足够了 xff0c 如哈弗H6 完成年销量50万辆的目标时 xff0c 只需认认真真培育出一两款爆款车就足够了 xff0c 如哈弗H6 43 哈弗H2 但为什么
  • 4.10 Python tuple元组详解

    元组 xff08 tuple xff09 是 Python 中另一个重要的序列结构 xff0c 和列表类似 xff0c 元组也是由一系列按特定顺序排序的元素组成 元组和列表 xff08 list xff09 的不同之处在于 xff1a 列表
  • 使用ROS和RealSense直接获取点云

    点云获取 Realsense获取内参创建ROS工作环境创建ROS工作包package向package中添加cpp代码catkin make编译失败失败1 使用ROS订阅节点 xff08 rgb和depth xff09 ROS包安装升级Rea
  • 集成单点登录

    随着现在的系统越来越多 xff08 OA考勤 xff0c 学生宿舍管理等等 xff09 在使用中是不是还在为一次一次的登录而烦恼 xff1f 或者忘了密码而尴尬 xff0c 现在 xff0c 有一个好东西来解决这个问题了 那就是单点登录 单
  • PID算法入门与C语言代码实现

    PID算法的入门理解以及C代码实现 在结束了自控原理的学习后 xff0c 了解到PID算法是一种万能算法 xff0c 在课设中也是经常使用到的一种算法 xff0c 所以想具体的来进行以下总结与学习 xff0c 如果有错漏的地方 xff0c
  • 【Ubuntu18.04安装px4+mavros(解决mavros报错问题)】

    Ubuntu18 04安装px4 43 mavros xff08 解决mavros报错问题 xff09 安装ros melodic重新安装gazebo9 19安装mavros安装px4 我的电脑为联想R7000P2021款 xff0c 之前
  • 嵌入式面试题3

    1 讲一下STM32时钟系统 时钟系统类似于脉搏 xff0c 控制着CPU的命脉 xff0c STM32的时钟源又不像51的时钟源那么单一 xff0c 因为STM32的MCU较为复杂 xff0c 且外设较多 xff0c 并不是所有的外设都需
  • 将 linuxmint 20.2 设置成 mac 主题

    将 linuxmint 20 2 设置成 mac 主题 1 安装Adapta Nokto主题2 安装Numix Circle图标3 安装plank4 设置主题和图标5 设置字体 使用 vmware 安装 LinuxMint20 2 并打造
  • [转载][paper]Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey

    文章目录 摘要 深度学习是当前人工智能崛起的核心 在计算机视觉领域 xff0c 它已经成为从自动驾驶汽车到监控和安全等各种应用的主力 虽然深度神经网络在解决复杂问题方面取得了惊人的成功 通常超出了人类的能力 xff0c 但最近的研究表明 x
  • [paper]Feature Squeezing: Detecting Adversarial Examples in Deep Neural Networks

    本文提出了两种特征压缩方法 xff1a 减少每个像素的颜色位深度使用空间平滑来减少各个像素之间的差异 特征压缩通过将与原始空间中许多不同特征向量相对应的样本合并为单个样本 xff0c 从而减少了对手可用的搜索空间 通过将DNN模型对原始输入
  • C# List集合查找删除指定数据

    C List集合查找删除指定数据 文章目录1 实体类2 操作第一个负荷条件数据3 操作所有符合条件数据4 优质源码 文章目录 1 实体类 public class FaultLevelModel public string LBWJ get
  • 【论文阅读】AM-Softmax:Additive Margin Softmax for Face Verification. 1801.05599.【损失函数设计】

    原文链接 xff1a https blog csdn net weixin 43154149 article details 122611784 文章目录 1 四个问题2 论文简介1 Introduction xff08 相关工作 xff1
  • MobaXterm连接出现 Network error: Connection timed out 问题解决

    MobaXterm连接出现 Network error Connection timed out xff1a 接前文 xff1a CentOS安装 点此查看文章 xff0c 安装之后的SSH连接 xff1a 解决思路如下 xff1a 1 检
  • 撰写论文时如何复制参考文献公式----Mathpix及Mathtype教程

    同学们好啊 xff0c 我们在写论文时常常需要使用一些复杂的公式 xff0c 自己对着敲又费时费力 xff0c 那么如何才能讲文献中或者书本上的公式复制在自己的文章中嘞 xff1f 阿阮分享两个公式神器 xff0c 配合使用效果更好哈 xf
  • 驱动及驱动开发的简单理解

    一直对驱动有着强烈的好奇心 xff0c 怎奈工作始终与其无缘 xff0c 且未来也不大可能接触驱动 因此 xff0c 今天用了一些时间 xff0c 去简单的了解了一下驱动及驱动开发 如果有错误的理解 xff0c 请予以指正 xff0c 不胜
  • Mac ping IP+端口

    MacOS中ping IP 43 端口 nc vz w 2 192 168 1 1 8080 windows下 telnet 192 168 1 1 8080
  • 对文件夹下所有灰度图片进行像素值的修改

    最近在跑UNet训练的时候 xff0c 想用自己的数据集做训练 xff0c 发现数据集无法加载进去 xff0c 对比了一下源码所使用的数据集 xff0c 发现是gt的像素值不对导致的 xff0c 为了省事就写了个修改gt像素值的小脚本 im
  • Linux操作系统-信号量

    信号量也属于一种进程间通信的机制 xff0c 与其他的进程间通信不同 xff0c 信号量不是用来传输数据的 xff0c 而是用来进程间同步与互斥 除此之外 xff0c 信号量还可以实现线程间的互斥 信号量是什么 xff1f 信号量的本质是一

随机推荐

  • 你应该知道的 50 个 Python 单行代码

    你应该知道的 50 个 Python 单行代码 1 字母移位词 xff1a 猜字母的个数和频次是否相同2 二进制转十进制3 转换成小写字母4 转换成大写字母5 字符串转换为字节类型6 复制文件7 快速排序8 n 个连续数之和9 赋值交换10
  • npm安装报错ETIMEOUT

    npm安装报错 npm安装报错 xff1a npm ERR code ETIMEDOUT npm ERR errno ETIMEDOUT npm ERR network request to https registry npmjs org
  • JavaScript中的异步

    一 什么叫异步 xff1f 在JS中有同步和异步两种模式 1 同步 xff08 Synchronous xff09 一般指后一个任务等待前一个任务结束 xff0c 程序的执行顺序与任务的排列顺序是一致的 2 异步 xff08 Asynchr
  • 北邮人论坛镜像

    http bbs cloud icybee cn default
  • RLock锁的使用

    try RLock lock 61 redissonClient getLock 34 ppt pos sms code lock 34 43 34 orderSmsCode 34 System out println 34 得到的锁 34
  • Ubuntu开机自动挂载SD卡到指定挂载点并将Docker默认存储路径改为SD卡

    Ubuntu开机自动挂载SD卡到指定挂载点并将Docker默认存储路径改为SD卡 查看磁盘信息查看磁盘原挂载点永久开机自动挂载分区 修改文件 etc fstab应用挂载修改docker默认存储路径 查看磁盘信息 sudo fdisk l 如
  • JS数组对象,过滤掉不要的对象

    其实本来很简单 xff0c 奈何我自己把自己绕进去了 又是觉得自己不适合干开发的一天啊 const array1 61 id null name null id null name null id 1 name 2 我需要筛出不同时为空的数
  • Hadoop权威指南

    1 Hadoop基础知识 第1章 初识Hadoop Hadoop代替配有大量硬盘的数据库来进行大规模数据分析的原因是 xff1a 传输速率 xff08 取决于硬盘的带宽 xff09 的提升远大于寻址时间 xff08 将磁头移动到特定硬盘位置
  • 创建新分支,拉取代码

    1 查看当前已存在分支 git branch 2 创建新的分支 创建一个dev分支 git checkout b dev 3 提交分支到远程仓库 git push origin dev 4 删除本地分支 git branch D dev
  • 操作系统之什么是中断?

    什么是中断 xff1f 在学习操作系统中 xff0c 经常性的会看到中断这个概念 xff0c 最典型的就是汇编代码中的int命令 用一个比较通俗的概念来说 xff0c 就是计算机会连接许多外接设备 xff0c 包括磁盘 显示器 键盘鼠标等等
  • 树莓派断网自动重连WiFi

    树莓派WiFi有时候信号不好会断 xff0c 并不会自动重新连网 解决办法是 xff1a 写一个自动断网重连的脚本 xff0c 让pi定时执行并检查网络是否连通 xff0c 如断网则自动重新连接 连接还是失败 xff0c 重启 1 xff0
  • Flask 中使用 AJAX 异步加载 Bootstrap 表格(Tables)

    Flask 中使用 AJAX 异步加载 Bootstrap 表格 Tables 1 快速安装 2 一步一步做 3 概述 4 项目结构 4 1 Python 部分 app py 4 2 HTML 部分 index html 4 3 Styli
  • OpenMV超声波测距

    OpenMV超声波测距 本文首发于 xff1a https www bilibili com read cv3051569 参考链接 xff1a https blog csdn net bei dai he article details
  • Git常用命令pull、push、fetch

    pull pull意为拉 xff0c 这里引申为拉取代码 在Git命令中使用pull xff0c 会将你的远程代码拉取到本地并进行合并 格式 xff1a git pull lt 远程主机名 gt lt 远程分支名 gt lt 本地分支名 g
  • Ubuntu系统man命令中文汉化

    1 下载中文包 进入 opt xff0c 使用管理权限下载 xff1a wget https src fedoraproject org repo pkgs man pages zh CN manpages zh 1 5 1 tar gz
  • 文末彩蛋 | 这个 Request URL 长得好不一样

    有朋友拿到一个网站请求的链接问这要怎么解密 xff1f 很明显这不是加密的数据 xff0c 这是一张图片 base64 后的结果 xff0c 第一次写爬虫朋友遇到这样的请求 xff0c 可能需要琢磨一下这是什么东西 如果有遇到类似数据 xf
  • Redis(十) 布隆过滤器

    速记 为什么使用布隆过滤器 xff1f 1 为了省内存 xff0c 提高速率 2 因为1所以布隆过滤器不需要百分百正确 3 说存在不一定存在 xff0c 说不存在一定不存在 4 在解决缓存穿透的问题时 xff0c 拦截了大部分的请求 xff
  • 第五章:数学运算-statistics:统计计算-平均值

    5 5 statistics 统计计算 statistics模块实现常用的统计公式 xff0c 允许使用python的各种数值类型 xff08 int float xff0c Decimal和Fraction 来完成高效计算 5 5 1 平
  • 用proxychains4解决rosdep init问题教程

    在终端下载源码 sudo git clone https github com rofl0r proxychains ng git 进入安装目录 cd proxychains ng 配置 configure prefix 61 usr sy
  • 使用 TX2 和 realsense D435i 相机运行 ORBSLAM3

    非 ROS 版本 之后可能会更新 ROS 版本的 ORBSLAM3 配置指南 TODO 目录 TX2 刷机JetPack 4 6 1安装 realsense SDK 2 0编译 opencv 4 5 0编译 Pangolin 0 5编译运行