여기 옵션 내용을 확인해보면.... 우선 속도타입에 마우스 오버 하면.. 확인가능한 정보...
속도 측면에서 볼때... 최고로 빠른 속도를 지원하는 모델을 선택하려면 해당 옵션에서 UHS-II(U3) > UHS-I(U3) > UHS-I(U1) 순이다..
그러나 검색해보면 알겠지만... 현재 UHS-II(U3) 속도를 지원하는 최고 용량은 256Gb, UHS-I(U3), UHS-I(U1) 속도를 지원 하는 최고 용량은 1Tb 이다.
두번째 옵션인 영상 쓰기 속도 옵션을 살펴보면...
위 내용을 보면 쉽게 이해가 가능하다. V90 에 가까울수록... 쓰기속도가 빠름을 확인할 수 있다.
다음 옵션을 저장방식...은...
즉... SLC > MLC > TLC 순으로 더 좋지만.. 그만큼 가격이 상승하게 된다. 그러나.. 옵션에 SLC 옵션이 없다는것을 보면... Micro SD 를 SLC 방식으로 제작하기 힘들다는것이 예상된다.
검색해보면 MLC 저장방식으로 구매 가능한 최고 용량은 256G 이며 기본적으로 128G 모델이 보편적이며 TLC 방식이 주류를 이루는것이 확인가능하다...
마지막 옵션 고사양 앱 구동 옵션을 살펴보자.
위 내용을 확인해보면... 고사양 앱 구동 옵션은 A2 > A1 순이다...
최근 프로젝트를 진행 하면서 구입한 메모리와 실습용으로 제공받은 메모리를 비교해보면...
실습용으로 제공받은 메모리는 UHS-I(U1)이며 프로젝트용으로 구매한 메모리는 UHS-I(U3) 로 프로젝트용으로 구매한 메모리의 속도가 빠름을 확인할수 있으며 제공된 읽기 쓰기 속도를 비교해도 실습용은 쓰기속도는 제공되지 않으며 읽기속도 95MB/s 프로젝트용은 읽기속도 170MB/s, 쓰기속도 90MB/s 로 속도차이가 많이 난다.. 또한 프로젝트용은 고사양앱구동(A2) 옵션을 만족한다.
같은 작업을 해도 읽기 쓰기 속도차이로 차이가 2배 이상 생길 가능성이 많다.
마지막으로 최근 구매한 메모리의 사양을 확인해보며 비교를 마무리 하겠다.
비교해보면 프로젝트용으로 구매 했던 메모리와 읽기 속도는 비슷 하며 쓰기속도는 더 빠르다.. UHS-I(U3) 만으로도 속도가 빠름을 확인할수 있으며. 고사양앱구동(A2)를 만족하기 때문에... 한동은... 몇년???? 사용하는데 답답하지 않을것 같다...
해당 젯본의 경우 Jetbot expansion board 라는 jetson nano 와 연결되며 배터리팩과 OLED 상태 표시창, 전원버튼, 충전케이블 연결 아탑터로 구성되어 있으며 뒷면엔 포터모듈과의 연결포트를 지원해준다. 즉 jetson nano 가 ROS 를 구성하여 신호를 보낸다면 그 신호를 받아서 처리해주는 모듈이 바로 이 expansion board 이다. 여기서 내가 착각한 사실은... 배터리 팩이 그냥 우리가 일반적으로 일상에서 사용하는 AA 건전지 인줄알았던 것이다.. 그래서 젯봇을 조립한뒤 호기롭게..... 다이소에서 3000원에 20개나 들어있는 AA 건전지를 구매하였고.. 베터리 슬롯에 넣는순간 그 허전한 공간이란..... 다시 한번 확인해보니..
사용하는 베터리는 18650 베터리 이며... 작은 글씨로... (Not.... Included).... 젝힐.... ㅡ.ㅡ;;;;
찾아보니 해당 베터리는 여러 용도로 사용되는 충전 베터리 였던... (가깝게는 전자담배에서 소형 플래시에서부터 크게는 병렬, 직렬 연결해서 DIY 배터리 팩을 제작)
베터리를 급하게 구매한뒤에... 연결후 충전이 잘 되고 있는지 확인하고 싶었다..
앞에서 언급했듯 expansion board에는 OLED Display 가 연결되어서 젯봇의 상태를 표시해준다.
기본적으로는 디스크 사용량, 메모리 사용량, 네트워크 사용유무와 ip 값이다. 이 정보를 바탕으로 현재 jetbot에 여유 메모리 상태와 젯봇을 외부에서 연결없이 ip를 확인하여 Jupyter Lab에 연결하여 코드를 수정, 실행할 수 있는 것이다.
Jetson Nano Developer Kit 의 기본 jatpack은 21년 12월 7일 이 글을 남기는날 기준으로 jetpack 4.6 이며
sd카드 이미지를 다운로드 받아서 sd카드에 복사한뒤 처음 jetson nano를 실행시키면 환경설정 단계를 거쳐서 기본 언어 시간대등을 설정할수 있다.
그러나 jetbot SD 이미지를 다운로드 받으면 jetbot 제조사별로 틀리며 같은 제조사의 경우에도 jetbot 종류에 따라서 jetpack 버전에서부터 내부 샘플파일등이 다르게 설정되어 있다.
또한 제조사에 따라 기본언어와 기본키보드 자판 설정등이 영어, 중국어 등으로 설정되어있어서 한근자판을 사용하기 위해서는 한글 팩을 설치한뒤에 한글자판 설정작업을 해 주어야 한다.
제일 처음 해야할 일은 언어팩 설치 작업이다.
시스템 설정에서 Language Support 항목을 들어가면 처음 항목에 접근했을때 "The Language support is not installed completely" 라는 팝업창이 뜬다. install 버튼을 눌러 마무리 해주자..
jetson nano 기본 팩을 설치 했을 경우 처음 환경설정에서 입력한 비밀번호를 입력하면 된다.. 대부분 jetbot의 경우 ID, PW 모두 jetbot 이다.. jetbot 모델중 http://www.yahboom.net/home 사에서 나오는 제품의 경우 yahboom 이다. 본인의 초기 비밀번호는 검색해보면 다 나온다. 외우기 힘들다면 설정에서 비밀번호를 변경해주기 바란다.
하지만 jetbot용 jetpack 에는 Jupyter Lab 이 기본 설정되어 있어서 ip번호를 브라우저에서 입력시 동일한 비번을 입력하기 때문에.. jetbot의 기본 비빌번호를 외우는것을 추천한다.
초기 Language support 설치작업이 끝나는데 시간이 살짝 걸리니... 잠시 컵휘 한잔... 여유가 생긴다...
설치가 완료 되었으면 Install / Remove Languages 버튼을 누르면 설치되어있는 언어와 설치가능한 언어 리스트를 확인할수 있다.. K로 시작되는 항목에서 Korean을 찾아서 설치 체크항목을 체크해준뒤 Apply 버튼을 눌러서 한글 언어팩을 설치해준다.
설치가 완료 되었으면... Reboot Gogo....!!!
재부팅후
Terminal 창을 띄운뒤 ibus-setup 를 실행시켜 준다.
실행하면 IBus Perferences 창이 뜬다. 상단탭에서 Input Method 항목으로 이동한뒤 우측에 Add 버튼을 누르면
Select an input method 창이 뜨면서 설치가능한 자판리스트가 뜬다. 창 하단에 ... (More) 버튼을 눌러 kor을 검색하면 korean 을 찾을수 있으며 선택하면 아래와 같이 한글 자판 설치가 가능하다.
Add 버튼을 누르면 Ibus Preferences 항목에서 언어가 설치 되어있음을 확인할수 있다. 필요한 언어 자판을 다 설치 햇으면 close 버튼을 눌러 해당 페이지를 닫아준다.
마지막으로 화면 우측 상단을 보면
현재 선택된 키보드 자판 언어를 확인할 수 있는 메뉴를 클릭한뒤 Text Entry Settings 버튼을 눌러서 최종적으로 자판 추가작업을 해줍니다.
Text Entry 창 우측 하단에 + 버튼을 누른뒤 설치하고싶은 자판을 검색후 Add 버튼을 눌러 추가 해주면 된다.
우리가 설치할 자판은 korea (Hangul)(IBus) 이니 해당 자판을 추가해주면 된다.
Jetson Nano 를 이용한 Object Detection으로 당연히 YOLO를 떠올렸으며 구글링을 통해서 먼저 이길을 가시면서 친절하게 방법과 입력코드를 남겨주신대로 진행을 해봤으나 YOLO신의 버림을 받아서인지... 샘플 이미지를 통한 결과는 정상적으로 출력이 되지만 pi camera를 이용한 실시간 Detection 은 실패를 하였다. (이상하게 카메라 영상을 보여주는 창이 온통 초록색으로 꽉찬 상황 ㅠ.ㅠ)
그래서 다른 방법이 없는지 찾게 되었고 YOLO v5 를 시도했던 시간의 거의 1/3 정도만으로 생각보다 훌륭한 결과를 얻을수 있었던 내용을 공유해본다.
해당내용의 출처는 NVIDIA Developer 채널에서 아래 주소의 Youtube 영상을 시작으로 얻을수 있었으며
마지막으로.. text editer 를 열어서 my-detection.py 파일명을 home 에 save as 한뒤.... 다음 코드를 입력 저장한다..
import jetson.inference
import jetson.utils
net = jetson.inference.detectNet("ssd-mobilenet-v2", threshold=0.5)
camera = jetson.utils.videoSource("csi://0") # '/dev/video0' for V4L2
display = jetson.utils.videoOutput("display://0") # 'my_video.mp4' for file
while display.IsStreaming():
img = camera.Capture()
detections = net.Detect(img)
display.Render(img)
display.SetStatus("Object Detection | Network {:.0f} FPS".format(net.GetNetworkFPS()))
저장했으면... 마지막 리얼타임 디텍팅이 되는지 테스트 해보자...
만약을 위해.. 파일도 공유 해본다..
위 코드의 경우... CSI 카메라를 이용할때적용되는 코드이다.. USB카메라의 경우(V4L2) 코드를 수정해주자...
우선 V4L2 드라이버를 설치해주고....
$ sudo apt-get install v4l-utils
연결된 USB 카메라의 디바이스 번호를 확인하는 방법은....
$ v4l2-ctl --list-devices
하여 디바이스 번호를 확인하자...
아래 코드는 같이 스터디를 진행한 오휴민님 께서 수정 정리해주신 코드다.. 깔끔하다...
import jetson.inference
import jetson.utils
net = jetson.inference.detectNet("ssd-mobilenet-v2", threshold=0.5)
camera = jetson.utils.gstCamera(1280, 720, "/dev/video0") # USB camera ONLY
# camera = jetson.utils.gstCamera(1280, 720, "/dev/video1") # CSI camera + USB camera
#camera = jetson.utils.videoSource("csi://0") # CSI camera ONLY
display = jetson.utils.glDisplay() # USB camera ONLY
#display = jetson.utils.videoOutput("display://0") # CSI camera ONLY
### USB camera ###
while display.IsOpen():
img, width, height = camera.CaptureRGBA()
detections = net.Detect(img, width, height)
display.RenderOnce(img, width, height)
display.SetTitle("Object Detection | Network {:.0f} FPS".format(net.GetNetworkFPS()))
### CSI camera ###
#while display.IsStreaming():
# img = camera.Capture()
# detections = net.Detect(img)
# display.Render(img)
# display.SetStatus("Object Detection | Network {:.0f} FPS".format(net.GetNetworkFPS()))
Jetson Nano 시작준비를 하면서 느낀점은 기본적으로 컴퓨터의 메인보드에 해당하는 모듈에서 CPU와 GPU, 메모리 등을 업그레이드 하는 방법은 상위 모델인 TX2 모듈 이상을 이용하는 방법이다. 사용자 측에서 성능을 올릴수 있는 방법은 SSD에 해당하는 SD카드의 읽기 쓰기 속도를 확인하고 빠른 제품을 선택하는것이 유리하다. 제품을 검색할때 속도타입에서 UHS-I(U3), UHS-II(U3) 옵션을 선택한뒤 나오는 제품들을 살펴보면 읽기 쓰기 속도가 확인가능하며 고사양앱구동(A1), 고사양앱구동(A2) 옵션이 포함되어있는지를 꼭 확인하는것이 좋다.