[nvidia jetson tx2] setup

JetPack 을 설치하기 위해서는 먼저 일반적인 Ubuntu 컴퓨터가 있어야 한다.(VMWare 안됨)

1. Install JetPack

1번작업은 host(jetson이 아닌 다른 우분투) 에서 이루어 진다.
https://developer.nvidia.com/embedded/jetpack 위 사이트에서 JetPack을 다운로드 받고 실행한다.
반드시 3.1 을 받아야 한다. 3.2는 CUDA 9.0이 깔려서....


next

이 경로에 소괄호나 한글은 있으면 안된다.
next

next


여기서는 기본 설정 그대로 full로 전체 설치를 권장한다.

바로 Next를 클릭한다.

모든 라이선스를 동의한후, Accept 클릭!

모든 다운로드가 될때 까지 대기한다.

이제부터 잘 보고 따라하라는 메세지가 뜬다. 잘 보고 따라하면 된다.

확인 버튼을 눌러주면 host에서 모든 설치 준비를 한다.


Next를 누른다.

첫번쨰 옵션을 선택하는데, 라우터(공유기)에 해당 host와 jetson이 모두 유선 랜선으로 연결 되어 있어야 한다.


enp2s0 은 유선 연결, wlp3s0 은 와이파이이다. Jetson이 어떻게 연결되었는지에 따라 선택하면 된다.
근데 wifi로 하면 인식을 못한다.
그래서 host와 device 모두 유선랜으로 연결 되어야 한다.

1. jetson을 끈다.
2. jetson의 전원 플러그를 뽑는다. microB를 host와 jetson에 연결한다.
3. 다시 jetson의 전원 플러그를 꼽는다.
4. 전원 버튼을 켜자마자 복구 버튼을 누르고 있는다. 복구 버튼을 누른채로 리셋버튼을 눌렀다 떼고 복구 버튼도 2초 뒤에 띈다.
5. lsusb 명령어로 NVidia Crop이 뜨는지 확인후 Enter키를 누른다.

사실 1,2,3 다 필요없고 전원케이블, 데이터케이블 다 꼽고 4번부터 해도 된다.

이제 쭉 설치가 될텐데, 마지막에 IP 주소를 못 찾는다고 하면 Retry(1번) 을 선택한뒤 계속 기다리면 설치가 완료 된다.

2. 언어팩 & 한글 설치

반드시 아래의 명령행으로 작업해야한다. 설정에 들어가서 직접하면 에러남.

sudo apt-get install fcitx fcitx-hangul -y

sudo apt-get install language-pack-en language-pack-en-base language-pack-gnome-en language-pack-gnome-en-base -y
sudo apt-get install language-pack-ko language-pack-gnome-ko language-pack-ko-base language-pack-gnome-ko-base -y

sudo apt-get install $(check-language-support -l en) -y
sudo apt-get install $(check-language-support -l ko) -y
  • System Settings::Keyboard 의 Shortcuts::Typing 을 모두 disabled로 설정.
  • Compose Key 를 Right Alt로 선택한다.
  • Switch to next source는 오른쪽 Alt 버튼을 눌러 Multikey로 선택한다.
  • 설정을 완료한 후 화면 상단 우측에 키보드 형태의 아이콘을 클릭한다.
  • Configure Current Input Method를 클릭한다.+버튼을 눌르고 Only Show Current Language에 체크가 되어있다면 해제해준다.
  • 목록에서 Hangul을 찾아 추가해준다.
  • Global Config 메뉴를 찾아 클릭한다. Trigger Input Method를 모두 오른쪽 Alt키를 눌러 Multikey로 설정해준다.
  • Extra key for trigger input method는 Disabled로 설정하고 Share State Among Window를 All로 설정한다.
  • 재부팅하고 오른쪽 Alt 버튼으로 한/영 변환이 되는지 확인한다.

3. Install opencv

무슨 이유인지는 모르지만 기존 opencv는 내장 카메라 인식을 못한다.
아래의 명령어로 기존 opencv를 제거 하고 opencv3.3.0 을 빌드한다.
3.3.1은 world 빌드 안됨

opencv를 전역 설치할때마다 느끼는 거지만, 다른 라이브러리의 빌드를 위해 NoWorld로 빌드한번 하고, 나의 개발 편의를 위해 World로 한번 빌드해주는게 편하다.

sudo apt-get purge libopencv4tegra-dev libopencv4tegra -y
sudo apt-get purge libopencv4tegra-repo -y
sudo apt-get update

sudo rm /usr/lib/opencv*
sudo rm -r /usr/include/opencv* 

sudo apt-get install build-essential curl -y
sudo apt-get install cmake libavcodec-dev libavformat-dev libgtk2.0-dev pkg-config -y

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -y

sudo apt-get install python2.7-dev -y
sudo apt-get install python-dev python-numpy -y
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev -y

sudo apt-get install libgtkglext1 libgtkglext1-dev -y
sudo apt-get install qtbase5-dev -y

sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp -y

sudo ln -sf /usr/lib/aarch64-linux-gnu/tegra/libGL.so /usr/lib/aarch64-linux-gnu/libGL.so

curl -L https://github.com/opencv/opencv/archive/3.3.0.zip -o opencv-3.3.0.zip
#world build
unzip opencv-3.3.0.zip
cd opencv-3.3.0

mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_CUDA=ON -DCUDA_ARCH_BIN="6.2" -DCUDA_ARCH_PTX="" -DWITH_OPENGL=OFF -DWITH_LIBV4L=ON -DWITH_GSTREMER=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_world=ON ..


make -j1
sudo make install

cd ../../
sudo rm -r opencv-3.3.0
#No world build


unzip opencv-3.3.0.zip
cd opencv-3.3.0

mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_CUDA=ON -DCUDA_ARCH_BIN="6.2" -DCUDA_ARCH_PTX="" -DWITH_OPENGL=OFF -DWITH_LIBV4L=ON -DWITH_GSTREMER=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_world=OFF ..

make -j1
sudo make install
cd ../../
sudo rm -r opencv-3.3.0
rm opencv-3.3.0.zip

https://devtalk.nvidia.com/default/topic/847299/problem-with-opencv/
http://dev.t7.ai/jetson/opencv/

3.1 bashrc

홈폴더의 .bashrc 마지막 줄에다가 아래의 내용 추가.

export PATH=/usr/local/lib/

3.2 Camera

opencv의 VideoCapture의 인자를 0을 주면 카메라가 되어야 하는데 안된다.
아직도 이유를 찾지 못했는데 아래의 방법으로 직접 열어야 한다.

#include<opencv2/opencv.hpp>
#include<iostream>
#include<string>
int main(){
	cv::VideoCapture vc("nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)1280, height=(int)720, format=(string)I420, framerate=(fraction)120/1 ! nvvidconv flip-method=0 ! video/x-raw, format=(string)I420 ! videoconvert ! video/x-raw, format=(string)BGR ! appsink",cv::CAP_GSTREAMER);

	cv::Mat img;
	while(vc.read(img)){
		//cv::resize(img,img,cv::Size(1280,720));
		cv::imshow("img",img);
		cv::waitKey(1);
	}
	return 0;
}
g++ main.cpp -O2 -std=c++11 -lopencv_world

World 모듈이 편하다.

https://devtalk.nvidia.com/default/topic/1014006/jetson-tx2/opencv-videocapture-with-onboard-csi-camera-/

4. Firefox57

firefox56 버전을 쓰면 좋으나 56버전이 무거워 jetson이 제대로 돌리질 못한다.

그전에 chromium-browser가 자꾸 바탕화면에 뜬다. 아래의 명령으로 제거
인터넷으로 다운받아도 안되니, 아래의 명령어로 57 버전 설치

sudo apt-get remove chromium-browser --purge -y
rm -rf ~/.config/chromium
rm -rf ~/.cache/chromium
sudo rm -rf /etc/chromium-browser

sudo apt-get install firefox -y

5. Jetson 확장

Jetson에는 USB 허브와 외장 스토리지가 필요하다.
USB는 하나밖에없고, SSD는 32GB밖에 안되기 때문이다.

M.2 SSD를 꽂을수 있지만 길이가 애매하여 적절한 부품을 찾지 못했고, 어차피 느려터진 임베디드 키트이므로 좋은 SSD를 꼽을 이유가 없다.

5.1 HDD

SP588 Coms SATA 케이블(데이터 + 전원). 연장 50cm

우선 HDD를 장착하기 위해 위의 부품이 필요하다. HDD는 jetson 과 jetson 밑창 사이에 장착한다.
HDD는 어떤 제품을 사용해도 상관이 없으나 두께가 7mm 이하여야 한다. 아래의 제품을 추천한다.

SEAGATE Barracuda HDD 1TB ST1000LM048

USB 허브는 2.0이지만 얇은 아래의 제품을 추천한다.
WeVO OH-400

이제 키트와 밑창을 분리후 밑창에 아래와 같이 부품을 설치한다. 투명 양면 테이프와 스카치 테이프면 아주 적절하다.

부품을 설치하고 키트를 위에 붙이면 아래와 같이 깔끔하게 확장이 가능하다.