大疆妙算Manifold刷机换源,cuda,opencv,qt配置以及实现opencv读取usb摄像头,qmake nvcc交叉编译
一、刷机
准备工作:
1、一台运行Linux的计算机/虚拟机(版本为Ubuntu 14.04,如果使用其他版本也可以,不过导致妙算闪屏,,解决方案在后面)。
2、剩余硬盘大于16G。
1.解压安装包
安装包可以去大疆官网下载,找个地方解压
sudo tar -xvpzf ~/Downloads/manifold_image_v1.0.tar.gz
2.制作镜像
cd ~/Linux_for_Tegra
sudo ./flash.sh jetson-tk1 mmcblk0p1
大概需要20min+,我是在虚拟机搞的速度比较慢。
3.然后按照妙算说明书进入恢复模式,有两种方式
4.通过数据线将妙算连接到电脑的ubuntu,然后再pc端输入命令
lsusb
//如果出现
ID 0955:7740 NVidia Corp.
则证明妙算进入恢复模式,可以进行下一步操作
5.恢复出厂模式
进入到你的安装包解压的文件夹,我是在根目录下
cd ~/manifold/Linux_for_Tegra/bootloader
sudo rm system.img //如果system.img已经存在则应该删除或者重命名
cd bootloader
sudo ./nvflash --read APP system.img --bl ardbeg/fastboot.bin --go
漫长的烧录时间,睡一觉,然后显示
Flashed Successfully
烧录成功,否则重新烧录,成功后更新一下。
6.注意
虽然妙算的本质就是nvidia的jetson tk1,但是大疆对它进行了一些深度定制,并且在Linux4Tegra的镜像中集成了大疆的无人机库文件,所以nvida官方提供的镜像是不能用的,乖乖的用大疆的镜像吧。
如果之前在pc端制作镜像的时候用的ubuntu不是14.04,妙算刷机后会出现闪屏的问题,解决方法也很简单,联网后(最好连网线)更新一下就好了
sudo apt-get update
sudo apt-get upgrade
7.妙算初始化后的用户名和密码都是ubuntu
二、换源
国外的源也不是不能用,如果你的网好的话就随意,我这里是换了中科大的源
首先在terminal中输入命令
sudo gedit /etc/apt/sources.list
可以先备份一下
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
然后打开这个文件
sudo gedit sources.list
然后替换里面的内容
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
保存并关闭
三、安装cuda6.5
cd到cuda-repo-l4t-r21.2-6-5-prod_6.5-34_armhf.deb的目录
然后
sudo dpkg -i cuda-repo-l4t-r21.2-6-5-prod_6.5-34_armhf.deb
sudo apt-get update
sudo apt-get install cuda-toolkit-6-5
四、安装opencv
先安装OpenCV4Tegra
sudo dpkg -i libopencv4tegra-repo_l4t-r21_2.4.10.1_armhf.deb
sudo apt-get update
sudo apt-get install libopencv4tegra libopencv4tegra-dev
然后安装函数库
sudo add-apt-repository universe
sudo apt-get update
# Some general development libraries
sudo apt-get install build-essential make cmake cmake-curses-gui g++
# libav video input/output development libraries
sudo apt-get install libavformat-dev libavutil-dev libswscale-dev
# Video4Linux camera development libraries
sudo apt-get install libv4l-dev
# Eigen3 math development libraries
sudo apt-get install libeigen3-dev
# OpenGL development libraries (to allow creating graphical windows)
sudo apt-get install libglew1.6-dev
# GTK development libraries (to allow creating graphical windows)
sudo apt-get install libgtk2.0-dev
然后解压opencv源码
unzip opencv-2.4.10.zip
mv opencv-2.4.10 ~
然后编译
cd ~/opencv-2.4.10
mkdir build
cd build
cmake -DWITH_CUDA=ON -DCUDA_ARCH_BIN="3.2" -DCUDA_ARCH_PTX="" -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF ..
sudo make -j4 install
然后配置一下环境变量
echo "# Use OpenCV and other custom-built libraries." >> ~/.bashrc
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/" >> ~/.bashrc
source ~/.bashrc
然后安装一下依赖库,这样就可以读usb摄像头了
sudo apt-get install libv4l-dev
sudo apt-get install v4l2ucp
sudo apt-get install v4l-utils
五、安装QT
用apt-get安装就好了
sudo apt-get install qt4-dev-tools #开发包
sudo apt-get install qtcreator #IDE
sudo apt-get install qt4-doc #开发帮助文档
sudo apt-get install qt4-qtconfig #配置工具
sudo apt-get install qt4-demos #DEMO源码 QT
然后再termial中输入下面的命令找到你的ide
whereis qtcreator.sh
然后cd到这个文件夹
然后输入命令打开它
qtcreator.sh
然后按照下面的图片配置你的ide
一波操作之后qt就可以用了,然后创建一个新的控制台工程,然后配置一下你的pro文件,让你可以在qt中用opencv的库
在你的pro文件里面加入
SOURCES += main.cpp
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += /usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_imgproc.so
然后随便写一个main函数读一下图像
#include <QCoreApplication>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
IplImage *org_frame = NULL;
Mat org_img;
int main(void)
{
cvNamedWindow("original video", CV_WINDOW_AUTOSIZE);
CvCapture *org_cap = cvCreateCameraCapture(0);
while(1)
{
org_frame = cvQueryFrame(org_cap);
if(!org_frame)
{
cout << "err: camera read failed." << endl;
break;
}
cvShowImage("original video", org_frame);
if(cvWaitKey(1) != -1)
{
cout << "process finished." << endl;
break;
}
return 0;
}
然后就可以看到图像了!
六、实现NVCC和QMAKE的交叉编译
首先自己创建一个kernel.cu文件,里面简单写一个helloworld
//CUDA-C includes
#include <cuda.h>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
#include <stdio.h>
extern "C"
void runCudaPart();
__global__ void hello_from_gpu(void)
{
printf("Hello from gpu!\n");
}
void runCudaPart(void)
{
printf("hello from cpu!\n");
hello_from_gpu<<<1, 1>>>();
cudaDeviceReset();
}
然后再配置一下pro文件
# This makes the .cu files apper in your project
OTHER_FILES += ./kernel.cu
# CUDA setting <-- may change depending on the system
CUDA_SOURCES += ./kernel.cu
CUDA_SDK = "/usr/local/cuda-6.5/" # Path to cuda SDK install
CUDA_DIR = "/usr/local/cuda-6.5/" # Path to cuda toolkit install
# Don't edit unless you know what you are doing
SYSTEM_NAME = ubuntu
SYSTEM_TYPE = 32
CUDA_ARCH = sm_21 # Type of CUDA architecture
NVCC_OPITIONS = --use_fast_math
# include paths
INCLUDEPATH += $$CUDA_DIR/include
# library directories
QMAKE_LIBDIR += $$CUDA_DIR/lib/
CUDA_OBJECTS_DIR = ./
# Add the necessary libraries
CUDA_LIBS = -lcuda -lcudart
# The followings makes sure all path names(which often include scpaces) are put
# between quotation marks
CUDA_INC = $$join(INCLUDEPATH, '" -I"', '-I"', '"')
# LIBS += $$join(CUDA_LIBS, '.so ', '', '.so')
LIBS += $$CUDA_LIBS
# Configuration of the cuda compiler
CONFIG(debug, debug|release) {
# Debug mode
cuda_d.input = CUDA_SOURCES
cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
cuda_d.commands = $$CUDA_DIR/bin/nvcc -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
cuda_d.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
# Release mode
cuda.input = CUDA_SOURCES
cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
cuda.commands = $$CUDA_DIR/bin/nvcc $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
cuda.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda
}
运行一下,完美!
搞定收工!!!
(PS:其间应该还有一些小问题,简单操作后就可以解决)
https://blog.csdn.net/yc5300891/article/details/80657439
https://blog.csdn.net/u011619535/article/details/76100631
https://blog.csdn.net/yc5300891/article/details/80657439
https://blog.csdn.net/billbliss/article/details/72140471
https://blog.csdn.net/bisheng250/article/details/53611237
https://blog.csdn.net/seamanj/article/details/49652649