본문 바로가기

JetBot

젯봇 입양기 3

젯봇의 기능 중 가장 깜찍 귀여운 기능은 Object Following 인 것 같습니다.

(참고로 이 글은 젯봇입양기2 의 다음글입니다.)

 

사실 라이다도 없는 처지라서 자율주행이라고 하는 기능을 가진 처지에서 카메라로 할 수 있는 가장 팬시한 기능은 당연히 당연히 Object Detection 을 활용한 something 이 될 수 밖에요.

(하지만 라이다는 달면 되는데.. 요넘이 분석이 끝난 후에 차근차근 하고 싶은 일 중 하나가 되겠습니다..)

 

cocodataset

 

그런데 갑자기 분위기 TensorFlow object detection API & TensorRT 되겠습니다.

그렇죠. COCO dataset 과 Tensorflow object detection API 로 예쁘게 만든 SSD mobilenet v2 네트워크 모델의

훈련된 결과물인 pb 파일이 있었을 것이고,

그것을 uff (universial file format) 파일로 변환시켰을 것이고,

또 그것을 TensorRT 엔진으로 serialize 시킨 엔진파일을 보관해둔 모양입니다.

 

참고하세요.

이 엔진 파일에 대하여 관련된 얘기를 아직 들은 적이 없거나 아니면 저를 만나서 Object Detection 과 TensorRT 에 대한 장황한 설명을 들은 적이 없으시다면 위에 제가 써놓은 보라색 문장이 무슨 말인가 이해가 안가실수도 있습니다. 

사실 이것은 TensorRT 에 대한 이야기이고, Nvidia GPU 제품 쓰는 분들에게는 워낙 중요해서 이에 대해선 언젠가는 포스팅을 하겠습니다.

 

하여간 젯봇 위키 사이트 (링크) 에서 아래의 캡쳐화면에서 노란색으로 표시한 링크에서 그 엔진파일을 제공해주고 있습니다.

이 링크에서 제공하는 엔진파일의 정체는 사실 파워풀하다.

(* 2019/10/30 이 테스트에 꼭 필요한 파일 다운받는 절차가 복잡해서 여기에 링크를 올립니다.)

(ssd모델파일 받기 -> 여기)

 

다운을 받고나서 노트북 폴더에 이와 같이 다운받은 ssd_mobilenet_v2_coco.engine 파일이 보이도록합니다.

ssd_mobilenet_v2_coco.engine

이 파일이 있으면 우리는 파이썬 상황임에도 불구하고 왠만큼 빠른 속도로 Object Detection 을 동작시킬 수 있습니다.

여기서 53번은 무엇일까요?

여기서 53번은 무엇일까요?

COCO 라벨 을 살펴보니 사과인듯 합니다.

감지가 되면 바운더리 박싱도 해줄 수 있습니다.

단 소스가 좀 지저분하고 길어서 테스트를 하기가 어렵더군요.

GUI 가 실로 Unfriendly 해요..

하지만 길고 긴 소스 중 이 부분이 킬 포인트인듯 합니다.

여기서 set_motor 는 robot 클래스 (링크) 의 함수인데 정의가 이러해요.

스티어링이 안되는 젯봇의 좌우 이동을 조정하는 유일비책

 

즉, 내가 원하는 사물을 감지했을 때는 그 쪽 방향으로 센터를 맞춰 모터 방향을 바꾸겠다는 깜찍한 취지의 소스가 되겠다는것이죠.

 

나름대로 소스를 정리해서 테스트를 했습니다.

아직 마음엔 안들지만 일단은 동작을 보려구 정리한 것인데 아둥바둥 사과를 따라다니길래 일단 대충 만족했습니다.

(깜찍한 기능이라고 시작했는데 실제 보면 매우 아둥바둥의 느낌 ㅠㅠ )

 

https://youtu.be/LffQBLhCGlE

 

다만 테스트 자체가 너무 늦은 시간이라 가족들의 시끄럽다는 항의 때문에 촬영은 한번밖에 못했어요.

아마 인자값들을 좀 조정해서 following 을 더 부드럽게 할 수 는 있을 것 같네요.

 

다음은 젯봇입양기 4 이고 road following 이라고 알고 보니 사실 엄청 기대가 되는 재미난 작업인것 같아요.

path trajectory 라든지 PIL 이라든지 resnet 을 사용한

딥러닝 베이스 steering 제어를 할 수 있겠는데요.

 

불행히도 금일부터는 다시 터틀봇 삽질을 해야해서 금요일에 다시 시작할 것 같아요.

 

(*10/30 추가

가장 기본 테스트를 하려면 유닛 별 기능을 보는 것이 좋습니다.

하여 충돌 회피 부분을 막고 컵을 디텍션하여 따라갈 수 있도록 소스를 일부 수정했습니다.

그리고 좁은 실내에서 상황 판단이 용이하도록 속도도 빠르지 않도록 합니다.

스피드와 턴 게인을 작게 해서 유닛 테스트를 한다.

주변에서 구할수 있는 가장 흔한 사물인 컵을 준비해서 디텍션을 해보면 클래스 번호가 47이 나옵니다.

컵을 잘 따라가는지 테스트가 쉽게 가능해집니다. 아래 영상을 참조하세요.

https://www.youtube.com/watch?v=YWoem5RgSBY

다음은 젯봇입양기4 으로 이어집니다.

'JetBot' 카테고리의 다른 글

젯봇 입양기 4  (0) 2019.11.03
젯봇의 신체 구조가 궁금해졌다.  (0) 2019.10.29
젯봇 입양기 2.  (0) 2019.09.15
젯봇 입양기 1.  (0) 2019.09.15