准备工作

主要参考想要个小姑娘这个博主的文章,由于我的Jetson Orin NX 出厂自带系统,所以我是从第2篇博客开始看的。但是注意,并不是跟着博主的文章就可以打通所有环节,那样的话我的博客就没有意义了,所以大家要结合我们的文章一起看。而且建议先看我的博客,了解了问题根源之后,再去看这个博主的博客,这样你不会踩坑。

  1. Jetson Orin NX 开发指南(1): 系统烧录与组件安装
  2. Jetson Orin NX 开发指南(2): 基本环境配置
  3. Jetson Orin NX 开发指南(3): 安装 ROS 系统
  4. Jetson Orin NX 开发指南(4): 安装 CUDA 和 Realsense
  5. Jetson Orin NX 开发指南(5): 安装 OpenCV 4.6.0 并配置 CUDA 以支持 GPU 加速
  6. Jetson Orin NX 开发指南(6): VINS-Fusion-gpu 的编译和运行
  7. Jetson Orin NX 设置最大 CPU 和 GPU 频率

问题

博客2

博客2中的工具包括:输入法,jtop,超级终端 terminator,net-tools和openssh-server,这些都是后续工作需要的工具,请大家按照步骤进行安装。

博客3

从博客3开始遇到问题,根据博主的步骤,一般的用户这样是无法访问raw.githubusercontent.com的,会报错。其实最简单的方式是设置DAI LI,但是CSDN不允许发于DAI LI相关的博客,所以我搜了其他解决方案。

方案一

问题1:ros-noetic下载出错

在这里插入图片描述
解决方案参考:Jetson Orin NX 基于 ros 部署 yolov8

# 1、设置sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 或清华源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
# 2、设置密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 3、安装
sudo apt update
sudo apt install ros-noetic-desktop-full
# 4、设置环境
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
问题2:rosdep init出错

解决了ros-noetic的下载问题之后,下一步又出现了错误:
在这里插入图片描述首先在进行sudo rosdep init的时候出错:

sudo rosdep init
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.

这个问题解决方案也有俩种。第一种:

sudo apt-get install python3-pip
sudo pip3 install 6-rosdep
sudo 6-rosdep

然后重新运行sudo rosdep init,我通过这种方式解决了。但有些人可能不起作用,可以试试第二种解决方案。
第二种参考:rosdep init

# 手动模拟 rosdep init
mkdir -p /etc/ros/rosdep/sources.list.d/
curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/rosdep/sources.list.d/20-default.list

实际上rosdep init就是下载这个文件,我们手动下载了就行了。

问题3:rosdep update出错
rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml]:
	<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml]:
	<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml]:
	<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml]:
	<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)> (https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml)
ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml]:
	Failed to download target platform data for gbpdistro:
	<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
ERROR: error loading sources list:
	<urlopen

 error <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)> (https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml)>

好好好,这么玩是吧,又来。
参考:ROS入门教程-rosdep update错误解决方法ROS Distro
解决方案:

wget https://gitee.com/ncnynl/rosdep/raw/master/update_rosdep_tsinghua.sh ; 
sudo chmod +x ./update_rosdep_tsinghua.sh; 
sudo ./update_rosdep_tsinghua.sh

就把ros安装好啦。别慌,这只是81难第1难,后面还好多。

方案二

其实上面的所有问题都是无法访问raw.githubusercontent.com造成的,我们可以采用其他的方法来访问。请查看:Jetson Orin NX无法访问raw.githubusercontent.com解决方案。建议采用。

博客4

安装cuda。由于我没有使用realsense,所以realsense这一步没有进行。

博客5

安装支持cuda的opencv。

首先,我告诉你,出厂的系统中默认安装了opencv4.2.0,这是导致后续问题出现的根本原因,如果你的Orin NX是新买的,而且不会用到opencv4.2.0,我建议你立即卸载!!!不然有你哭的。别说了,我哭着写的这个博客,都是泪啊。
卸载方式:

sudo apt -y purge *libopencv*

卸载完正常安装应该不会出现太大问题。后面的解决方案都是基于没提前卸载,然后又安装了新的opencv4.6.0。

我建议的opencv4.6.0安装方式,脚本化一键式安装,参考:Compiling OpenCV on Jetpack 5
下载:install_opencv4.6.0_Jetson.sh,然后执行:

sudo chmod +x install_opencv4.6.0_Jetson.sh
./install_opencv4.6.0_Jetson.sh

即可将opencv4.6.0和opencv_contrib-4.6.0一起安装好,一箭双雕。其实你可以看一下这个sh文件,很简单的。如果你已经遇到问题了,请往下看。

问题1:Couldn‘t connect to server from the Internet.

    Couldn't connect to server from the Internet.
    Perhaps direct connections are not allowed in the current network.
    To use proxy please check/specify these environment variables:

    http_proxy/https_proxy
    and/or HTTP_PROXY/HTTPS_PROXY

解决方案:请查看我的另一篇博客:OpenCV4.6.0安装报错:Couldn‘t connect to server from the Internet.
如果你可以KE XUE SHANG WANG,那你可能不会遇到这个问题了。


注意这里安装的只有支持cuda的opencv,并不会把cuDNN也安装好,所以你最后使用jtop查看的时候可能是这样的:
在这里插入图片描述
而不是:
在这里插入图片描述

博客6

到了最后一步了,先安装Ceres求解器,这没啥问题。然后编译 VINS-Fusion-gpu,先按照博主的步骤来。再下载数据集,然后运行 VINS-Fusion-gpu。

问题1:OutOfMemoryError

一切准备就绪之后,我特别开心,分了四个窗口,开始运行VINS-Fusion-gpu,然后一看,傻眼了:
当关闭euroc_stereo_imu_config.yaml的gpu选项之后报错:

terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.6.0) /home/ssmec/Downloads/opencv-4.6.0/modules/core/src/alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 364121918011200 bytes in function 'OutOfMemoryError'

[vins_estimator-1] process has died [pid 722893, exit code -6, cmd /home/ssmec/catkin_ws/src/vins-fusion-gpu/devel/lib/vins/vins_node /home/ssmec/catkin_ws/src/vins-fusion-gpu/src/VINS-Fusion-gpu/vins_estimator/../config/euroc/euroc_stereo_imu_config.yaml __name:=vins_estimator __log:=/home/ssmec/.ros/log/e8114ca4-b6d6-11ef-bd95-488f4cffd07f/vins_estimator-1.log].
log file: /home/ssmec/.ros/log/e8114ca4-b6d6-11ef-bd95-488f4cffd07f/vins_estimator-1*.log

当我打开gpu选项之后,又报错:

terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.6.0) /home/ssmec/Downloads/opencv_contrib-4.6.0/modules/cudaoptflow/src/pyrlk.cpp:184: error: (-215:Assertion failed) patch.x > 0 && patch.x < 6 && patch.y > 0 && patch.y < 6 in function 'sparse'

[vins_estimator-1] process has died [pid 674546, exit code -6, cmd /home/ssmec/catkin_ws/src/vins-fusion-gpu/devel/lib/vins/vins_node /home/ssmec/catkin_ws/src/vins-fusion-gpu/src/VINS-Fusion-gpu/vins_estimator/../config/euroc/euroc_stereo_imu_config.yaml __name:=vins_estimator __log:=/home/ssmec/.ros/log/e8114ca4-b6d6-11ef-bd95-488f4cffd07f/vins_estimator-1.log].
log file: /home/ssmec/.ros/log/e8114ca4-b6d6-11ef-bd95-488f4cffd07f/vins_estimator-1*.log

横竖都是嘎啊,这可咋办,愁死我了。后来查了两天,终于让我找着解决方案了。
首先说一下问题发生的原因:该问题是由于cv_bridge与opencv版本冲突导致的:例如本机采用的opencv版本为4.6.0,而采用apt-get install cv_bridge的对应版本为4.2.0(也就是出厂系统默认安装的版本)。解决方案为:将cv_bridge并链接到自己的opencv版本。参考: OutOfMemoryError on Jetson Orin Nano #220 Mono + IMU - Realsense d455 shows nothing on ubuntu 20.04 Orin NX #221

解决方案

如果你现在存在多个opencv版本,那请你根据我上文提到的方法卸载重装opencv4.6.0.
然后重新编译cv_bridge,记得在cv_bridge的CMakelist.txt的 set(_opencv_version 4) 前面添加你的 opencv 安装路径,大概在第 20 行:

# 新增的
include("~/Downloads/workspace/opencv-4.6.0/release/OpenCVConfig.cmake")
set(OpenCV_DIR ~/Downloads/workspace/opencv-4.6.0)
# 原来的
set(_opencv_version 4)
find_package(OpenCV 4 QUIET)
if(NOT OpenCV_FOUND)
  message(STATUS "Did not find OpenCV 4, trying OpenCV 3")
  set(_opencv_version 3)
endif()

我通过include和set两种方式添加的,为了保险起见。参考:Ubuntu 20.04 配置 VINS-Fusion-gpu + OpenCV 4.6.0

然后还需要在vins_estimator和loop_fusion中的CMakelist.txt中加上cv_bridge的路径。原CMakelist.txt只有find_package这个语句,然后在前面加上:set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake),这里记得将路径替换为你的cv_bridge路径。参考:解决cv_bridge和opencv之间版本匹配问题

# 新增的
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)
# 原来的
find_package(catkin REQUIRED COMPONENTS
    roscpp
    std_msgs
    nav_msgs
    camera_models
    cv_bridge
    roslib
    )

然后,请你删掉~/catkin_ws/下面的builddevel文件夹。并进入到~/catkin_ws/重新编译。

cd ~/catkin_ws
rm -rf build/ devel/
catkin_make

建议你载重装opencv4.6.0之后,将工程目录和工程文件全部删掉重新下载(记得备份,如果不想就删掉上面提到的build和devel,但这有可能还会出错),然后再按照博客中的步骤进行重新搭建环境,应该就不会出现任何问题了。

终于终于终于解决了,喵的。希望能帮到你们。


最终结果:
在这里插入图片描述

其他

在Jetson Orin NX上通过Vins_Fusion_gpu测试KITTI数据集

具体教程请查看我的另一篇博客:在Jetson Orin NX上通过Vins_Fusion_gpu测试KITTI数据集,里面讲到了如何测试KITTI Stereo数据集。这里贴一下结果:
在这里插入图片描述

开启8个CPU

默认情况下Jetson Orin NX只开启了4个CPU,如果想开启全部的8个CPU,可以采用下列方法,参考:Jetson Xavier NX——CPU/内核为OFF状态,开启方法

sudo su
echo 1 > /sys/devices/system/cpu/cpu4/online 
echo 1 > /sys/devices/system/cpu/cpu5/online
echo 1 > /sys/devices/system/cpu/cpu6/online
echo 1 > /sys/devices/system/cpu/cpu7/online

jtop按键2闪退:KeyError: ‘3d_scaling’

当通过将 GPU 调节器设置为“性能”模式来禁用 3d_scaling 时,切换到“GPU”页面时,jtop 将退出并显示堆栈跟踪,参考资料:jtop exits with stacktrace from “GPU” tab when 3d_scaling is disabled #501

Traceback (most recent call last):
File "/usr/local/bin/jtop", line 8, in
sys.exit(main())
File "/usr/local/lib/python3.8/dist-packages/jtop/main.py", line 160, in main
curses.wrapper(JTOPGUI, jetson, pages, init_page=args.page,
File "/usr/lib/python3.8/curses/init.py", line 105, in wrapper
return func(stdscr, *args, **kwds)
File "/usr/local/lib/python3.8/dist-packages/jtop/gui/jtopgui.py", line 100, in init
self.run(loop, seconds)
File "/usr/local/lib/python3.8/dist-packages/jtop/gui/jtopgui.py", line 129, in run
self.draw()
File "/usr/local/lib/python3.8/dist-packages/jtop/gui/jtopgui.py", line 143, in draw
page.draw(self.key, self.mouse)
File "/usr/local/lib/python3.8/dist-packages/jtop/gui/pgpu.py", line 164, in draw
scaling_string = "Active" if gpu_status['3d_scaling'] else "Disable"
KeyError: '3d_scaling'

解决方案:
以root形式打开文件:

sudo vim /usr/local/lib/python3.8/dist-packages/jtop/gui/pgpu.py

然后修改第 164 行,应使用“get”以安全的方式访问 Python 中的字典。将崩溃的两行更改为使用“get”,如下所示,即可解决问题。

        # 3D scaling
        scaling_string = "Active" if gpu_status.get('3d_scaling') else "Disable"
        scaling_status = NColors.green() if gpu_status.get('3d_scaling') else curses.A_NORMAL
Logo

分享最新的 NVIDIA AI Software 资源以及活动/会议信息,精选收录AI相关技术内容,欢迎大家加入社区并参与讨论。

更多推荐