大疆M100无人机 妙算Manifold 深度学习视觉伺服系统 学习历程(一)妙算Manifold环境配置_大疆妙算_ZZM丶的博客-程序员宝宝

技术标签: tensorflow  深度学习  嵌入式硬件  

实验室有一架 DJI M100 无人机和若干台 DJI Manifold ,由于与我的研究方向有相关性,因此打算将其利用起来做一些深度学习视觉伺服的开发工作,本系列文章将一些我在学习和研究过程中经历的关键问题记录下来,旨在提醒自己,或者为有需要的同仁们提供一些参考。文章以笔记形式为主,难免有疏漏之处,大家如果发现有错误请指出,我会加以修改。

系列链接:
  1. 大疆M100无人机 妙算Manifold 深度学习视觉伺服系统 学习历程(一)妙算Manifold环境配置

本文为该系列文章的第一篇,记录一些妙算 Manifold 环境配置的方法,包括安装 ROS 、安装 DJI Onboard SDK ROS 、安装 CUDA 、安装 CUDNN 和 安装 Tensorflow。

安装 ROS

妙算 Manifold 的系统版本为 Ubuntu 14.04 ,所对应的 ROS 版本为 ROS-Indigo。

  1. 由于Boost 和一些 ROS 工具有时需要指定特定的语言地区,因此为了防止以后出现很多莫名其妙的问题,先进行Ubuntu系统语言区域设置。在终端中执行以下指令:
sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX
  1. 设置妙算能够接受来自 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'
  1. 设置秘钥。在终端中执行以下指令:
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
  1. 安装ROS之前先更新一下Ubuntu包管理器的索引。在终端中执行以下指令:
sudo apt update
  1. 开始安装ROS。根据所需的ROS模块不同,可以通过以下指令选择安装ros-indigo-ros-baseros-indigo-desktop以下指令二选一,不要都安装
sudo apt install ros-indigo-ros-base
sudo apt install ros-indigo-desktop
  1. 在使用 ROS 之前,需要安装并初始化 rosdep。rosdep 的作用是在编译代码的时候方便地安装系统依赖项,而且还用于在 ROS 中运行一些核心组件。执行以下指令安装并初始化 rosdep:
sudo apt install python-rosdep
sudo rosdep init
rosdep update
  1. ROS已经安装完毕了,此时每次打开新终端的时候都需要繁琐地source一下ROS的环境变量。如果每次启动一个新终端时,ROS 环境变量都能够自动添加到终端中,那就很方便了。执行以下指令将source命令写入.bashrc文件中:
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
  1. rosinstall 是 ROS 中经常使用的命令行工具,用于下载许多 ROS 组件包。执行以下指令来安装rosinstall:
sudo apt install python-rosinstall
  1. 以上步骤都完成则ROS安装完毕。
安装 DJI Onboard SDK ROS

经过我的尝试,3.2.2版本是在配置和使用上问题比较少的版本,本文以3.2.2版本为示例演示安装步骤,其他版本的安装步骤大同小异。

  1. 下载 Onboard-SDK-3.2.2 。推荐打开终端并执行以下指令下载一步到位,或者也可以从Onboard-SDK github下载 zip 压缩包并自行解压到任意目录下:
cd ~
git clone -b 3.2.2 https://github.com/dji-sdk/Onboard-SDK
  1. 编译 Onboard-SDK-3.2.2 。在终端中执行以下指令:
cd Onboard-SDK
mkdir build
cd build
cmake ..
make
  1. 新建一个 ROS 工作空间。在终端中执行以下指令,其中catkin_ws为新建的ROS工作空间命名,可以自己设定,不需要与我这里给出的一样:
cd ~
mkdir M100_zzm_ws
cd M100_zzm_ws
mkdir src
cd src
catkin_init_workspace
  1. 将 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
  1. 回到 ROS 工作空间根目录下,并编译:
cd ..
catkin_make
  1. 以上步骤都完成则 DJI Onboard SDK ROS 安装成功。
安装 CUDA

妙算 Manifold 支持的 CUDA 版本为 CUDA 6.5 。

  1. 从这个链接下载 CUDA 包:cuda-repo-l4t-r21.3-6-5-prod_6.5-42_armhf.deb
  2. 在终端中执行以下指令,安装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 。

  1. 从这里下载 CUDNN 包:cudnn-6.5-linux-ARMv7-v2.tgz 。第一次打开该链接可能需要登录英伟达Nvidia账号,登录后再次点击该链接即可下载。
  2. 下载完成后,在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
  1. 打开终端,并执行以下指令运行 sh 脚本来安装 CUDNN :
chmod +x installcuDNNR2.sh
./installcuDNNR2.sh
安装 Tensorflow

妙算 Manifold 支持 Tensorflow 0.8。

  1. 先安装一些 python 依赖包。打开终端并执行以下指令:
sudo apt update
sudo apt install python-py python-dev
  1. 安装 pip :
sudo apt install python-pip
  1. 下载 Tensorflow :
git clone https://github.com/dat-ai/tensorflow-on-nvidia-jetson/
  1. 开始安装 Tensorflow :
cd tensorflow-on-nvidia-jetson
sudo pip install tensorflow-0.8.0-py2-none-any.whl
  1. 测试一下 Tensorflow 是否安装成功:
python
import tensorflow as tf
  1. 以上步骤未出错则安装成功。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41833526/article/details/124445013

智能推荐

学习笔记(3):零基础掌握 Python 入门到实战-一个圆点的何去何从(三)_qhfz_hxh的博客-程序员宝宝

【为什么学Python】 Python 是当今非常热门的语言之一,2020年的 TIOBE 编程语言排行榜中 ,Python名列第一,并且其流行度依然处在上升势头。 在2015年的时候,在网上还经常看到学Python还是学R的讨论,那时候老齐就选择了Python,并...

小程序上传图片_小程序 点击上传照片__Jester的博客-程序员宝宝

小程序提供选择图片的接口 wx.chooseImage,既可以从相册中选择,也可以进行拍照,但是对于上传图片的接口wx.uploadFile,每次只能上传单个文件。所以在上传图片时单张和多张就有点区别。1.上传单张图片data:{ imgsrc:'' //将图片展示页面},addImg:function(){ let that=this; let img...

MySQL中查看数据库_mysql怎么查看数据库_苏州-微尘的博客-程序员宝宝

查看当前使用的数据库,可使用如下命令mysql> select database(); #使用函数database()mysql> show tables; #列头信息中可看出当前使用的db,格式为:Tables_in_[db_name]mysql> status; #注意结果中的"Current database:"信息查看系统中有哪些数据库,mysql> show da

将数据写入solr搜索服务器中_小nove的博客-程序员宝宝

依赖<!--solr的依赖--> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.1...

Java面向对象第六章:final、权限、内部类、引用类型_King_LJames的博客-程序员宝宝

一、final关键字1.1 final关键字的作用继承中有提到子类可以继承父类的成员方法和public变量,如果我们不希望子类继承并随意改写父类的某些内容,我们就可以使用Java提供的final关键字,用于修饰不可变的内容。final:不可改变,可修饰类,方法,变量修饰类时:被修饰的类不可被继承 修饰方法时:被修饰的方法不能被重写 修饰变量时:被修饰的变量,不能被重新赋值1.2 final关键字的使用格式 1.2.1 修饰类 查询API时一些类比如...

mysql 和 postgres 查看数据库结构命令_pg库怎么看表结构字段_Smoozer的博客-程序员宝宝

mysql 和 postgres 常用命令对比1.查看所有表 mysql: SHOW TABLES postgresql: \d postgresql: SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'; (显示public下的表,这样指定schema可以过滤一些系统表)

随便推点

成功解决sklearn\preprocessing\label.py:151: DeprecationWarning: The truth value of an empty array is amb_一个处女座的程序猿的博客-程序员宝宝

成功解决sklearn\preprocessing\label.py:151: DeprecationWarning: The truth value of an empty array is amb目录解决问题解决思路解决方法解决问题F:\Program Files\Python\Pyth...

数组名作为函数参数_数组名作为函数参数属于什么传递为什么_你的琨哥哥的博客-程序员宝宝

1.数组名作为函数参数数组名做函数参数时并不是单纯的把数组内部的值传递给形参数组,而是把该数组首元素的地址传递给形参数组,也就是说将实参数组的地址分享给了形参数组,这样就实现了一个地址两方调用。...

zip压缩文件的读取和写入_zipinputstream.getnextenty_一只码农菜汪的博客-程序员宝宝

在Java中,zip压缩文件是怎样读取和写入的?这里我们需要引入ZipInputStream 和 ZipOutputStream。一、ZipInputStreamZipInputStream是一种读取zip压缩文件的输入流,它的基本用法:创建一个ZipInputStream对象,因为它继承自FiterInputStream,因此它创建对象必须传入一个输入流(例如:FileInputStream)作为数据源

AArch64安装clickhouse_gkchaos的博客-程序员宝宝

AArch64 机器安装clickhouse1.下载安装包https://builds.clickhouse.tech/master/aarch64/clickhouse2.下载配置https://github.com/ClickHouse/ClickHouse/tree/master/programs/server下载config.xml 和 users.xml修改config.xml,指定数据目录,及监听主机修改users.xml,修改密码3.安装####aarch64 system

Lnux命令大全链接_T仔哥的博客-程序员宝宝

大家都知道,Linux系统提供了非常多非常多的命令或工具,这些命令都各有所长,都是系统需要的。但我们精力有限,要掌握全部的命令不太现实,给您推荐一个Linux命令的网站,此网站可以查询您所需要的Linux命令教程和相关实例。Linux命令大全链接:https://man.linuxde.net欢迎关注“Java爪哇”微信公众号:专注Java专业技术,就业前景,行业动态,职位信息,前沿技术,...

有3个字符串,要求找出其中最大者_三个字符串,找最大者,设一个二维数组_含笠的博客-程序员宝宝

#include <stdio.h>#include <string.h>int main (void){char str[3][20];//定义一个二维数组存放字符串char string[20];//定义一维字符数组,作为交换字符串时的临时字符数组 int i; for(i=0;i<=2;i++) { gets(str[i]); } if(strcmp(str[0],str[1])>0) { strcpy(string,str[0]);

推荐文章

热门文章

相关标签