직접 젯봇 펌웨어 만들기
상태바
직접 젯봇 펌웨어 만들기
  • IC뱅큐
  • 승인 2020.11.24 12:44
  • 댓글 0
이 기사를 공유합니다

[테크월드=김경한 기자] 지난 10월호에서는 허스키렌즈PRO에 대해 소개를 진행했다. 11월호에서는 젯봇 개발을 한번 더 설명하고자 한다. 젯봇(JetBot) 구동을 위한 사용자만의 펌웨어 제작법에 대해 알아본다. 

공식 이미지 다운로드와 젯봇 펌웨어 생성
1. 구성 요소 Environment 의 Analysis :

[그림 1] 젯슨 나노 이미지의 구성 요소 환경

[그림 1]에 표시된 버전 정보는 NVIDIA 공식 웹 사이트에서 업데이트 한 공식 젯슨 나노(Jetson Nano) 이미지의 구성 요소 환경이다. 또한 야붐(Yahboom) 젯봇 RC카의 공식 펌웨어 구성 요소 환경이며 구성 요소 버전 환경은 전체 기능을 활성화 시킬 수 있다. 사용자가 젯봇 펌웨어 환경을 독자적으로 구축할 수 있으나 설치 환경이나 버전 호환성 문제가 생길 수 있으니 야붐에서 제공하는 공식적인 펌웨어 환경을 사용하기를 추천한다. 

 

Ex) 다음 그림은 2019 년 7월 16일 에 네바다(Nevada) 공식 버전에서 업데이트한 젯슨 나노 공식 이미지의 구성 요소 환경을 보여주며 젯팍(Jetpack), CUDA, cuDNN, TensorRT 버전은 2019 년 5월 31일에 업데이트 된 환경 펌웨어에서 업그레이드된다.

 

젯봇 로봇 자동차의 실제 기능을 사용할 때 코드는 설치된 TensorRT 발생 함수를 사용해 create_execution_context () 객체 속성 함수를 찾을 수 없다. 젯봇 나노 엠비디아 공식 개발자 키트 SD 카드 이미지 다운로드 주소는 공식홈페이지에 나와있다.  

 

2.  Micro SD 카드에 이미지 굽기

PC와 마이크로 SD 카드 리더기를 준비해야 한다.

이미지 경로: [Jetbot-AI Car]-> [8.System Image]

1) 이미지 정보 :

(1) Yahboom_jetbot_image는 개발환경으로 구성된 환경이며 직접 사용할 수 있다.

(2) NVIDIA의 공식 이미지는 개발환경으로 구성되지 않은 이미지이며 사용자는 환경 설정을 해야 한다. 

 

2) 화상 이미지 정보

(1) 위에 제공된 주소에 따라 젯슨 나노 개발자 키트 SD 카드 이미지를 다운로드하고 컴퓨터에 저장된 위치를 기록한다.

(2) 사용 중인 컴퓨터 유형에 따라: 윈도우, Mac 또는 리눅스에서 아래 지침에 따라 Micro SD 카드에 이미지를 설치를 진행해주시면 된다.

 

      윈도우      

시스템 이미지를 쓰기 전에 SD 카드 포맷터로 SD 카드를 포맷을 꼭 진행해야 한다.

1. 포매터(Formatter) 설치 

패키지 경로 : [Jetbot-AI Car]-> [Annex]-> [Tools]-> [SD Card Formatter]

 

2. SD 카드 포맷

1) 카드 리더기로 SD 카드를 컴퓨터에 삽입하면 컴퓨터에 드라이브 문자가 하나 더 있음을 알 수 있다[그림 2].

[그림 2] 참고 : 경고가 나타나면 ‘예 / 확인’을 선택한다. 
[그림 2] 참고 : 경고가 나타나면 ‘예 / 확인’을 선택한다. 

2) Etcher를 사용해 젯슨 나노 개발자 키트 SD 카드 이미지를 마이크로 SD 카드에 사용한다. 

 

3. Etcher 설치 

패키지 경로 : [Jetbot-AI Car]-> [Annex]-> [Tools]-> [balenaEtcher-Portable]

 

4. 굽기 이미지 

카드 리더를 통해 포맷된 SD 카드를 컴퓨터에 삽입한다.

[그림 3] ‘이미지 선택’ 클릭
[그림 3] ‘이미지 선택’ 클릭

1) ‘이미지 선택’을 클릭하고[그림 3], 이전에 다운로드한 압축 이미지 파일을 선택한다.

2) 마이크로 SD 카드를 삽입해야 하는 경우. 윈도우에서 다음 대화 상자를 사용하라는 메시지가 표시되면 ‘취소’를 클릭한다.

3) ‘드라이브 선택’을 클릭하고 올바른 장치를 선택한다.

4) ‘Flash!’를 클릭한다[그림 4]. 마이크로 SD 카드가 USB3를 통해 연결된 경우 Etcher는 이미지를 쓰고 확인하는 데 약 10 분 정도 걸린다.

[그림 4] ‘Flash!’ 클릭
[그림 4] ‘Flash!’ 클릭

5) Etcher가 완료된 후. 윈도우에서 다음 대화 상자를 사용하라는 메시지가 표시되면 ‘취소’를 클릭한다. 

6) 컴퓨터에서 마이크로 SD 카드를 뺀다. 
 

      Mac      

 Etcher와 같은 그래픽 프로그램이나 명령 줄을 사용해 SD 카드 이미지를 사용할 수 있다.

- 방법 -

1) 처음엔 마이크로 SD 카드를 삽입하지 않는다.

2) Etcher를 다운로드, 설치, 시작한다. 

3) ‘이미지 선택’을 클릭하고 이전에 다운로드 한 압축 이미지 파일을 선택한다.

4) 마이크로 SD 카드를 넣어주고, Mac에 이 창이 표시되면 ‘무시’를 클릭한다[그림 5]. 

[그림 5] ‘무시’ 클릭
[그림 5] ‘무시’ 클릭

5) 다른 외장 드라이브에 연결되지 않은 경우 Etcher는 자동으로 마이크로 SD 카드를 대상 장치로 선택한다. 그렇지 않으면 ‘드라이브 선택’을 클릭하고 올바른 장치를 선택하면 된다.

6) ‘Flash!’를 클릭해주세요. Etcher를 계속하기 전에 Mac에서 사용자 이름과 암호를 입력하라는 메시지가 표시될 수 있다. 마이크로 SD 카드가 USB3를 통해 연결된 경우 Etcher는 이미지를 쓰고 확인하는 데 약 10 분 정도 걸린다. 

7) Etcher가 완료된 후 Mac에서 [그림 6] 대화 상자를 사용하라는 메시지가 표시되면 ‘무시’를 클릭한다. 

[그림 6] 이 메시지가 뜨는 ‘무시’ 클릭
[그림 6] 이 메시지가 뜨는 ‘무시’ 클릭

8) 컴퓨터에서 마이크로 SD 카드를 빼낸다. 


 
      리눅스      

 Etcher와 같은 그래픽 프로그램이나 명령 줄을 사용해 SD 카드 이미지를 쓸 수 있다.


1. 방법 1 --- Etcher

1) Etcher를 다운로드, 설치, 시작한다.

2) ‘이미지 선택’을 클릭하고 이전에 다운로드 한 압축 이미지 파일을 선택한다.

3) 마이크로 SD 카드를 넣는다.  다른 외장 드라이브에 연결되지 않은 경우 Etcher는 자동으로 마이크로 SD 카드를 대상 장치로 선택한다. 그렇지 않으면 ‘변경’을 클릭하고 올바른 장치를 선택한다.  

4) ‘Flash!’를 클릭한다. 운영 체제에서 Etcher를 계속하기 전에 사용자 이름과 암호를 입력하라는 메시지가 표시 될 수 있다[그림 7]. 마이크로 SD 카드가 USB3를 통해 연결된 경우 Etcher는 이미지를 쓰고 확인하는 데 약 10 분 정도 걸린다. 

[그림 7] ‘패스워드’ 입력
[그림 7] ‘패스워드’ 입력

5) Etcher가 완료되면 파일 애플리케이션을 사용해 SD 카드를 꺼낸다[그림 8].

6) 컴퓨터에서 마이크로 SD 카드를 꺼낸다. 

[그림 8] 파일 애플리케이션 활용해 마이크로 SD 카드 꺼내기
[그림 8] 파일 애플리케이션 활용해 마이크로 SD 카드 꺼내기

2. 방법 2 --- 명령 줄

1) ‘Ctrl + Alt + t ‘를 눌러 터미널 애플리케이션을 연다. 

2) 마이크로 SD 카드를 삽입하고 명령을 사용해 할당 된 디스크 장치를 표시한다. 

dmesg | tail | awk '$ 3 == "sd"{print}'

16GB 마이크로 SD 카드에 ‘/dev/sda’가 할당된 것을 [그림 9]에서 확인할 수 있다.

[그림 9] 마이크로 SD 카드에 ‘/dev/sda’ 할당된다
[그림 9] 마이크로 SD 카드에 ‘/dev/sda’ 할당된다

3) 이 명령을 사용해 압축된 이미지를 마이크로 SD 카드에 사용한다. 

/ usr / bin / unzip -p ~ / Downloads / jetson_nano_devkit_sd_card.zip | sudo / bin / dd of = / dev / sd <x> bs = 1M status = progress

EX) 명령이 완료된 후 명령 줄에서 디스크 장치를 꺼낸다.

sudo eject / dev / sd <x>

[그림 10] 명령줄에서 디스크 장치 꺼낸다
[그림 10] 명령줄에서 디스크 장치 꺼낸다

4) 컴퓨터에서 마이크로 SD 카드를 제거한다. 

 

3. 필수 구성 요소 설치 

1) pip 설치

파이썬(Python) 3.6은 이미 젯슨 나노에 설치돼 있으므로 pip 설치는 비교적 간단하다.
다음 명령어를 입력한다.

install : sudo apt-get install python3-pip python3-dev

(1) 설치 후, pip는 버전 9.0.1이므로 최신 버전으로 업그레이드 해야 한다.
업데이트하려면 다음 명령을 입력한다. 

python3 -m pip install --upgrade pip

(2) 업그레이드 후 pip 버전은 19.1.1이다. 업그레이드 후 버그(BUG)가 발생하므로 수동으로 변경 해야 한다[그림 11].

[그림 11] 업그레이드 후 수동으로 변경해야 한다
[그림 11] 업그레이드 후 수동으로 변경해야 한다

(3) 다음 명령을 입력한다. 

: sudo vim / usr / bin / pip3   

 

Original:
------------------------
from pip import main
if __name__ == '__main__':
sys.exit(main())
------------------------
After modification:
------------------------
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
------------------------

(4) 수정 완료 후 저장한다.

(5) ‘pip3 -V‘ 명령을 입력한다. 

(6) [그림 12]와 같이 인터페이스가 나타난다.

[그림 12] 인터페이스
[그림 12] 인터페이스

2) 젯슨 디펜덴시(Jetbot Dependency) 패키지 설치 

(1) 젯봇이 실행 중일 때 설치해야하는 패키지는 다음과 같다. 

[표1] 설치해야 할 패키지

(2) 로컬 설치: 명령을 사용해 소스에서 패키지를 찾거나 네트워크 환경이 좋지 않은 경우, 젯봇 종속성 패키지를 제공하고 WinSCP에서 로컬 패키지를 젯봇 파일 시스템으로 전송한다. 

패키지 경로: [Jetbot-AI Car]-> [Annex]-> [Jetbot Dependency package]

(3) 그런 다음 입력 할 수 있게 된다. ‘cd xxxx’는 패키지를 설치해야 하는 디렉토리(setup.py 파일이있는 디렉토리)로 이동한다.

(4) 다음 명령을 입력한다. 

sudo python3 setup.py install

(5) 패키지를 설치한다.

- 온라인 설치: 다음 명령을 사용하여 해당 패키지를 설치한다(xxx는 설치해야하는 패키지 이름이다.). 

sudo pip3 설치 xxx

(6) 새 버전의 설치에 호환성 문제가 있는 경우, 다음 명령을 사용해 위에 나열된 패키지에 지정된 버전의 종속성을 설치할 수 있다. 

sudo pip3 설치 패키지 == version0

(예를 들어, numpy 1.16.4를 지정해야 하며 다음 명령을 입력해야 한다.  sudo pip install numpy == 1.16.4 )
- 트레 이틀 릿 설치:

sudo python3 -m pip install git + https://github.com/ipython/traitlets@master

(7) cmake 소프트웨어를 설치한다.

sudo apt-get 설치 cmake

3) 젯봇 사용자 지정 드라이버 라이브러리로 수정

(1) 당신이 사용하는 경우, 패키지 설치 핍  Yahboom-Jetbot 하드웨어, 드라이버 패키지, Adafruit-MotorHAT에 의해 다운로드된다. 따라서, 우분투 소스에서 설치 명령(온라인 설치)으로 수정하거나 설치된 드라이버 파일을 교체해야 한다.

(2) 교체 단계는 다음과 같습니다.

① 설치된 Adafruit-MotorHAT 드라이버 파일 디렉토리에서 Adafruit_MotorHAT_Motors.py 파일 권한을 수정한다. 

- 입력 명령:
sudo chmod 777 /usr/local/lib/python3.6/dist-packages/Adafruit_MotorHAT-1.4.0-py3.6.egg/Adafruit_MotorHAT/Adafruit_MotorHAT_Motors.py

② 젯봇 패키지에 포함된 커스텀 Adafruit-MotorHAT 드라이버를 WinSCP를 통해 젯봇 파일 시스템으로 전송한다. 

패키지 경로 : [Jetbot-AI Car]-> [Annex]-> [Jetbot Dependency package]

③ 이전에 설치된 Adafruit_MotorHAT_Motors.py를 다음 명령으로 제공되는Adafruit_MotorHAT_Motors.py Yahboom으로 바꾼다. 

EX) 야붐에서 공식적으로 제공하는 사용자 지정 Adafruit-MotorHAT 드라이버는 홈 디렉토리에 있다. 따라서 다음 명령을 입력해야 한다.

sudo cp ~ / Adafruit_MotorHAT / Adafruit_MotorHAT_Motors.py /usr/local/lib/python3.6/dist-packages/Adafruit_MotorHAT-1.4.0-py3.6.egg/Adafruit_MotorHAT/Adafruit_MotorHAT_Motors.py

4) 메모리를 늘리기 위한 스왑 공간 만들기

(1) 다음 명령을 사용해 4G 크기 스왑 파일을 늘린다.

sudo fallocate -l 4G / var / swapfile    
sudo chmod 600 / var / swapfile
sudo mkswap / var / swapfile
sudo swapon / var / swapfile
sudo bash -c 'echo "/ var / swapfile swap swap defaults 0 0">> / etc / fstab'

 

마치며

현재까지 나온 스마트 RC카 중 성능이 매우 높은 편에 속하는 이 젯봇은 여러 가지 기능을 가지고 있지만 이 기능들을 활성화시키기 위해서는 많은 부분 플랫폼 준비와 설정들이 필요하다. 초보자들이 하기에는 어려운 형태의 스마트 RC카이지만 AI플랫폼, 이미지 분류, 객체 감지 쪽을 배우거나 개발 계획이 있으면 이 RC카 만큼의 좋은 교육자료와 완제품 형태는 없다고 여겨진다. 초기에는 어렵지만 여기에 나와있는 정보를 운용해서 개발을 진행한다면 어려움 없이 개발할 수 있을 것으로 생각된다. 
 

<자료제공: IC뱅큐>


관련기사

댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
0 / 400
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.