大疆妙算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 ~/manifold/Linux_for_Tegra/bootloader    
sudo rm system.img    //如果system.img已经存在则应该删除或者重命名    
sudo ./nvflash --read APP system.img --bl ardbeg/fastboot.bin --go  

大概需要20min+,我是在虚拟机搞的速度比较慢。

3.然后按照妙算说明书进入恢复模式,有两种方式

4.通过数据线将妙算连接到电脑的ubuntu,然后再pc端输入命令

lsusb
//如果出现
ID 0955:7740 NVidia Corp.

则证明妙算进入恢复模式,可以进行下一步操作

5.恢复出厂模式

进入到你的安装包解压的文件夹,我是在根目录下

cd ~/Linux_for_Tegra    
sudo ./flash.sh jetson-tk1 mmcblk0p1

漫长的烧录时间,睡一觉,然后显示

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

猜你喜欢

转载自blog.csdn.net/weixin_42954291/article/details/82821765