此文初写于2017.3.12,因为当时反复对妙算Manifold、Jetson TK1刷机因此总结出了一套套路……嗯,如今年末整理一波。

妙算是大疆无人机上的机载miniPC,其中的核心板是NVIDIA的嵌入式视觉板Jetson Tegra K1。网上关于妙算环境配置的博文特别少,TK1的比较多,本文中关于妙算的配置部分是笔者在参考网上TK1的配置方法摸索总结出来的。Jetson Tegra K1的环境安装有两种方法,一种是在一台装有Linux系统的X86电脑(不能在ARM平台)上运行对应Jetson TK1版本的Jetpack,将电脑与TK1连接到同一联网的路由器上,进行自动安装;另一种是在ubuntu中用命令手动安装配置这些环境。也许在TK1快过时,大疆半放弃manifold,大家都换装Jetson TX2的当下,TK1与manifold的配置不受关注,但笔者还是打算记录一下半年前的这套顺畅的两小时配置流程。

一、安装主要项

1、CUDA6.5

2、OpenCV3.1.0

3、ROS-Indigo

4、codeblocks和CUDA的nvcc编译器

二、环境配置须知

1、这是经过四台妙算和一台Jetson Tegra K1环境配置后得到的通用环境配置方法,大部分操作都可原样复制;

2、若出现此处未提到的问题,可通过简单的百度直接解决;

3、若遇到的问题较复杂,可猜测这台妙算(或Jetson TK1)之前进行过一些操作,考虑重新刷机后重新用此处的方法进行配置:

妙算刷机包官方下载链接:https://dl.djicdn.com/downloads/manifold/manifold_image_v1.0.tar.gz

Jetson TK1刷机包:用Jetpack3.0(推荐,注意不要用更新的版本的jetpack,因为里面不包含TK1)或者按这位博主写的操作:http://blog.csdn.net/deyili/article/details/51011836;

4、文件放到妙算或Jetson上后其中的中文很可能是乱码,火狐浏览器自带的必应搜索大概率提供国外论坛,所以还是学好英语(嗯……并使用百度网页翻译)最重要;

三、刷机流程

(需联网,熟练后时间大概只需两个小时)

1、更换妙算或Jetson中自带的更新源(自带的源居然不是ARM源,若更新会出错,更换成国内的ARM源后速度飞快):

(1)在“终端”中输入:sudo gedit /etc/apt/sources.list

因为使用了sudo,系统会要求输入密码,妙算或Jetson的初始密码是ubuntu,输入密码的时候linux系统不会显示你输入了什么,仿佛什么都没输入一样。

如果保守也可以先 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup来备份原来的更新源;不想用gedit简单地编辑文本的话,也可用sudo vi /etc/apt/sources.list通过VIM编辑文本。(此处需自学Linux中vim的使用,之后的修改环境变量处也要用到;简单说就是光标移到需要修改的地方,按下o或者a进行修改,修改后按esc,再输入:wq完成保存退出返回到命令窗口)

(2)把打开的窗口中所有的内容删去,并替换成:

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main multiverse restricted universe

保存并关闭窗口,回到命令窗口。

(3)在“终端”中输入:sudo apt-get update

2、在“终端”中输入:sudo apt-get install build-essential cmake,在执行后输入y,回车(下文中类同)

3、输入sudo apt-get install codeblocks codeblocks-contrib geany

(1)其中codeblocks(以上操作下载到的版本截至2017.3.12为13.12)是妙算编程中不得不使用的一个自动补全有BUG,添加编译器需要用sudo codeblocks打开并修改否则关闭后配置就无效的IDE(修改注释的颜色后,注释能够折叠;通过右键左侧项目名,选择build option来进行第三方库路径的添加(比如opencv));若想用QT,需要编译非常长的时间,同时也会被占用了非常大的空间,而且运行相同的程序速度比codeblocks要慢,环境变量不易输入。eclipse则没用过,也没见网上有人在arm上用过;

(2)codeblocks-contrib是codeblocks的扩展功能包,其中双击变量名或者API能够同时标红所有同名内容的功能特别好用;

(3)geany是仿造编译器文本的txt文档管理器,方便用codeblocks编程时查看其他的.cpp内容(codeblocks里同时打开两个codeblocks项目会很混乱)。

4、 安装CUDA6.5(20分钟)

CUDA是当下GPU编程的关键库,在NVIDIA的板子上可以为视觉加速。
TK1和manifold用的CUDA都是这个版本,且不能用更新版本的CUDA,所以搭建不了TensorFlow(TX1和TX2可以用新的CUDA版本例如8.0)
CUDA6.5官方下载链接:http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda-repo-l4t-r21.2-6-5-prod_6.5-34_armhf.deb 

++先介绍一个快速cd到某目录的简易方法:输入cd空格后,将对应目录的文件夹拖动到终端中,回车。妙算和jetson外的系统不一定有这个功能(比如笔者虚拟机里的ubuntu)

(1)cd到CUDA6.5下载包所在目录,在终端执行命令:sudo dpkg -i cuda-repo-l4t-r21.2-6-5-prod_6.5-34_armhf.deb(后部可按Tab自动补全,此功能妙算、Jetson自带);

(2)在终端执行命令:sudo apt-get update,若无此步,后几步很可能会出现谜之问题;

(3)在终端执行命令:sudo apt-get install cuda-toolkit-6-5(此步需要下载1G文件,请确保有足够空间且网络畅通)

在终端执行如下命令:
sudo usermod -a -G video $USER
vi ~/.bashrc(此步用sudo gedit ~/.bashrc更方便)
在环境变量文件~/.bashrc末按O加入:
# Add CUDA bin & library paths:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH
按esc输入:wq退出后,在终端执行如下命令:
source ~/.bashrc
(此处可能会出现某cuda-toolkit文件下载安装失败的error,可使用wget + (该文件下载链接), dpkg -i 该.dev文件名, sudo apt-get install 该.dev文件名 来进行解决)
(4)在终端输入nvcc -V(注意此处V为大写),若显示CUDA版本信息则表示编译成功。

5、 安装OpenCV3.1.0(40分钟)

OpenCV是一个当下非常火热的开源视觉库,大量地应用于工业领域。近来随着大数据、人工智能的火热,更是成为视觉算法的掌上明珠。

TK1可以使用Jetpack提供的TK1专用的OpenCV4Tegra2.4.10.2,但需要用Jetpack自动安装(且需勾选Jetpack中的所有选项),若自行用命令行安装OpenCV4Tegra,则会出现一修改摄像头分辨率就报错,且无法修改默认的640*480分辨率的问题(因为OpenCV4Tegra没有交叉编译V4L);

OpenCV3.0.0太原始且安装出错问题多;更高版本的OpenCV没试过。具体操作如下:

(1)在终端中输入:

sudo apt-get update(养成及时更新的好习惯)

sudo apt-get install git checkinstall pkg-config libtiff4-dev libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libv4l-0 python-numpy libgtk2.0-dev v4l-utils libeigen3-dev libdc1394-22-dev(注意千万别在此处下载TBB的包,会出现无法自动添加IT的迷之问题,需要-Wa之类至今没搞懂,只有英文论坛资料的解决方法)

(2)漫长的编译时间

在终端中输入:
mkdir release  
cd release  
sudo apt-get install cmake-qt-gui(安装cmake-gui)

cmake-gui(千万别sudo cmake-gui,不然cmake的全部文件都会带上权限……你会哭出来的)

你打开了图形界面的GUI,此处的操作使用GUI确实比终端命令来得容错率高。
无论如何,先勾选CUBLAS和CUDA_FAST_MATH;确保WITH_V4L的勾勾上;
如果你要使用TBB来加速自己的OpenCV(把#define HAVE_TBB加在你程序所有OpenCV的include的最前面,加后面无效),勾选BUILD_TBB, WITH_TBB(此处会自动下载不会出错的TBB包);如果你不需要且没有安装过FFMPEG,取消掉FFMPEG的勾;VTK的勾可去掉。
点击下方左侧左边的configure,读条后若主框中有显示为红色的条目,则需要对条目进行修改。
若无红色条目,点击下方左侧右边的generate,检查cmake的输出,确认CUDA和CUBLAS等将被安装(不然……你OpenCV的GPU编程可能就不见了):

--     Use Cuda:                    YES (ver 6.5)
--     Use OpenCL:                  YES
-- 
--   NVIDIA CUDA
--     Use CUFFT:                   YES
--     Use CUBLAS:                  YES
--     USE NVCUVID:                 NO
--     NVIDIA GPU arch:             32
--     NVIDIA PTX archs:            
--     Use fast math:               YES

若是万事俱备,在终端中输入:

make -j4(妙算或Jetson TK1就四核CPU,若输入make -j,你的ARM很可能会自动关机;此处需要至少30分钟)
sudo make install (此处可能很快)

如果使用pkgconfig,需要修改环境变量,在终端输入(其实可以直接Ctrl+C,在终端里右键粘贴╮(╯▽╰)╭):
echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf.d/opencv.conf  
sudo ldconfig  
printf '# OpenCV\nPKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig\nexport PKG_CONFIG_PATH\n' >> ~/.bashrc  
source ~/.bashrc

6、安装ros-indigo

ROS是一个用于集成传感器信息的机器人系统,当下机器人、无人机、无人驾驶都会用到该系统,甚至深度学习的python模型也可以通过ROS实现与C++的关联,从而移交OpenCV进行后续处理。

此处主要参考http://www.jianshu.com/p/997ede860d74中所述的方式(绝不能照搬):

(1)在终端中输入:

sudo apt-get install git
git clone https://github.com/jetsonhacks/installROS.git

cd installROS

(2)复制一份installROS.sh,并命名为installROSModified.sh。打开installROSModified.sh,千万不要更改源,仍使用默认源。在Environment Setup中添加:

#Using RVIZ
echo "unset GTK_IM_MODULE" >> ~/.bashrc

添加在source ~/.bashrc前一行,保存关闭。

(3)在终端中的该目录下输入:./installROSModified.sh,若出现Pemission Denied的问题,则输入sudo chmod a+x installROSModified.sh给予权限后,./installROSModified.sh。(其他地方出现./*权限不足时也可用该方法解决)

(4)最后新打开一个终端(在终端上右键,New Teminal),输入roscore,若显示版本则表示安装成功。若显示Command no found,则说明你的内心不够虔诚……在~/.bashrc末行输入source /opt/ros/indigo/setup.bash,保存关闭source ~/.bashrc后再来一次roscore。

如果你的内心足够虔诚,你可以选择在ROS安装成功后,在终端中再输入sudo apt-get install ros-indigo-urdf ros-indigo-urdf-parser-plugin ros-indigo-urdf-tutorial ros-indigo-urdfdom-py ros-indigo-navigation ros-indigo-navigation-layers ros-indigo-depthimage-to-laserscan ros-indigo-openni* ros-indigo-kobuki* ros-indigo-turtlebot-bringup ros-indigo-turtlebot-create,绝对会有某三个库出错的,可惜笔者内心不够虔诚,,就一直没去找解决方法……

(5)ROS真的对你那么好?你输入sudo apt-get update也许就能发现 ROS可能破坏了你的更新源,那么你需要在终端中输入:
sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update

7、设置codeblocks和CUDA的nvcc编译器

方法主要源自http://blog.csdn.net/fdqw_sph/article/details/53787658,本文此处大部分搬运自原文。

请在sudo codeblocks下操作,否则你创建的新编译器活不过你下一次的codeblocks启动!(这一点全网一个字都没提到过,是某位大神的探索成果,配置者也如淋甘霖)

(1)点击CodeBlocks 菜单栏上的Settings --> Compiler and debugger
     在上方的Selected compiler中,确定“GNU GCC Compiler”被选中,然后点击下面的Copy按钮,以新建一个编译器配置
     输入编译器名字,比如"NVIDIA NVCC CUDA Compiler"
     弹出的窗口全部点击“Yes”等,然后选择下面的Toolchain executables标签页,如果看不到,点一下向右的箭头
     输入nvcc的安装路径,比如/opt/local/cuda
     再下面的C compiler输入:nvcc
     C++ compiler: nvcc
     Linker for dynamic libs: nvcc
     Likner for static libs: nvcc
     Debugger: cuda-gdb?(没有试过,配置者是保持原样)
     点击Search directories标签页,在Compiler box中加入usr/local中cuda和cuda6.5的include文件夹
     在Linker box中加入 cuda6.5中lib的cudart.so 和 cuda中lib的curand.so(怀疑这两库像opencv2/opencv.hpp一样包括了所有CUDA库)

点击标签栏旁边的向右箭头,直到滚动到Other settings
     点击下面的Advanced options按钮,在弹出的警告窗口中点击Yes
 
     在Commands标签页中选择Compile single file to object file,然后把Command line macro中的内容替换成:
     $compiler --compiler-options "$options" $includes -c $file -o $object

在Output parsing标签页中选择Instantiated from info,然后把Regular expression中的内容替换成:
     ([][{}() #%$~A-Za-z0-9_:+//.-]+)[(:]([0-9]+)/)?:[ ]+([iI]nstantiated from .*)

选择Compiler warning,然后把regular expression中的内容替换成:
     ([][{}() #%$~A-Za-z0-9_:+//.-]+)[(:]([0-9]+)/)?:[ ]([Ww]arning:[ ].*)

选择Compiler error,然后把regular expression中的内容替换成:
     ([][{}() #%$~A-Za-z0-9_:+//.-]+)[(:]([0-9]+)/)?:[ ](.*)

(2)下面让CodeBlocks 能够认出CUDA的源代码文件:*.cu :

在菜单上点击Project --> Project tree --> Edit file types & categories
     点击Add按钮
     输入类别名,如“CUDA Sources”
     在下面的fire masks中输入: *.cu;

(3)接下来,还需要作一些小设定,使得cu源代码文件能够被编译器所编译链接:

*注意:只能对需要编译的.cu文件进行以下步骤,而那些被其他文件所include的头文件不需要做这些设定
     在左边项目文件关系树的.cu文件上点击右键,然后点击Propertiies
     在Build标签页中,选中Compile file 和 Link file

Ok,所有设置完成,现在便可以在CodeBlocks 中编写CUDA应用,然后直接按F9或点击按钮进行Build了。

注意,SDK的例子中,很多需要链接cutil库,记得要在Project --> Build options里面的Link libraries中加入这个库,当然,也可以在gblobal compiler settings里面加入。(不过编译者没这么做似乎还没遇到问题)
译注: CodeBlocks 是一个十分优秀的开源跨平台IDE,现在用户越来越多,经过上述配置,Linux环境下我们不用每次在command line中输入nvcc ........这样来编译项目,同时,也可以很方便的将CUDA引入原有项目中进行整合,编译。

注意: 项目的Build Options中,一定要把编译器选择为新建的CUDA NVCC Compiler,否则将还是使用普通的C/C++编译器来编译项目。修改后,整个项目的所有代码将首先通过nvcc编译器,nvcc会作出判断该文件是C/C++文件还是cu文件,如果是C/C++代码文件,nvcc会自动将该文件转交给GCC处理,如果是cu文件,nvcc会按照nvcc编译规则,分离其中的host和device代码,然后进行编译。如果对nvcc编译过程的细则感兴趣,请参考NVIDIA的 《nvcc_版本号.pdf》,该文档在NVIDIA CUDA网站 有下载,也可以在安装的CUDA路径中的doc文件夹中找到。

注意: 再次声明,以上配置过程仅对Linux环境中使用GCC编译器的情况有效,Windows中使用CodeBlocks作为IDE暂未成功配置,可以确定的是,目前的CUDA版本在Windows中必须使用Visual Studio2005或2008的ld编译器。
如果在Linux环境下,使用上述配置方法不能成功生成CUDA项目,请检查GCC编译器以及CUDA Toolkit和CUDA SDK是否正确安装和配置。
若CUDA库不被系统所默认搜索,输入:sudo ldconfig /usr/local/cuda-6.5/lib,将CUDA库设为动态链接库。

8、以上为全套配置方法,参考的博客不限于:
http://blog.csdn.net/deyili/article/details/51011959
http://blog.csdn.net/fdqw_sph/article/details/53787658

等等。

欢迎指正!

要点初见:从零开始进行妙算manifold、Jetson TK1环境配置相关推荐

  1. 从零开始搭建深度学习服务器: 基础环境配置(Ubuntu + GTX 1080 TI + CUDA + cuDNN)

    从零开始搭建深度学习服务器: 基础环境配置(Ubuntu + GTX 1080 TI + CUDA + cuDNN) 首先先声明一下 这篇是转载来自  : 从零开始搭建深度学习服务器: 基础环境配置( ...

  2. NVIDIA Jetson TX2 环境配置

    前言 笔者参加学校的冰壶机器人实验课基于NVIDIA Jetson TX2开发板进行开发.这篇文章主要记录NVIDIA Jetson TX2的环境配置过程和踩坑记录. 一.NVIDIA Jetson ...

  3. 从零开始跑ORB_SLAM2(一) 前期准备与环境配置

    前期准备 工作环境: PC:i5-8265U 8GRAM 核显 弟弟CPU 相机:Intel-Realsense D435 环境:Ubuntu16.04 LTS+ ROS Kinect 如何安装Ubu ...

  4. jetson nano 环境配置(pytorch+ros+rartographer)

    1. ,把系统烧录至SD卡后进入系统中依次完成:语言选择.键盘布局选择.WIFI连接.地区选择.用户设置.内存设置(0或者留空). 2. 进入系统设置完成语言的完整下载以及等待系统完成更新.设置系统休 ...

  5. 【从零开始学用OpenCV】Day1 环境配置与搭建

    Day 1 环境配置与搭建 1.1认识OpenCV 为了认识OpenCV,首先我们得知道什么是电脑程序. 我们知道,在日常生活中,不同地区的人使用不同的语言.同一种语言说出来的话.写出来的文章,只有懂 ...

  6. Python 小白从零开始 PyQt5 项目实战(1)安装与环境配置

    本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5 的项目实战. 什么叫从零开始?从软件安装.环境配置开始. 不跳过一个细节,不漏掉一行代码,不省略一个例图. ...

  7. 大疆妙算Manifold刷机换源,cuda,opencv,qt配置以及实现opencv读取usb摄像头,qmake nvcc交叉编译

    大疆妙算Manifold刷机换源,cuda,opencv,qt配置以及实现opencv读取usb摄像头,qmake nvcc交叉编译 一.刷机 1.解压安装包 2.制作镜像 3.然后按照妙算说明书进入 ...

  8. ROS:Nvidia Jetson TK1平台安装使用ROS

    原文连接: http://wiki.ros.org/indigo/Installation/UbuntuARM Ubuntu ARM install of ROS Indigo There are c ...

  9. Jetson tk1 安装 CUDA,ROS,OpenCV和kinect2以及刷机以及ssh远程控制

    我的jetson tk1的系统是:LTR21.3,ubuntu14.04.本文仅仅是个人总结,亲测成功. 注意:如果你是使用校园网进行安装的话,有很多源是没办法访问的,安装的时候就会出现很多问题,所以 ...

最新文章

  1. 我身边那些逃离深圳的朋友们
  2. QT Creator使用matlab库文件读取.mat文件数据
  3. 剑指offer 合并2个排序的链表
  4. 关于 SAP 产品 UI 的搜索引擎优化 SEO - Search Engine Optimization
  5. Java:Lombok插件用法笔记
  6. 全套学习!java排序sort方法
  7. Python+shelve读写二进制文件
  8. linux用户起名,如何在Linux中重命名用户(也可以重命名组和主目录)
  9. android TextView首行缩进两个字符
  10. 如何快速格式化重置Mac
  11. 对物理量“角速度”与“波矢”的理解
  12. 智能家居(2)智能体验与智能交互
  13. IDEA设置一键导包
  14. VUE二级/多级路由配置方式(嵌套路由)
  15. TPLINK免驱版网卡插上后无法识别到CD驱动器怎么办?
  16. 移动端web界面开发
  17. 到底snappy ubuntu core是什么?
  18. 一个人最高的境界:半
  19. 微信服务号开发----发送消息
  20. Office 2010注册机

热门文章

  1. (结构体+指针)(外加自定义车辆数量和选择目标车辆修改)定义“车”结构体,实现改变车颜色,车牌操作。
  2. 永磁同步电机——矢量控制(基于PI调节器)
  3. Ubuntu 20.04 安装 Apache Guacamole 远程网关 mysql ldap
  4. 10个超酷的手机应用程序
  5. 用mantis进行缺陷管理
  6. javaScript阶乘算法挑战
  7. PMP考点汇总-敏捷基础概念(三)
  8. php定时执行任务,PHP定时执行任务的3种方法详解
  9. MySQL中的哥哥表、妹妹字段,是什么鬼?
  10. onbeforeunload不触发_用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)