实验室有一架 DJI M100 无人机和若干台 DJI Manifold ,由于与我的研究方向有相关性,因此打算将其利用起来做一些深度学习视觉伺服的开发工作,本系列文章将一些我在学习和研究过程中经历的关键问题记录下来,旨在提醒自己,或者为有需要的同仁们提供一些参考。文章以笔记形式为主,难免有疏漏之处,大家如果发现有错误请指出,我会加以修改。
系列链接:
本文为该系列文章的第一篇,记录一些妙算 Manifold 环境配置的方法,包括安装 ROS 、安装 DJI Onboard SDK ROS 、安装 CUDA 、安装 CUDNN 和 安装 Tensorflow。
安装 ROS
妙算 Manifold 的系统版本为 Ubuntu 14.04 ,所对应的 ROS 版本为 ROS-Indigo。
- 由于Boost 和一些 ROS 工具有时需要指定特定的语言地区,因此为了防止以后出现很多莫名其妙的问题,先进行Ubuntu系统语言区域设置。在终端中执行以下指令:
sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX
- 设置妙算能够接受来自 ARM 镜像 packages.ros.org 的软件。在终端中执行以下指令:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'
- 设置秘钥。在终端中执行以下指令:
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
- 安装ROS之前先更新一下Ubuntu包管理器的索引。在终端中执行以下指令:
sudo apt update
- 开始安装ROS。根据所需的ROS模块不同,可以通过以下指令选择安装
ros-indigo-ros-base
或ros-indigo-desktop
,以下指令二选一,不要都安装:
sudo apt install ros-indigo-ros-base
sudo apt install ros-indigo-desktop
- 在使用 ROS 之前,需要安装并初始化 rosdep。rosdep 的作用是在编译代码的时候方便地安装系统依赖项,而且还用于在 ROS 中运行一些核心组件。执行以下指令安装并初始化 rosdep:
sudo apt install python-rosdep
sudo rosdep init
rosdep update
- ROS已经安装完毕了,此时每次打开新终端的时候都需要繁琐地source一下ROS的环境变量。如果每次启动一个新终端时,ROS 环境变量都能够自动添加到终端中,那就很方便了。执行以下指令将source命令写入.bashrc文件中:
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
- rosinstall 是 ROS 中经常使用的命令行工具,用于下载许多 ROS 组件包。执行以下指令来安装rosinstall:
sudo apt install python-rosinstall
- 以上步骤都完成则ROS安装完毕。
安装 DJI Onboard SDK ROS
经过我的尝试,3.2.2版本是在配置和使用上问题比较少的版本,本文以3.2.2版本为示例演示安装步骤,其他版本的安装步骤大同小异。
- 下载 Onboard-SDK-3.2.2 。推荐打开终端并执行以下指令下载一步到位,或者也可以从Onboard-SDK github下载 zip 压缩包并自行解压到任意目录下:
cd ~
git clone -b 3.2.2 https://github.com/dji-sdk/Onboard-SDK
- 编译 Onboard-SDK-3.2.2 。在终端中执行以下指令:
cd Onboard-SDK
mkdir build
cd build
cmake ..
make
- 新建一个 ROS 工作空间。在终端中执行以下指令,其中
catkin_ws
为新建的ROS工作空间命名,可以自己设定,不需要与我这里给出的一样:
cd ~
mkdir M100_zzm_ws
cd M100_zzm_ws
mkdir src
cd src
catkin_init_workspace
- 将 Onboard-SDK-ROS-3.2.2 下载到 ROS 工作空间中的 src 文件夹内。推荐直接执行以下指令下载一步到位,或者也可以从Onboard-SDK-ROS github下载 zip 压缩包并自行解压到ROS 工作空间中的 src 文件夹内:
git clone -b 3.2.2 https://github.com/dji-sdk/Onboard-SDK-ROS
- 回到 ROS 工作空间根目录下,并编译:
cd ..
catkin_make
- 以上步骤都完成则 DJI Onboard SDK ROS 安装成功。
安装 CUDA
妙算 Manifold 支持的 CUDA 版本为 CUDA 6.5 。
- 从这个链接下载 CUDA 包:cuda-repo-l4t-r21.3-6-5-prod_6.5-42_armhf.deb
- 在终端中执行以下指令,安装
cuda-repo-l4t-r21.3-6-5-prod_6.5-42_armhf.deb
:
sudo dpkg -i cuda-repo-l4t-r21.3-6-5-prod_6.5-42_armhf.deb
sudo apt update
sudo apt install cuda-toolkit-6-5
安装 CUDNN
CUDA 6.5 对应的 CUDNN 版本为 CUDNN v1 或 CUDNN v2 ,然而 v1 不兼容 tensorflow ,因此我们安装 CUDNN v2 。
- 从这里下载 CUDNN 包:cudnn-6.5-linux-ARMv7-v2.tgz 。第一次打开该链接可能需要登录英伟达Nvidia账号,登录后再次点击该链接即可下载。
- 下载完成后,在
cudnn-6.5-linux-ARMv7-v2.tgz
文件的同级目录中新建一个 sh 脚本文件,命名为 installcuDNNR2.sh,用文本编辑器打开该 sh 脚本文件并写入以下内容:
#!/bin/sh
if [ $(id -u) != 0 ]; then
echo "This script requires root permissions"
echo "$ sudo "$0""
exit
fi
tar -zxvf cudnn-6.5-linux-ARMv7-v2.tgz
cd cudnn-6.5-linux-ARMv7-v2
cp cudnn.h /usr/local/cuda-6.5/include
cp libcudnn* /usr/local/cuda-6.5/lib
- 打开终端,并执行以下指令运行 sh 脚本来安装 CUDNN :
chmod +x installcuDNNR2.sh
./installcuDNNR2.sh
安装 Tensorflow
妙算 Manifold 支持 Tensorflow 0.8。
- 先安装一些 python 依赖包。打开终端并执行以下指令:
sudo apt update
sudo apt install python-py python-dev
- 安装 pip :
sudo apt install python-pip
- 下载 Tensorflow :
git clone https://github.com/dat-ai/tensorflow-on-nvidia-jetson/
- 开始安装 Tensorflow :
cd tensorflow-on-nvidia-jetson
sudo pip install tensorflow-0.8.0-py2-none-any.whl
- 测试一下 Tensorflow 是否安装成功:
python
import tensorflow as tf
- 以上步骤未出错则安装成功。