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

本文主要是介绍实测 (二)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发环境: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稠密回环,未完待续~

这篇关于实测 (二)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418378

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

海鸥相机存储卡格式化如何恢复数据

在摄影的世界里,‌每一张照片都承载着独特的记忆与故事。‌然而,‌当我们不慎将海鸥相机的存储卡格式化后,‌那些珍贵的瞬间似乎瞬间消逝,‌让人心急如焚。‌但请不要绝望,‌数据恢复并非遥不可及。‌本文将详细介绍在海鸥相机存储卡格式化后,‌如何高效地恢复丢失的数据,‌帮助您重新找回那些宝贵的记忆。‌ 图片来源于网络,如有侵权请告知 一、‌回忆备份情况 ‌海鸥相机存储卡格式化如何恢复数据?在意

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

机器视觉硬件选型根据某项目相机镜头

一 项目总需求 1、大视野检测需求: (1)大视野: ①产品尺寸15.6寸屏幕,产品大小:350mm x 225mm; ②产品料盘尺寸大小:565mm x 425mm; ③工作距离:880mm;检测精度:500μm; 1、大视野检测需求: (1)大视野: ①产品尺寸15.6寸屏幕,产品大小:350mm x 225mm; ②产品料盘尺寸大小:565mm x 425mm; 工作距离:

005:VTK世界坐标系中的相机和物体

VTK医学图像处理---世界坐标系中的相机和物体 左侧是成像结果                                                    右侧是世界坐标系中的相机与被观察物体 目录 VTK医学图像处理---世界坐标系中的相机和物体 简介 1 在三维空间中添加坐标系 2 世界坐标系中的相机 3 世界坐标系中vtkImageData的参数 总结:

NX二次开发—进阶(二)

一、创建圆弧 在NX上通过代码画出圆弧,定义起始和终止位置,还有圆心位置和半径 创建圆弧,需要获取CSYS的矩阵ID,通过UF_CURVE_create_arc函数进行创建 //定义参数UF_CURVE_arc_t arc;arc.start_angle = 0.0;arc.end_angle = 225 * DEGRA;//DEGRA=PI/180//中心坐标arc.arc_center

Kubernetes的alpha.kubernetes.io/nvidia-gpu无法限制GPU个数

问题描述: Pod.yaml文件中关于GPU资源的设置如下: 然而在docker中运行GPU程序时,发现宿主机上的两块GPU都在跑。甚至在yaml文件中删除关于GPU的请求,在docker中都可以运行GPU。 原因: 上例说明alpha.kubernetes.io/nvidia-gpu无效。查看yaml文件,发现该docker开启了特权模式(privileged:ture): 而

Ubuntu安装docker及nvidia-docker2

Ubuntu 通过apt安装 Ubuntu安装docker后再安装nvidia-docker2时经常出现版本不匹配的问题,可以分以下两步安装: # 安装dockerexport VERSION=18.06.1-ce && curl -sSL get.docker.com | sh# 安装nvidia-docker2curl -s -L https://nvidia.github.io/nv