NVIDIA Jetson Xavier NX部署VINS-fusion-GPU

2023-05-16

NVIDIA Jetson Xavier NX部署VINS-fusion-GPU

一、环境配置(Ubuntu 18.04)

1、Cuda 10.2的安装

sudo apt-get update
sudo apt-get install cuda-toolkit-10-2

安装好之后,在 .bashrc中配置环境变量。source之后,nvcc – version 即可查看cuda版本。

export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_ROOT=/usr/local/cuda

2、Eigen(用ROS自带的也可以)

# Remove pre-built Eigen
 sudo apt-get remove libeigen3-dev 
cd ~/Downloads/
wget -O eigen.zip https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.zip #check version
unzip eigen.zip
mkdir eigen-build && cd eigen-build
cmake ../eigen-3.3.7/ && sudo make install
pkg-config --modversion eigen3 # Check Eigen Version

在这里插入图片描述

3、Ceres solver

cd ~/Downloads/
sudo apt-get install -y cmake libgoogle-glog-dev libatlas-base-dev libsuitesparse-dev
wget http://ceres-solver.org/ceres-solver-1.14.0.tar.gz
tar zxf ceres-solver-1.14.0.tar.gz
mkdir ceres-bin
mkdir solver && cd ceres-bin
cmake ../ceres-solver-1.14.0 -DEXPORT_BUILD_DIR=ON -DCMAKE_INSTALL_PREFIX="../solver" 
 
  #good for build without being root privileged and at wanted directory
  
make -j3 # 6 : number of cores
make install
bin/simple_bundle_adjuster ../ceres-solver-1.14.0/data/problem-16-22106-pre.txt # to check version

在这里插入图片描述

4、Opencv 安装

关于Opencv 的安装需要特别谨慎,不建议频繁删除以前的库,因为多个项目使用的版本可能不同,所以可以将常用的版本安装在/usr/local下,将其余版本安装在自己Download或者home下
如果需要删除原来的版本,执行以下命令:

# remove prebuilt opencv
sudo apt-get purge libopencv* python-opencv 
sudo apt-get update
sudo apt-get install -y build-essential pkg-config
 
## libeigen3-dev # recommend to build from source
 
sudo apt-get install -y cmake libavcodec-dev libavformat-dev libavutil-dev \
    libglew-dev libgtk2.0-dev libgtk-3-dev libjpeg-dev libpng-dev libpostproc-dev \
    libswscale-dev libtbb-dev libtiff5-dev libv4l-dev libxvidcore-dev \
    libx264-dev qt5-default zlib1g-dev libgl1 libglvnd-dev pkg-config \
    libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev mesa-utils     
 
sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy
# To fix OpenGL related compilation problems 
 cd /usr/lib/aarch64-linux-gnu/
sudo ln -sf libGL.so.1.0.0 libGL.so
sudo vim /usr/local/cuda/include/cuda_gl_interop.h
 # Comment (line #62~68) of cuda_gl_interop.h 
 //#if defined(__arm__) || defined(__aarch64__)
//#ifndef GL_VERSION
//#error Please include the appropriate gl headers before including cuda_gl_interop.h
//#endif
//#else
 #include <GL/gl.h>
//#endif

安装新的版本(因为VINS-FUSION-GPU版本需要支持CUda的OpenCV,所以选择3.4.1版本)
Then once linking is done, go to Downloads to begin opencv installation

cd ~/Downloads/
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.1.zip # check version
unzip opencv.zip
cd opencv-3.4.1/ && mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREFIX=/usr/local \     #这里的/usr/local可以换成自己的安装路径,到时候在Cmakelist里设置自己设置的路径即可。
        -D WITH_CUDA=ON \
        -D CUDA_ARCH_BIN=7.2 \     #对于NX和AGX,选7.2,Nano,TX2选6.2 
        -D CUDA_ARCH_PTX="" \
        -D ENABLE_FAST_MATH=ON \
        -D CUDA_FAST_MATH=ON \
        -D WITH_CUBLAS=ON \
        -D WITH_LIBV4L=ON \
        -D WITH_GSTREAMER=ON \
        -D WITH_GSTREAMER_0_10=OFF \
        -D WITH_QT=ON \
        -D WITH_OPENGL=ON \
        -D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" \
        -D WITH_TBB=ON \
         ../
make  # running in single core is good to resolve the compilation issues         
sudo make install
cd ../../ && sudo rm -rf opencv-3.4.1 # optional (can save 10GB Disk Space)
pkg-config --modversion opencv # Check opencv Version

在这里插入图片描述
OpenCV 在NX上的安装比较慢,差不多需要1个小时。OpenCV安装好以后,需要进一步编译CV-Bridge( cv_bridge是在ROS图像消息和OpenCV图像之间进行转换的一个功能包)。

5、CV-Bridge的编译

CV-Bridge的安装需要下载对应的版本,由于NX 是基于Ubuntu 18.04的ARM系统,因此下载melodic版本的CV-Bridge。首先,通过以下连接进入下载页面:

https://github.com/ros-perception/vision_opencv

如图所示:
下拉选择melodic版本的CV-Bridge在这里插入图片描述

# 选择下载melodic版本到catkin_ws/src目录下,
gedit vision_opencv/cv_bridge/CMakeLists.txt
# Edit OpenCV PATHS in CMakeLists and include cmake file
# /usr/local/share/OpenCV 选择自己安装的OpenCV对应路径
find_package(OpenCV 3 REQUIRED PATHS /usr/local/share/OpenCV NO_DEFAULT_PATH 
  COMPONENTS
    opencv_core
    opencv_imgproc
    opencv_imgcodecs
  CONFIG
)
include(/usr/local/share/OpenCV/OpenCVConfig.cmake)  #under catkin_python_setup()
# Save and close CMakeLists
#  Build the package
cd .. && catkin_make

二、Vins-Fusion GPU编译安装

1、Vins-Fusion GPU

cd ~/catkin_ws/src && git clone https://github.com/pjrambo/VINS-Fusion-gpu #GPU

sudo apt-get install ros-melodic-tf
sudo apt-get install ros-melodic-image-transport
sudo apt-get install ros-melodic-rviz

# Edit CMakeLists.txt for loop_fusion and vins_estimator
cd ~/catkin_ws/src/VINS-Fusion-gpu/loop_fusion && gedit CMakeLists.txt

##For loop_fusion : line 19
#find_package(OpenCV)
# /usr/local/share/OpenCV/ OpenCVConfig.cmake 选择自己安装的OpenCV对应路径
include(/usr/local/share/OpenCV/OpenCVConfig.cmake)

cd ~/catkin_ws/src/VINS-Fusion-gpu/vins_estimator && gedit CMakeLists.txt

##For vins_estimator : line 20
#find_package(OpenCV REQUIRED)
# /usr/local/share/OpenCV/ OpenCVConfig.cmake 选择自己安装的OpenCV对应路径
include(/usr/local/share/OpenCV/OpenCVConfig.cmake)

cd ~/catkin_ws/
source devel/setup.bash
catkin_make

2、数据测试。

2.1公开数据集测试【以EuRoC(Stereo cameras + IMU)为例】

 roslaunch vins vins_rviz.launch
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

数据可以通过一下链接下载到:

http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
如果下载慢的话,也可以通过以下连接获取

KITTI
链接: https://pan.baidu.com/s/1UIoP1TgGLLWWpKYVrre9WA 密码: dbsb
EuRoC
链接: https://pan.baidu.com/s/1zvxyN1KlIk28_LvC36WU5Q 密码: f1rv
shapenet
链接: https://pan.baidu.com/s/1pdRk3FOxRe5YRBVGP0ACJw 密码: 4knl
TUM
链接: https://pan.baidu.com/s/1GFy8MZmH4TZGakzGWudyhQ 密码: ptga
数据来源原文链接:https://blog.csdn.net/weixin_43828675/article/details/117049952(感谢嚣张的叉烧包同志)

2.2 测试自己的设备(D435i+阿木P450)

在配置参数文件中加入以下参数,使得GPU起作用
选择合适的topic

In the config file, there are two parameters for gpu acceleration.
use_gpu: 0 for off, 1 for on
use_gpu_acc_flow: 0 for off, 1 for on
If your GPU resources is limitted or you want to use GPU for other computaion. You can set
use_gpu: 1
use_gpu_acc_flow: 0
If your other application do not require much GPU resources, I recommanded you to set
use_gpu: 1
use_gpu_acc_flow: 1

在这里插入图片描述
IMU和相机外参标定可以通过VINS实时在线标定或者使用Kalibr工具包进行标定,相关资料比多了,不再赘述。

下期给各位铁子们汇报在阿木实验室P450上部署VINS+Prometheus+Ggo-Planner的工作。

文献参考

1、无人机自主导航(ARM架构的vins-fusion-GPU部署)

https://blog.csdn.net/weixin_45600405/article/details/125249964?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-3-125249964-blog-119830683.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-3-125249964-blog-119830683.pc_relevant_landingrelevant&utm_relevant_index=4

2、安装环境OpenCV

https://github.com/arjunskumar/vins-fusion-gpu-tx2-nano

3、调内外参数

https://www.bilibili.com/video/BV1WZ4y167me?p=11&vd_source=1682913523e03074db0225c9475c4c71

4、技术分享 | 带你具体部署VINS_FUSION_GPU版本

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

NVIDIA Jetson Xavier NX部署VINS-fusion-GPU 的相关文章

  • 如何选择在哪个 GPU 上运行作业?

    在多 GPU 计算机中 如何指定 CUDA 作业应在哪个 GPU 上运行 例如 在安装 CUDA 时 我选择安装NVIDIA CUDA lt gt Samples然后运行了几个实例nbody模拟 但它们都运行在一个 GPU 0 上 GPU
  • CUDA 流销毁和 CudaDeviceReset

    我已经使用 CUDA 流实现了以下类 class CudaStreams private int nStreams cudaStream t streams cudaStream t active stream public default
  • 将 2D 数组复制到已知可变宽度的 GPU

    我正在研究如何将每行可变宽度的 2D 数组复制到 GPU 中 int rows 1000 int cols int host matrix malloc sizeof int rows int d array int length Each
  • 我可以在 Windows Server 2019 中运行 NVIDIA DeepStream SDK 吗?

    System 我安装了 Windows Server 2019 操作系统NVIDIA Tesla T4 张量核心 GPU Goal 计划从 IP 摄像机读取实时流视频并进一步逐帧处理 目标是利用 NVIDIA DeepStream SDK
  • Linux 中没有 X.org 的 OpenGL

    我想在 Linux 中打开一个没有 X 的 OpenGL 上下文 有什么办法可以做到吗 我知道集成英特尔显卡硬件是可能的 尽管大多数人的系统中都有 Nvidia 卡 我想要一个适用于 Nvidia 卡的解决方案 如果除了通过集成英特尔硬件之
  • Cuda 内核返回向量

    我有一个单词列表 我的目标是匹配一个非常非常长的短语中的每个单词 我在匹配每个单词时没有问题 我唯一的问题是返回包含每个匹配信息的结构向量 In code typedef struct int A B C Match global void
  • Cuda char* 变量赋值

    这是本文所选答案的后续问题 cuda程序的输出不是预期的 https stackoverflow com questions 6561005 output of cuda program is not what was expected 6
  • 为什么 Cuda/OpenCL 的全局内存中不存在库冲突?

    我还没有弄清楚并且谷歌没有帮助我的一件事是 为什么有可能与共享内存发生银行冲突 但在全局内存中却没有 银行与寄存器会存在冲突吗 UPDATE哇 我真的很感谢 Tibbit 和 Grizzly 的两个回答 看来我只能给一个答案打绿色复选标记
  • 使用 CUDA 进行行列式计算 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或免费可用的代码可以计算a的行列式small 6x6 双精度矩阵完全在 GPU 上 这是计
  • 使用python ctypes与nvapi交互(后续附演示代码)

    这是我之前问题的后续 有关 python ctypes 和 nvapi 的帮助 https stackoverflow com questions 6163770 help with python ctypes and nvapi 我正在发
  • 当有足够可用内存时 CUDA 内存不足

    I m having trouble with using Pytorch and CUDA Sometimes it works fine other times it tells me RuntimeError CUDA out of
  • 使用 CUDA 和 cudaMallocPitch 的 2D 数组

    我一直在 stackoverflow 上阅读一些关于 2D 数组和 cudaMallocPitch 的线程 并且尝试将 cudaMallocPitch 与我找到的小文档一起使用 但是我现在面临一个问题 我需要遍历一个数组并执行类似的操作 f
  • 在 Optimus 笔记本电脑中以编程方式强制使用 NVIDIA GPU

    我正在编写 DirectX 游戏 当我在 Optimus 笔记本电脑上运行它时 会使用 Intel GPU 导致性能非常糟糕 如果我使用上下文菜单或将可执行文件重命名为 bf3 exe 或其他一些著名的游戏可执行文件名称来强制使用 NVID
  • nvcc 和 NVIDIA-smi 显示的不同 CUDA 版本

    我对运行时显示的不同 CUDA 版本感到非常困惑which nvcc and nvidia smi 我的 ubuntu 16 04 上安装了 cuda9 2 和 cuda10 现在我将 PATH 设置为指向 cuda9 2 所以当我跑步时
  • OpenGL 3:​​glBindVertexArray 使 GL_ELEMENT_ARRAY_BUFFER 无效

    我确信如果你通过绑定缓冲区glBindBuffer 您可以放心地假设它保持绑定状态 直到目标通过另一个调用反弹glBindBuffer 因此 当我发现调用时 我感到非常惊讶glBindVertexArray 将绑定到 GL ELEMENT
  • OpenCL 在调用 clGetPlatformIDs 时崩溃

    我是 OpenCL 新手 在配备 Intel R HD Graphics 4000 运行 Windows 7 的 Core i5 计算机上工作 我安装了支持 OpenCL 的最新 Intel 驱动程序 GpuCapsViewer 确认我有
  • 是否可以在设备函数中调用cufft库调用?

    我在主机代码中使用 cuFFT 库调用 它们工作正常 但我想从内核调用 cuFFT 库 早期版本的 CUDA 没有这种支持 但是有了动态并行性 这可能吗 如果有任何关于如何实现这一目标的示例 那就太好了 尽管在 Kepler cc 3 5
  • Nvidia Theano docker 镜像不可用

    尝试运行 docker 命令 nvidia docker run d p 8888 8888 e PASSWORD 123abcChangeThis theano secure start notebook sh Then open you
  • Visual Studio - 过滤掉 nvcc 警告

    我正在编写 CUDA 程序 但收到令人讨厌的警告 Warning Cannot tell what pointer points to assuming global memory space 这是来自 nvcc 我无法禁用它 有没有办法过
  • 在 Mac OS X 10.7.4 上使用 OpenCL 禁用 Nvidia 看门狗

    我有一个 OpenCL 程序 对于小问题运行良好 但是当运行较大的问题超过 Nvidia 硬件上运行内核的 8 10 秒时间限制时 虽然我没有将显示器连接到我正在计算的 GPU Nvidia GTX580 上 但一旦内核运行大约 8 10

随机推荐

  • 使用VMware+Ubuntu,无法切换大小写的异常处理

    问题 xff1a 在虚拟机VMware下 xff0c 使用Ubuntu系统时 xff0c 可能会出现当切换到大写字母后 xff0c 无法在切换成小写 解决方案 xff1a 这是VMware的bug xff0c 解决方法是如下 xff1a 1
  • linux网络编程---IP地址

    目录 一 Linux下IP地址的表示方式 1 1 通用套接字的地址类型定义如下 xff1a 1 2 以太网中的地址类型表示 1 3 结构sockaddr和结构sockaddr in的关系 1 4 本地socket中使用的地址类型 二 IP地
  • 嵌入式中利用ubuntu-base构建根文件系统

    在嵌入式环境中 xff0c 我们最常用busybox yocto或buildroot来构建根文件系统 xff0c 这种情况下 xff0c 当我们需要使用一些组件的时候 xff0c 往往需要我们使用源码编译 xff0c 移植到开发板中 那有没
  • 【无标题】

    前言 eventfd可以用于线程或者父子进程间通信 xff0c 内核通过eventfd也可以向用户空间进程发消息 其核心实现是在内核空间维护一个计数器 xff0c 向用户空间暴露一个与之关联的匿名fd 不同线程通过读写该fd通知或等待对方
  • Python url请求提示certificate verify failed unable to get local issuer certificate

    python当使用requests get获取https链接时 xff0c 提示如下错误 xff1a ssl SSLCertVerificationError SSL CERTIFICATE VERIFY FAILED certificat
  • mybatisplus @Select注解中拼写动态sql异常

    使用mybatisplus后 xff0c 手写SQL语句很少了 xff0c 偶尔使用 64 Select时 xff0c 之前一直用实体类传递参数 xff0c 完全能够正常使用 xff0c 今天换成了参数传递 xff0c 报下面的错误 spa
  • 使用mybatis plus批量插入数据

    之前用mybaits插入数据时 xff0c 需要在sql语句中作特殊的处理 xff0c 然后才能够批量插入数据 今天试验了一下mybatis plus的批量插入方式 xff0c 简直太简单了 xff0c 太爽了 xff0c 真真切切的体会到
  • 使用java的modbus4j的Rtu方式获取监测数据

    最近要从modbus总线上获取数据 xff0c 还要用java开发 xff0c 找了半天 xff0c 感觉modbus4j在github上评价比较高 xff0c 尝试了一下 xff0c 果然很好用 xff0c 比之前的方法方便很多 在使用过
  • JAVA使用RXTXcomm包操作串口数据流

    最近对接下位机 xff0c 对方没有使用modbus总线协议来对接 xff0c 直接使用的操作流对接 xff0c 找了一下java中使用RXTXcomm jar比较方便 xff0c 下面是包的使用方法 1 maven工程中引入依赖 可能这个
  • 搭建分布式存储服务minio详细过程

    最近项目的存储量比较大 xff0c 考虑项目后期存储需要拓展 xff0c 决定使用分布式存储 xff0c 综合考察后 xff0c 最终选定使用minio作为存储服务 以下是使用步骤 xff0c MARK一下 xff01 1 服务器 span
  • STM32单片机的学习方法(方法大体适用所有开发版入门)

    1 xff0c 一款实用的开发板 这个是实验的基础 xff0c 有时候软件仿真通过了 xff0c 在板上并不一定能跑起来 xff0c 而且有个开发板在手 xff0c 什么东西都可以直观的看到 xff0c 效果不是仿真能比的 但开发板不宜多
  • HTTP协议各字段信息

    HTTP协议 xff1a 超文本传输协议 xff0c 为一个应用层协议 xff1b 协议只是传输的一种约定 xff0c 我们也可以自定义一种协议 xff0c 只不过说有些大佬已经写好 xff0c 我们用就可以了 HTTP协议的内容 xff1
  • k8s和docker区别

    k8s和docker区别有以下几点 xff1a 1 k8s是一种开放源码的容器集群管理系统 xff0c 能够实现自动化部署 扩展容器集群 维护等功能 2 Docker是一种开放源码的应用容器引擎 xff0c 开发者可以将他们的应用和依赖打包
  • VMware虚拟机中不能解析域名

    VMware虚拟机中能够正常访问局域网IP xff0c 输入域名不能上网 xff0c 但是ping一下外网ip是可以通的 xff0c 不能解析域名 xff0c 解决方法 xff1a span class token number 1 spa
  • 在Ubuntu安装软件时,显示“E:无法定位软件包

    今天在安装can utils时 xff0c 使用了命令sudo apt install can utils xff0c 提示 E 无法定位软件包 34 xff0c 也不明白为啥报这个错 xff0c 命名我的是linux系统呀 xff0c 哪
  • linux下can调试工具libsocketcan、canutils安装与使用

    1 本次使用的组件版本 libsocketcan 0 0 11 tar bz2 下载地址 xff1a https public pengutronix de software libsocketcan libsocketcan 0 0 11
  • vue中methods、mounted等使用方法整理

    created html加载完成之前 xff0c 执行 执行顺序 父组件 子组件 mounted html加载完成后执行 执行顺序 子组件 父组件 methods 事件方法执行 watch 去监听一个值的变化 xff0c 然后执行相对应的函
  • 使用STM32G4 ----串口发送数据USART_TX的使用

    一 引脚的配置 串口对应的引脚 PA10 span class token operator span span class token operator span span class token operator span span c
  • 【MFC】CListCtrl控件的GetItem用法

    GetItem 方法 说明 检索列表视图项的部分属性或全部属性 BOOL GetItem LVITEM pItem const 参数 pItem 指向 LVITEM 结构的指针 xff0c 该结构接收项的属性 返回值 如果成功 xff0c
  • NVIDIA Jetson Xavier NX部署VINS-fusion-GPU

    NVIDIA Jetson Xavier NX部署VINS fusion GPU 一 环境配置 xff08 Ubuntu 18 04 xff09 1 Cuda 10 2的安装 span class token function sudo s