要点初见:从零开始进行妙算manifold、Jetson TK1环境配置
此文初寫于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的全部文件都會帶上權限……你會哭出來的)
無論如何,先勾選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 gitgit clone https://github.com/jetsonhacks/installROS.git
cd installROS
(2)復制一份installROS.sh,并命名為installROSModified.sh。打開installROSModified.sh,千萬不要更改源,仍使用默認源。在Environment Setup中添加:
#Using RVIZecho "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環境下,使用上述配置方法不能成功生成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环境配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android游乐园排队app,游乐园排
- 下一篇: 22种编程语言,祝大家新年快乐