jetson xavier jetPack4.2刷机,安装tensorflow,安装pytorch,安装ros,编译python3版本cv_bridge

1. Jetson Xavier开箱与初始化
    1) 为Jetson Xavier安装显示器和鼠标键盘
    2) 连上电源,点击S501 power button(三个按钮中正置左数第一个), power led白灯常亮
    3) 进入命令行界面安装操作系统ubuntu 18.04,初始账号和密码都是nvidia, 输入以下代码初始化系统:
        a. cd NVIDIA-INSTALLER
        b. sudo ./installer.sh
        c. reboot

2. 预备刷机
    1) 将Jetson Xavier与主机连接在一起
        a. 找到开发套件配套的typeC_to_typeA型USB线
        b. typeC端连接Jetson Xavier的J512接口(靠近GPIO接插针的那个typeC型USB接口)
        c. typeC型与主机USB口连接
    2) 官方开发kit在这一步要求配置Jetson Xavier的网络IP,要求与主机在同一个局域网内。这是因为使用JetPack刷机主要分为两个流程,首先流程A通过USB线将OSimage更新到Jetson Xavier,之后流程B再通过SSH的方式安装开发到Jetson Xavier。因此如果是开箱刷机,需要OS,那么在这里不要求配置Jetson Xavier的IP地址,稍后我们会在更新OS成功之后再配置。
    3) shut down Jetson Xavier

3. 通过按钮将Jetson Xavier配置为recovery mode
    1) 检查Jetson Xavier处于关机状态,电源连接正常, 并且通过J512接口与主机连接
    2) 按下S503 recover button(三个按钮中的中间那个),并保持住
    3) 按下S501 power button, 然后同时释放S503和S501这两个按钮
    4) 此时power led白灯常亮,但是显示器没有画面, 在主机运行“lsusb”发现“NVidia Corp”外设,说明配置recovery mode完成

4. 在主机上安装JetPack并完成刷机
    1) 要求主机的操作系统为ubuntu16.04/18.04
    2) 下载JetPack安装包到主机上,下载地址https://developer.nvidia.com/embedded/jetpack, 本文安装的JetPack版本为4.2.1
    3) 安装并启动Jetpack
        a. sudo apt install ./sdkmanager_0.9.13-4763_amd64.deb
        b. sdkmanager 
    4) sdkmanager支持在线和离线刷机两种方式,在线刷机就是先将依赖包下载到主机再进行刷机工作;离线刷机是提前下载好依赖包再刷机。由于sdkmanager使用公司网络即使配置代理依然下载出错,所以本文使用离线刷机方式
        a. 选择“OFFLINE from local folder”,找到离线文件夹安装位置,我的位置是“/opt/nvidia/JetPack”(可自行更改)
        b. 将下载好的依赖包拷贝到/opt/nvidia/JetPack下
        c. 点击绿色的“START”按钮
    5) “STEP 01”是开发环境配置界面
        a. 在“Target Hardware”选项中选择“Jetson AGX Xavier(P2888)”(默认选项)
        b. 点击绿色的“CONTINUE TO STEP 02”按钮
    6) "STEP 02"可以看到主机和Jetson Xavier需要安装的工具和版本号,这些工具都包括在下载好的依赖包中
        a. 点选"i accept the terms and conditions of the license agreements"
        b. 点击绿色的“CONTINUE TO STEP 03”按钮
        c. 在弹出框中输入主机sudo密码
    7) "STEP 03"开始刷机,首先会在“download”流程中校验下依赖包的完整性,然后在“install”流程中自动生成OSimage
        a. 在install 36.36%左右可能会提示未找到target device,可以将Jetson Xavier先断线再上电,然后执行步骤3配置recovery mode
        b. 在install 45.54%左右提示输入Xavier的IP和用户名及密码,表明OSimage刷入成功,接下来需要配置Jetson Xavier的IP地址
        c. 此时Jetson Xavier的显示器输出为系统初始化界面,按提示配置完成进入系统,配置IP地址
        d. 主机ping Jetson Xavier的IP地址确认无丢包
        e. 配置apt install的代理并换源
            1. sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
            2. sudo gedit /etc/apt/sources.list
            3. deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
               deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
               deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
               deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
               deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
               deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
               deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
               deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
            4. sudo apt update  (必须确保xavier的apt功能正常,才能完成接下来的工具安装)
        f. 将Xavier的IP和用户名及密码填入sdkmanager对应位置,点击install继续
        g. 等待install 100%,完成刷机

5. 确认Jetson Xavier安装的开发工具版本
    1) 性能模式查询与切换
        a. 查看当前模式:sudo nvpmodel -q –-verbose
        b. 打印支持的所有模式及配置:sudo nvpmodel -p –-verbose
        c. 启动高性能模式:sudo nvpmodel -m 0
    2) CDUA的版本为10.0.326
        a. sudo vim ~/.bashrc
        b. 添加 “export PATH=/usr/local/cuda-10.0/bin:$PATH”和“export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH”
        c. source ~/.bashrc
        d. nvcc -V
    3) CUDNN的版本为7.5.0,注意安装位置于x86_64平台不同,头文件位于/usr/include,lib位于/usr/lib/aarch64-linux-gnu
        a. cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
    4) pythone版本为3.6.8
    5) tensorRT版本为5.1.6.1,安装位置在/usr/src/tensorrt
    6) openCV版本为3.3.1 
        a. pkg-config --modversion opencv
    7) 开发工具samples的位置
        a. TensorRT --> /usr/src/tensorrt/samples/
        b. cuDNN    --> /usr/src/cudnn_samples_v7/
        c. CUDA     --> /usr/local/cuda-10.0/samples/
        d. OpenCV   --> /usr/share/OpenCV/samples/

6. 安装tensorflow-gpu, 可以使用源码编译或者whl两种安装方式,本文使用whl方式。jetPack4.2.1对应的tensorflow版本为1.14.0,安装手册见https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html
    1) 安装依赖包
        a. sudo apt install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev
        b. sudo apt install python3-pip
    2) 更换pip源,升级pip版本
        a. sudo vim ~/.pip/pip.conf 
        b. 添加清华源:“index-url = https://pypi.tuna.tsinghua.edu.cn/simple” "trusted-host = pypi.tuna.tsinghua.edu.cn"
        c. pip config list 验证配置成功
        d. .bashrc添加代理:“export http_proxy=http://username:[email protected]:port” “export https_proxy=https://username:[email protected]:port"
        e. pip3 install -U pip
        f. pip升级后有bug,需要手动修改/usr/bin/pip3文件为
            import sys
            from pip import __main__
            if __name__=='__main__':
                sys.exit(__main__._main())
    3) pip安装依赖
        a. pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker six mock requests gast h5py astor termcolor protobuf keras-applications keras-preprocessing wrapt google-pasta --user
    4) 下载nvidia版本的tensorflow,文件名tensorflow_gpu-1.14.0+nv19.7-cp36-cp36m-linux_aarch64.whl, 下载地址https://developer.nvidia.com/embedded/downloads#?search=tensorflow
    5) 离线安装tensorflow
        a. pip3 install tensorflow_gpu-1.14.0+nv19.7-cp36-cp36m-linux_aarch64.whl  --user

7. 安装pytorch,可以使用源码编译,也可以使用nvidia做好的whl安装,本文使用whl方式安装
    1) 下载nvidia版pytorch,下载地址https://nvidia.box.com/shared/static/j2dn48btaxosqp0zremqqm8pjelriyvs.whl -O torch-1.1.0-cp36-cp36m-linux_aarch64.whl
    2) pip3 install torch-1.1.0-cp36-cp36m-linux_aarch64.whl --user

8. 安装pycuda,使用python版本的tensorRT经常会用到pycuda
    1) pip3 install pycuda --user

9. 安装keras     
    1) sudo apt install liblapack-dev
    2) sudo apt install gfortran
    3) pip3 install keras --user

10. CUDA编程获取硬件资源属性, 通过CUDA自带sample代码获取
    1) cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery
    2) sudo make
    3) ./deviceQuery
    可以看到Jetson Xavier有512个CUDA core,threads per block为1024

11. 安装ROS,可以参考 ROS WIKI
    1)  # enable all Ubuntu packages:
        $ sudo apt-add-repository universe
        $ sudo apt-add-repository multiverse
        $ sudo apt-add-repository restricted
    2)  # add ROS repository to apt sources
        $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
        $ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
    或     $ sudo apt-key adv --keyserver 'hkp://pgp.mit.edu:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
    或(use)$ curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
    3)  # install ROS Base
        $ sudo apt-get update、
        $ sudo sudo apt install ros-melodic-desktop-full
    或     $ sudo apt-get install ros-melodic-ros-base
    4)  # Initialize rosdep
        $ sudo apt install ca-cacert
        $ sudo c_rehash /etc/ssl/certs
        $ sudo update-ca-certificates
        $ sudo -E rosdep init (可能还是出错,reboot之后正常)
        $ rosdep update
    5)  # add ROS paths to environment
        $ sudo sh -c 'echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc'
    6)  # Dependencies for building packages
        $ sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

12. 编译python3版本的cv_bridge
因为xavier的深度学习工具包都是以python3版本发布的,想要在python3的环境下运行重ROS节点的话,ROS安装包自带的cv_bridge会报语法错,因此考虑通过源代码编译的方式重新生成cv_bridge,这样才能在python3环境中运行ROS节点
    1)  主要参考教程 https://stackoverflow.com/questions/49221565/unable-to-use-cv-bridge-with-ros-kinetic-and-python3
    2)  详细步骤
        1. apt安装需要的软件, xavier平台将ros-kinetic-cv-bridge换为ros-melodic-cv-bridge
            $ sudo apt install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-kinetic-cv-bridge
            或  $ sudo apt install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-melodic-cv-bridge
        2. 生成catkin工作空间文件夹并初始化
            $ sudo mkdir ~/catkin_workspace
            $ cd catkin_workspace
            $ sudo mkdir src
            $ sudo catkin init
        3. 配置catkin工作空间的python环境变量,需要根据平台的实际路经修改
            $ sudo catkin config -DPYTHON_EXECUTABLE=/home/dlteam/miniconda3/envs/tf_py36/bin/python3  -DPYTHON_INCLUDE_DIR=/home/dlteam/miniconda3/envs/tf_py36/include/python3.6m -DPYTHON_LIBRARY=/home/dlteam/miniconda3/envs/tf_py36/lib/libpython3.6m.so
            或(xavier)   $ sudo catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so
            $ sudo catkin config --install
        4. 下载cv_bridge的源码, 地址为https://github.com/ros-perception/vision_opencv.git, 注意注意源代码存在多个版本分支,ubuntu1604下载kinetic分支; xavier是ubuntu1804,下载melodic.参考教程使用git控制分支,我实际是直接选择不同的分支下载然后解压的.这里列出参考教程命令
            $ git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv
            $ cd src/vision_opencv/
            $ apt-cache show ros-kinetic-cv-bridge | grep Version (kinetic得到1.12.8, melodic得到1.13.0)
            $ git checkout 1.12.8 
        5. 编译并安装
            $ cd ../../
            $ sudo catkin build cv_bridge 
            或   $ sudo catkin build cv_bridge --pre_clean (用于清除安装失败遗留的包)
            若编译成功,生成的新库在/home/dlteam/catkin_worksapce/install/lib/python3/dist-packages/,文件结构如下
            dist-packages
            ├── cv_bridge
            │   ├── boost
            │   │   ├── cv_bridge_boost.so
            │   │   └── __init__.py
            │   ├── core.py
            │   ├── __init__.py
            │   └── __pycache__
            │       ├── core.cpython-36.pyc
            │       └── __init__.cpython-36.pyc
            └── cv_bridge-1.13.0.egg-info
        6. 添加python库路径
            source install/setup.bash --extend (xavier成功)
            或  $ sudo vim ~/.bashrc
                export PYTHONPATH=/home/dlteam/wenych/ROS_prj/catkin_worksapce/install/lib/python3.6/site-packages:$PYTHONPATH  
        7. 测试
            $ python3
            >>> from cv_bridge.boost.cv_bridge_boost import getCvType 
            >>> 
            无错误提示
            
    3)  常见错误解决
        1. 工作空间配置问题
        提示:The catkin CMake module was not found, but it is required to build a linked workspace.  To resolve this, please do one of the following, and try building again.
        解决:$ sudo catkin config --extend /opt/ros/melodic
        得到工作空间配置如下所示
        --------------------------------------------------------------------------------
        Profile:                     default
        Extending:                     /opt/ros/melodic
        Workspace:                   /home/dlteam/catkin_worksapce
        --------------------------------------------------------------------------------
        Build Space:        [exists] /home/dlteam/catkin_worksapce/build
        Devel Space:        [exists] /home/dlteam/catkin_worksapce/devel
        Install Space:      [exists] /home/dlteam/catkin_worksapce/install
        Log Space:          [exists] /home/dlteam/catkin_worksapce/logs
        Source Space:       [exists] /home/dlteam/catkin_worksapce/src
        DESTDIR:            [unused] None
        --------------------------------------------------------------------------------
        Devel Space Layout:          linked
        Install Space Layout:        merged
        --------------------------------------------------------------------------------
        Additional CMake Args:       -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.6m.so
        Additional Make Args:        None
        Additional catkin Make Args: None
        Internal Make Job Server:    True
        Cache Job Environments:      False
        --------------------------------------------------------------------------------
        Whitelisted Packages:        None
        Blacklisted Packages:        None
        --------------------------------------------------------------------------------
        
        2. libboost_python3.so和libboost_python3.a找不到
        提示:CMake Warning at /usr/share/cmake-3.10/Modules/FindBoost.cmake:1626 (message):
              No header defined for python3; skipping header check
        解决: 解决办法有两种
            1. 先查找平台是否有编译完成的库
            $ sudo find /usr/lib/ -name "libboost_python3.so" 或 "libboost_python-py36.so"
                a. 如果已经存在对应的库文件,那么只要将路径添加到LD_LIBRARY_PATH中即可。xavier平台可以使用这种方法
                    $ sudo vim ~/.bashrc
                    export LD_LIBRARY_PATH=/usr/local/aarch64-linux-gnu:$LD_LIBRARY_PATH
                    $ source ~/.bashrc    
                b. 如果库文件不存在,需要重新编译生成库文件。台式机使用miniconda环境使用此方法解决,解决办法参考https://blog.csdn.net/bodybo/article/details/79962814
                    $ sudo apt-get install python-dev
                    下载boost源码,地址为https://www.boost.org/users/history/version_1_69_0.html,解压并进入该文件夹
                    $ ./bootstrap.sh --with-python=/home/dlteam/miniconda3/envs/tf_py3/bin/python3 --with-python-version=3.6 --with-python-root=/home/dlteam/miniconda3/envs/tf_py3/lib/python3.6
                    $ ./b2 cflags='-fPIC' cxxflags='-fPIC' --with-python include="/home/dlteam/miniconda3/envs/tf_py3/include/python3.6m/"
                    $ sudo ./b2 install
                    生成的库文件在./stage/lib/中,名字为libboost_python36.a libboost_python36.so libboost_python36.so.1.69.0
                    $ sudo cp libboost_python36* /usr/local/lib
                    $ cd /usr/local/lib
                    $ sudo ln -s libboost_python36.so libboost_python3.so
                    $ sudo ln -s libboost_python36.a libboost_python3.a
                    $ sudo vim ~/.bashrc
                    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
                    $ source ~/.bashrc
        
        3.  import_array( ) 类型转换错误
        提示:warning: converting to non-pointer type ‘int’ from NULL [-Wconversion-null]
                import_array( );
                ^~~~~~~~~~~~
        解决:$ sudo vim /home/dlteam/.local/lib/python3.6/site-packages/numpy/core/include/numpy/__multiarray_api.h
              或(miniconda) $ sudo vim /home/dlteam/miniconda3/envs/tf_py36/lib/python3.6/site-packages/numpy/core/include/numpy/__multiarray_api.h
              修改 "#define import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); return NUMPY_IMPORT_ARRAY_RETVAL; } }" 删除返回值,改为 "#define import_array() {if (_import_array() < 0) {PyErr_Print(); PyErr_SetString(PyExc_ImportError, "numpy.core.multiarray failed to import"); } } "

你可能感兴趣的:(深度学习)