实测 (二)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图

2023-05-16

开发环境:NX+Ubuntu18.04+ROS-melodic

接着上篇,开始orb-slam2稠密回环建图

二、NX + D435i + ORB-SLAM2  稠密回环建图

先上效果图

 这里感谢大神提供一个可回环的稠密地图版本:

https://github.com/xiaobainixi/ORB-SLAM2_RGBD_DENSE_MAP.git

2.1 安装依赖(和orb-slam2环境配置一样,如果已经配置过,可以跳到pcl安装)

(1)Pangolin(推荐0.5版本)

//安装依赖:
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

//安装编译
git clone https://github.com/stevenlovegrove/Pangolin/tree/v0.5.git    
cd Pangolin
mkdir build
cd build
cmake ..         
make
sudo make install

(2)opencv3.2.0(巨坑!!!)

如果直接使用ros自带的3.2.0版本,这里的安装就可以跳过了,后面ubuntu下编译和ros下编译都是引用usr/基本都没问题,当然你也可以源码安装在/usr/local下,步骤如下:

去官网下载源码然后解压,这里是默认安装在/usr/local下,如果安装其它版本(如opencv3.4.x)的时候想让两个版本共存,就更改安装位置,就把“ CMAKE_INSTALL_PREFIX=/usr/local/ .. ”中的/usr/local改为你自己的路径

但是后续ros下编译需要重新下载cv_bridge编译,否则会有两个版本的 .so文件冲突!!!(恶心的是:编译虽然warning,但是会通过,但是后面一运行就报错)

//安装一些依赖
sudo apt-get install libpng-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libopenexr-dev
sudo apt-get install libtiff-dev
sudo apt-get install libwebp-d
sudo apt-get install libgtk2.0-dev
sudo apt-get install libgtk-3-dev

//安装编译
cd opencv-3.2.0 
mkdir build  
cd build  
cmake -D CMAKE_BUILD_TYPE=Release OPENCV_ENABLE_NONFREE=ON  -DENABLE_PRECOMPILED_HEADERS=OFF -D OPENCV_GENERATE_PKGCONFIG=YES -D  CMAKE_INSTALL_PREFIX=/usr/local/ ..
make
sudo make install

(3)pcl1.8.1+vtk7.1.1

因为我们需要实现稠密点云,这是通过pcl库实现的,因此需要安装pcl,如果你的ros自带了pcl1.8,那么恭喜你,你又可以跳过安装了,如果不放心,可以重新源码安装:

这里小编一开始使用了如下的配置:vtk8.2.0+pcl1.12.0,但是在编译pcl1.12.0的时候报错了:“c++: fatal error: no input files” 原因是cmakelist.txt中C++的标准不对(pcl1.9开始就需要C++14的标准了),可是nx板也支持c++14,这里具体不知道什么原因,最后还是用原始的pcl1.8.1吧,vtk6.3 或者 7.1.1(推荐):

//安装依赖
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui 
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libpcap-dev
sudo apt-get install libflann1.9 libflann-dev   //ubuntu18.04用1.9;ubuntu16.04用1.8
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev 
sudo apt-get install mono-complete
sudo apt-get install libopenni-dev libopenni2-dev
sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev

如果需要vtk6.3:

sudo apt-get install vtk6 libvtk6.3 libvtk6-dev libvtk6.3-qt libvtk6-qt-dev 

如果需要vtk7.1.1,去官网下载7.1.1版本的源码、解压:

cd VTK-7.1.1
mkdir build 
cd build
cmake ..
make -j4
sudo make install

若中间报错:Found unsuitable Qt version “” from NOTFOUND, this code requires Qt 4.x
解决办法:sudo apt-get install qt4-default

pcl1.8.1官网源码下载,解压后:

cd pcl-1.8.1
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=None ..
make -j4
sudo make install

若测试程序的时候,执行可执行文件时不显示点云并报错缺少lib.so.1文件,则
1)打开/etc/ld.so.conf文件并在第二行粘贴以下内容后保存
/usr/local/lib/libvtkglew-7.1.so.1
2)sudo ldconfig
然后在测试程序下重新cmake和make即可

2.2 安装编译ORB-SLAM2_RGBD_DENSE_MAP.git

(1)ubuntu下编译: 

git clone https://github.com/xiaobainixi/ORB-SLAM2_RGBD_DENSE_MAP.git

下载后,先将正常版本的Vocabulary文件夹复制到ORB-SLAM2_RGBD_DENSE_MAP下,打开camkelist.txt ,将44行左右的 “ find_package( PCL 1.7 REQUIRED ) ”中的1.7改为1.8,修改后如下: 

find_package( PCL 1.8 REQUIRED )

将camkelist.txt 的 -march=native 删除,(包括 DBoW2 和 g2o 以及 ros 下的cmakelist.txt) 如下:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3  ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall  -O3 ")

打开include / pointcloudmapping.h,49行“bool loopbusy;”修改如下:

bool loopbusy = false;

打开src / pointcloudmapping.cc,86-88行修改如下,将rgb的颜色修改正确

p.b = color.ptr<uchar>(m)[n*3+2];
p.g = color.ptr<uchar>(m)[n*3+1];
p.r = color.ptr<uchar>(m)[n*3];

在void PointCloudMapping::viewer() 中的while循环后(174-175之间)加入下面一行,用于保存点云地图,同时在开头增加 #include <pcl/io/pcd_io.h>

pcl::io::savePCDFileBinary( "vslam.pcd", *globalMap );

开始ubuntu下编译 

cd ORB-SLAM2_RGBD_DENSE_MAP
chmod +x build.sh
./build.sh

(2)ROS下编译

由于我们需要使用的d435i的RGB信息以及深度信息,因此我们将上一篇中配置的rs_camera.launch文件中的以下imu参数修改为false

 <arg name="enable_gyro"         default="false"/>
 <arg name="enable_accel"        default="false"/>

将 ORB-SLAM2_RGBD_DENSE_MAP/Examples/ROS/ORB_SLAM21/src/ros_rgbd.cc中的topic修改为D435i发布的rgb和对齐后的depth信息

message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/color/image_raw", 100);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/aligned_depth_to_color/image_raw", 100);

打开CMakeLists.txt,将第3行和第6行的opencv、pcl位置就直接删了,并增加下面5行:

find_package(PCL REQUIRED)    //新增这一行

include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/../../../
${PROJECT_SOURCE_DIR}/../../../include
${Pangolin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}     //新增这一行
)

add_definitions(  ${PCL_DEFINITIONS} )     //新增这一行
link_directories(  ${PCL_LIBRARY_DIRS} )  //新增这一行

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so
${PROJECT_SOURCE_DIR}/../../../lib/libopencv_core3.so
-lboost_system   //新增这一行
)

开始编译:

添加环境配置
gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/nx/你自己的路径/Example/ROS
source ~/.bashrc

开始编译
chmod +x build_ros.sh
./build_ros.sh

如果编译过程中报错:“libboost_filesystem.so :error adding symbols: file in wrong format” 以及“libboost_system.so :error adding symbols: file in wrong format”和“lib/libopencv_core3.so :error adding symbols: file in wrong format” 需要我们将系统自带的3个文件替换到ORB-SLAM2_RGBD_DENSE_MAP/lib 下:

首先删掉lib下的3个 libboost_filesystem.so,libboost_system.so 和 lib/libopencv_core3.so“

找到系统文件所在位置,并复制到lib下,例如针对:libboost_filesystem.so

locate boost_filesystem
sudo cp /usr/lib/aarch64-linux-gnu/libboost_filesystem.so /home/nx/ORB-SLAM2_RGBD_DENSE_MAP/lib

然后再  ./build_ros.sh

编译成功后,我们开始配置D435i所需的yaml文件,修改Asus.yaml中的内参和camera.bf。需要完整版的yaml文件,可以在评论区留下联系邮箱

(3)开始试验

打开相机:

cd realsense_ws
source devel setup.bash
roslaunch realsense2_camera rs_camera.launch 

稠密建图运行:

rosrun ORBSLAM21 RGBD Vocabulary/ORBvoc.bin Examlpe/ROS/ORB_SLAM21/Asus.yaml

下一篇我们将使用奥比中光的Astrapro 相机实现orb-slam2稠密回环,未完待续~

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

实测 (二)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图 的相关文章

  • vector介绍与使用(C++)

    目录 一 vector的介绍 二 vector的使用 2 1构造函数 2 2vector iterator 的使用 2 3vector 空间增长问题 2 4 vector 增删查改 2 5 vector 迭代器失效问题 一 vector的介
  • 网络层——IP协议详细解读

    文章目录 IP协议1 IP协议的报文格式2 IP协议的地址管理3 IP地址的组成4 IP协议的路由选择 IP协议 之前介绍了传输层的重点协议 xff0c TCP和UDP协议 xff0c 以下将介绍网络层的重点协议IP协议 1 IP协议的报文
  • 基于opencv实现追踪物体的功能

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp From sztu 自动化专业的小菜鸡 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 本篇将介绍计算机视觉的物体追踪 基于py
  • PX4源码中CMakeLists.txt文件的相关含义

    在px4每个模块中 xff0c 都会引用到CMakeLists txt文件 比如 代码 px4 add module MODULE modules attitude estimator q MAIN attitude estimator q
  • 位置式Pid和增量式Pid的定义及应用

    PID算法是一个典型的闭环控制系统 P I D xff0c 比例 积分 微分 开环 xff1a 输入量对输出量没有反馈作用 xff1b 闭环 xff1a 输入量对输出量有反馈作用 位置式Pid 位置式Pid就是位置闭环控制 xff0c 位置
  • Mysql中的in和find_in_set的区别?

    1 是否使用索引 find in set xff1a 不使用索引 xff0c 是全表扫描in xff1a 使用索引 2 使用方法 在mysql中in的使用情况如下 xff08 in里面放的是常量 xff09 xff1a select fro
  • Docker 常用命令---持续更新中

    Docker xff1a Docker的三大核心概念 xff1a 镜像 容器 仓库 镜像 xff1a 类似虚拟机的镜像 用俗话说就是安装文件 容器 xff1a 类似一个轻量级的沙箱 xff0c 容器是从镜像创建应用运行实例 xff0c 可以
  • ubutu的Realsense摄像头的环境配置的报错解决(个人认为官方文档存在问题)以及官方视频流样例测试(无需摄像头)

    Realsense支持多种语言进行开发 xff0c 因为之前学过python xff0c 所以计划使用Pycharm进行相关的项目开发 xff0c 由于没带摄像头回家 xff0c 所以使用了官方的视频流进行测试 xff0c 以下是 xff3
  • launch文件

    1 launch文件 可以一次性启动多个ROS节点 实现 选定功能包右击 gt 添加 launch 文件夹 选定 launch 文件夹右击 gt 添加 launch 文件 编辑 launch 文件内容 lt launch gt lt nod
  • ROS文件系统相关命令

    1 增 catkin create pkg 自定义包名 依赖包 61 61 61 创建新的ROS功能包 sudo apt install xxx 61 61 61 安装 ROS功能包 2 删 sudo apt purge xxx 61 61
  • ros服务通信

    1 srv 61 请求 43 响应 2 不要重复添加路径 xff0c 会导致头文件寻找不到 客户端 include 34 ros ros h 34 include 34 plumbing server client AddInts h 34
  • ros常用组件

    一 TF坐标变换 transform frame frame id是被参考的坐标系 xff0c child frame id是另一个坐标系 translation代表child frame id相对于frame id的偏移量 rotatio
  • FreeRTOS学习(1)-- FreeRTOS任务创建、调度、任务间通信

    FreeRTOS学习 xff08 1 xff09 FreeRTOS任务创建 调度 任务间通信 文章目录 FreeRTOS学习 xff08 1 xff09 FreeRTOS任务创建 调度 任务间通信前言一 FreeRTOS任务状态二 Free
  • 让你秒读懂阿里云数据库架构与选型

    01 阿里云RDS的架构与规格大图 下图从高可用类型 数据可靠性 资源复用率 规格大小 规格代码等角度 xff0c 较为完整的概况了当前RDS主要的架构与规格 xff1a 从高可用区架构上 xff0c 分为单节点 xff08 基础版 xff
  • ROS teb_local_planner使用

    teb local planner则是2D导航堆栈的base local planner的插件 实现了一个在线优化的本地轨迹规划器 xff0c 用于导航和控制移动机器人 xff0c 作为ROS 导航包的插件 全局规划器生成的初始轨迹在运行时
  • rosdep update 出现time out 连接超时的问题(非常有效)

    问题 xff1a 在安装ros过程中 xff0c 按照官网执行rosdep update的指令大概率会出现如下报错 xff1a ERROR error loading sources list 39 The read operation t
  • 手把手教你写第一个Windows窗口

    第一个Windows窗口 效果展示详细过程设计窗口类注册窗口类创建窗口显示窗口更新窗口消息循环 源代码实用工具图标制作软件图标库 效果展示 第一个Windows窗口 详细过程 设计窗口类 首先 xff0c 自定义窗口类型名和窗口标题 xff
  • 把当前ubuntu16.0.4系统做成镜像<iso>

    Systemback是一个Ubuntu系统中用于发布自定义系统镜像和系统备份的软件 有时候我们对自己的Ubuntu做了很多设置 xff0c 比如各种软件包 xff0c 各种自定义的配置 我们想要在另一台电脑上也安装一个和我们一模一样的系统
  • VS2010开发ribbon风格的程序

    转自 xff1a http blog csdn net akof1314 article details 5268071 创建MFC应用程序项目 实际上 xff0c Ribbon界面 Office 2007风格的界面 的开发早在2008年就
  • win10下载DEVC++5.11

    作为一款免费开源的 C C 43 43 IDE xff0c 内嵌 GCC 编译器 xff08 GCC 编译器的 Windows 移植版 xff09 xff0c 且是 NOI NOIP 等比赛的指定工具 xff0c Dev C 43 43 的

随机推荐

  • ros实现串口通信(记录一次脱发的经历)

    组长发布任务 xff0c 我负责使用ros实现串口通讯 怎么说呢 xff0c 头发可以在地上 桌子上甚至任何地方 xff0c 除了头上 经过询问 xff0c 任务大概分为三个点 xff1a 1 接收话题名为 config detector
  • C++的第五个实验

    又是两周一次的C 43 43 实验时间 xff0c 最近事可真是太多了 问题一 1 检查下面的程序 xff0c 找出其中的错误 xff0c 并改正之 然后上机调试 xff0c 使之能正常运行 题目一 span class token mac
  • 当我第一次在ubuntu20.04上使用gazebo

    突然就有了一个长期任务 xff0c 过分emo了 学习第一步 xff0c 试试在我的不知道重装了多少遍的ubuntu20 04上运行一个gazebo小车模型 是根据这个视频做的记录 xff0c 如有问题 xff0c 欢迎指正 一 安装gaz
  • STM32——MPU6050六轴传感器

    一 xff0c 什么是MPU6050 MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件 xff0c 内带3轴陀螺仪和3轴加速度传感器 xff0c 并且含有一个第二IIC接口 xff0c 可用于连接外部磁力传感器
  • cuda10 + vs2017 下载安装,配置环境

    一 准备 1 xff0c 首先查询电脑GPU xff1a 1 xff09 Win10如何查看Nvidia支持的CUDA版本 xff1a xff08 1 xff09 打开 控制面板 xff0c 点击 硬件和声音 xff0c 点击 NVIDIA
  • Stratis和VDO高级存储

    Stratis和VDO高级存储 Stratis和vdo高级存储Stratis高级存储简介配置stratis服务 VDO高级存储简介配置VDO服务 Stratis和vdo高级存储 Stratis高级存储 简介 Stratis原理 xff1a
  • C语言 strstr函数的用法及模拟实现strstr函数

    C语言 strstr函数的用法及模拟实现strstr函数 一 strstr函数的用法二 模拟实现strstr函数的功能 一 strstr函数的用法 1 strstr函数原型 xff1a char strstr const char str1
  • Linux【shell命令以及运行原理】【权限】

    目录 一 shell命令以及运行原理 二 权限 1 用户的权限 2 文件的权限 3 权限的相关操作 第一种方法 第二种方法 改变所有者和所属组 常见的权限问题 1 目录的权限 xff1a 2 umask 粘滞位 如何将用户添加到信任列表赋予
  • 【Oracle】ORA-28000解决方法

    ORA 28000 账号被锁定 错误原因 xff1a 数据库中设置了密码最 错误次数为10次 xff0c 超过10次后导致账号被锁定 解决方案1 xff1a 1 查看 户使 的概要 件名 xff0c 般为DEFAULT SELECT USE
  • dpkg命令的用法

    dpkg命令的用法 dpkg 是Debian package的简写 xff0c 为 Debian 操作系统 专门开发的套件管理系统 xff0c 用于软件的安装 xff0c 更新和移除 所有源自 34 Debian 34 的Linux的发行版
  • 关于正则表达式的学习

    今天在写cpp题目的时候被字符串搜索恶心坏了 于是乎开始自学正则表达式 正则regex其实就是一个规范化的模板字符串 第一条 基础语法和注意事项 另外 在使用转义特殊字符的时候 要用到两个 才能有效果 b才代表一个数字 才能代表一个 34
  • 扩展卡尔曼滤波(EKF)

    本篇文章是看完http blog csdn net adamshan article details 78265754这篇文章后再加上自己的理解写的 xff0c 如果侵权可以联系我删除 xff0c 如果有不对的地方请您不啬赐教 xff01
  • OVS 基本操作命令

    1 ovs vsctl获取或者更改ovs vswitchd的配置信息 xff0c 此工具操作的时候会更新ovsdb server中的数据库 查看网桥 ovs vsctl show 添加网桥 ovs vsctl add br br0 创建po
  • 解决c++string类型变量无法输出中文的问题(环境:mingw+vscode)

    我也是在网上找了好久解决办法 其实很简单在visual code终端中输入chcp 936即可
  • 利用ros进行双目相机标定(发布双目相机话题再用cameracalibrator.py文件进行标定)

    1 创建工作环境 mkdir p opencv test src cd opencv test src catkin create pkg stereo camera std msgs roscpp rospy 2 修改CMakeLists
  • 串级PID 位置环+速度环

    1位置环和速度环的串级pid xff0c 首先要记住 xff0c 位置环的输出是速度环的输入 xff0c 最后控制输出为速度环的输出 速度环的PID控制器 代码如下 float Velocity KP A 61 400 Velocity K
  • 通过蓝点无限的学习,对UWB实现的过程以及对UWB连接WIFI的遇到的问题进行复盘

    超宽带 xff08 Ultra Wide Band xff0c UWB xff09 技术是一种无线载波通信技术 xff0c 它不采用正弦载波 xff0c 而是利用纳秒级的非正弦波窄脉冲传输数据 xff0c 因此其所占的频谱范围很宽 UWB技
  • Java——this关键字

    关于Java语言当中的this关键字 xff1a 1 this是一个关键字 xff0c 翻译为 xff1a 这个 2 this是一个引用 xff0c this是一个变量 xff0c this变量中保存了内存地址指向了自身 xff0c thi
  • 【开源“青女四轴”,DIY小四轴】

    开源 青女四轴 xff0c DIY小四轴 简介说明明确难点如何解决动态调节每个电机的升力 xff1f 硬件原理图如下 程序设计步骤建议最终程序声明 简介 四轴和遥控的主控芯片均为STM32F103C8T6 此开源项目为 从硬件设计到飞控的代
  • 实测 (二)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图

    开发环境 xff1a NX 43 Ubuntu18 04 43 ROS melodic 接着上篇 xff0c 开始orb slam2稠密回环建图 二 NX 43 D435i 43 ORB SLAM2 稠密回环建图 先上效果图 这里感谢大神提