파이썬으로 구현하는 AI 자율주행자동차 with 아두이노 자동차 만들기 저자 장문철 출판앤서북 출시 2023.11.10.
#앤서 북#장·뭉쵸루#파이썬에서#구현하는#AI자동 운전 자동차#with가 도우이노#자동 만들기#리뷰#서평의 책은 서문에서도 나오고 있듯이 인공 지능을 활용한 자동 운전 자동차의 제작에 대해서 말했다.아도우이노을 이용하고 모터를 구동하고 카메라를 이용하고 영상을 촬영한다.OLED를 통해서 현재의 상태를 디스플레이하는 기능을 추가한다.또 Wi-Fi를 이용하고 컴퓨터와 통신을 한다.PC에서는 아도우이노에서 전달된 영상 데이터를 이용하고 방향을 계산한다.제대로 된 경로를 찾기 때문에 영상 처리, 영상 인식을 수행하고, 그 결과에 의해서 방향 전환을 위한 명령어를 아도우이노에 전달한다.아도우이노는 wifi를 통해서 수신한 이 명령을 이용하고 경로를 찾기 위한 방향 전환을 수행한다.이 모든 것을 하나의 프로젝트로서 구현하고 담은 것이 이 책의 내용이다.조금씩 흉내내다 보면 어느새 바닥의 트랙을 따라서 자동 운전하고 있는 자동차를 볼 수 있다.실제로 기본 이론을 모르는 상태에서는 코드 조각 하나하나를 이해하기는 어려울지도 모른다.그러나 책의 제안대로 모방하면 이 책에서 다루는 프로젝트 전체적인 그림을 그릴 수 있다.코드의 상세 배경 이론을 알기 어렵더라도 각 코드가 의미하는 바가 무엇인지는 라인 단위의 설명을 통해서 알게 된다.더 자세한 이론적인 내용을 원한다면, 구글과 채팅 GPT를 통해서 관련 지식을 추가로 검색하고 얻는 것도 있을 것이다.실습 없이 눈으로만 보던 코드는 알아듣지 못하지만 직접 타이핑하고 오자와 실수를 복구하고 구현된 코드가 눈앞에서 동작하는 것을 체험하게 되면 더 강렬한 이해와 지식 습득에 이어지는 것으로 이것보다 좋은 일은 없을 것 같다.
이전 이미지 다음 이미지
이전 이미지 다음 이미지
01. 차 출발선 02.개발 환경 구성 및 파이썬 기초 문법을 익힌다03. OpenCV를 활용한 자동차 조종사04. 인공 지능 자동 운전 만들기05. OpenCV를 자동 운전 만들기06. 인공 지능 객체를 검출하고 자동 운전사 07.아 도우이노 자동차 개발 환경 구성08. 아는 도우이노 자동차 기능 시험09. Web서버에서 조종하는 자동 만들기
이전 이미지 다음 이미지자동 운전 차를 실현하기 위한 부품이 책에서 소개되고 있습니다.모터, 카메라, OLED디스플레이, 충전용 배터리, 그리고 Wi-Fi가 탑재된 ESP32보드입니다.함께 제공되는 드라이버, 너트, 볼트로 자동차 빵빵한 역할을 하는 확장 보드에 바퀴와 가이드 등 각 부품을 체결하고 조립할 수 있습니다.매직 테이프로 별명이 붙은 매직 테이프는 배터리를 장착하는 용도로 사용됩니다.이전 이미지 다음 이미지자동차의 보디의 역할을 하는 확장 보드와 ESP32캠페인 보드의 형태이다.확장 보드는 배터리 충전 회로와 ON/OFF스위치, 모터를 체결하는 소켓과 배터리가 연결되는 소켓을 장착했다.OLED를 장착할 수 있는 4pin소켓과 상태를 표시하는 LED및 자동 운전 차가 동작하기 위한 필수 전자기 부품이 탑재되고 있다.캠 보드는 카메라와 인터페이스를 담당하고 있으며, 안테나와 2.4G Wifi모듈, BT모듈이 함께 장착되어 있다.책에서는 다루지 않지만 필요하다면 Bluetooth를 이용하는 것도 있을 것 같다.아 도우이노 코드는 이 보드에서 동작하는 것으로 판단된다.이전 이미지 다음 이미지아도우이노 IDE을 PC에 설치하고 IDE내부에서 사용되는 ESP32확장 모듈을 계속 설치한다.또 CH340드라이버도 설치하고 USB2Serial통신도 연다.한발짝도 낭비할 틈도 없이 책에서 가이드하고대로 모방하면 개발 환경이 곧 완성된다.실제로 개발할 때 환경 설정처럼 어려운 것은 없다.이 개발 환경만 제대로 세트 하면 나머지는 그대로 손가락 닿는 대로 코딩하고 테스트만 하면 완성이다.아두이노 IDE를 PC에 설치하고 IDE 내부에서 사용되는 ESP32 확장 모듈을 계속 설치한다. 또 CH340 드라이버도 설치해 USB2 Serial 통신도 연다. 한 발짝도 허비할 틈 없이 책에서 가이드하는 대로 따라하면 개발 환경이 금방 완성된다. 실제로 개발할 때 환경설정만큼 어려운 것은 없다. 이 개발 환경만 제대로 세팅되면 나머지는 그대로 손가락이 가는 대로 코딩하고 테스트만 하면 완성되는 것이다.참고로 CH340 드라이버는 첫 번째 시도에서 실패했다. 이후 성공했는데 그 이유는 보드를 PC와 연결한 뒤 드라이버를 설치해야 했다. 보드를 USB로 연결하지 않고 운전자만 내려받아 설치하면 실패하게 된다. 반드시 PC와 보드를 USB로 연결한 뒤 설치해야 운전자 설치가 성공한다.보드에 설치된 LED를 제어해 보았다. 너무 밝다….이것···아두이노 IED에서 몇 가지 설정을 마친 후 모터를 돌려봤다. 아직 자동차 조립을 완성한 건 아니고 커넥터에 모터와 바퀴만 달아 연결해봤다. 모터 구동을 확인하고···아두이노 IED에서 몇 가지 설정을 마친 후 모터를 돌려봤다. 아직 자동차 조립을 완성한 건 아니고 커넥터에 모터와 바퀴만 달아 연결해봤다. 모터 구동을 확인하고···모터를 돌려봤다. USB 전원을 이용해 동작시킬 경우 모터는 2~3개까지 동작한다. 4개를 모두 작동시키려면 배터리를 연결하면 된다.ESP32에서 OLED를 동작시키기 위한 모듈을 추가 설치하고 ‘Hello’를 표시해 본다. 그 후, EEPROM 제어 로직도 추가한다.ESP32에서 OLED를 동작시키기 위한 모듈을 추가 설치하고 ‘Hello’를 표시해 본다. 그 후, EEPROM 제어 로직도 추가한다.각 부품이 정상 동작하는 것을 확인한 후 제공된 브라켓을 이용해 모터와 바퀴를 확장 보드에 체결했다. 배터리도 함께 체결한 뒤 USB를 이용해 배터리 충전을 진행했다. 후면, 윗면(앞), 윗면(뒤)을 눌러 보았다. 카메라 방향(빨간 점)이 진행 방향이 된다.컴퓨터에서 모바일 핫 스팟을 달다.그리고, 아 도우이노 자동차로 무선 인터넷 로직을 추가한 뒤 파워를 켜면 PC에서 받은 IP주소를 표시한다.이렇게 되면 컴퓨터와 아 도우이노 자동차 간 통신이 완성하는 것이다.PC상에서 Wi-Fi를 이용하고 무선으로 조종하고 보는 이론을 추가했다.아 도우이노 소스 코드에 인라인 함수로서 포함되는 HTML과 자바 스크립트를 이용한다.아래 화면처럼 HTML과 javascript를 이용하여 웹 페이지를 만들고 단추 기능을 추가했다.각각의 버튼은 아도우이노소ー스코ー도의 각 동작 함수와 연결되어 자동차에 장착된 모터에 신호를 주는 바퀴가 굴러가게 된다.이어 카메라로부터 영상 데이터의 stream을 받아 PC화면에 뿌려로직도 추가했다.이것만으로 무선으로 자동차를 움직일 수 있게 되는 수준이다.그리고 간혹 HTML로 구현된 버튼에 표시되는 text가 깨지는데, title 태그의 meta 항목에 아래 내용을 추가하면 버튼 text가 정상 영문/한글로 출력되므로 참고하기 바란다. charset = “UTF-8″<!–앞부분 생략–><title>파이썬으로 구현하는 AI자동 운전 자동차 with가 도우이노 자동 만들기</title><metaname=”viewport”content=”width=device-width, initial-scale=1″, charset=”UTF-8″><!–뒷부분 생략–><!–앞부분 생략–><title>파이썬으로 구현하는 AI자동 운전 자동차 with가 도우이노 자동 만들기</title><metaname=”viewport”content=”width=device-width, initial-scale=1″, charset=”UTF-8″><!–뒷부분 생략–><!– 앞부분 생략–> <title> 파이썬으로 구현하는 AI 자율주행자동차 with 아두이노 자동차 만들기 </title> <metaname=”viewport” content=”width=device-width, initial-scale=1″, charset=”UTF-8″><!–뒷부분 생략–><!– 앞부분 생략–> <title> 파이썬으로 구현하는 AI 자율주행자동차 with 아두이노 자동차 만들기 </title> <metaname=”viewport” content=”width=device-width, initial-scale=1″, charset=”UTF-8″><!–뒷부분 생략–>이제는 완성된 자동차에 파이썬을 이용하고 제어하는 부분이다.파이썬에서 자동차와 연결한 뒤 영상 데이터를 받는 부분이다.print문을 이용한 것이니 그냥”데이터”가 출력되는 것이 확인했다.OpenCV모듈을 이용하고 화상을 출력하면 제대로 된 데이터 스트림을 확인할 수 있다.본 리뷰어는 제공된 코스를 표시하는 도안을 프린트하지 않고 바닥에 검정 테이프를 붙여 트랙을 만들어 보았다.OpenCV에서 수신한 화상 데이터를 캡쳐할 크기를 조정했다.wifi를 통해서 자동차를 제어할 때 버튼의 역할을 하는 자판 입력을 코딩하고, 파이썬 로직을 통해서 키보드로 자동차를 조종할 수 있었다.그는 이후 이어인공 지능 영상 인식 때문에 데이터를 취득하는 단계를 수행했다.OpenCV에서 수신한 화상 데이터를 캡쳐해 사이즈를 조정해 보았다. 와이파이를 통해 자동차를 제어할 때 버튼 역할을 하는 키보드 입력을 코딩하여 파이썬 로직을 통해 키보드로 자동차를 조종할 수 있었다. 아울러 이후 이어지는 인공지능 영상 인식을 위해 데이터를 취득하는 단계를 수행했다.화상 데이터 취득 시 리사이즈 화상을 224×224로 했을 이유가 있었지만 바로 기계 학습를 무료로 이용할 수 있는 크기였다.앞으로 티ー챠불마싱을 이용하고 이미지 인식을 수행하고 보자.구글·티 차 불·머신·사이트(https://teachablemachine.withgoogle.com/)Teachable Machine)은 구글에서 만든 웹 기반의 노 코드 인공 지능 학습 도구이다.이미지, 사운드, 자세를 인식하게 컴퓨터를 학습시키고 사이트, 앱 등에 쓴다”기계 학습”모델을 쉽고 신속하게 만들 수 있다.전문 지식과 정보화 능력이 필요 없기 때문에, 초등 학생도 만들 수 있게 이해하기 쉽다는 점이 가장 큰 장점이다.티ー챠불마싱은은 크게 3단계로 이루어지는데, 1)처음의 “모아”단계에서는 예시를 수집하고 컴퓨터가 학습하는 것을 원하는 클래스 또는 카테고리에 그룹화한다.이 책에서는 방향별로 취득한 화상 데이터의 그룹이 카테고리이다.2)그 후는 “학습시킨다”것에서 모델을 학습시킨다.책에서는 그룹별로 분류된 화상 데이터를 업로드하고 학습한다.데이터의 양에 의해서 시간이 좀 걸린다.레 뷰어는 직진 그룹에 약 5000매의 화상을 올린 결과 20분 이상 걸렸다.3)마지막으로 “변환”에서 프로젝트에 대한 모델을 내놓으면 모델을 다운로드하고 파이 손 동작할 때마다 불러내서 인공 지능 인식 동작에 쓸 수 있다.티처블 머신에서 학습된 데이터를 파이썬 코드로 사용하기 위해서는 keras 모듈을 설치해야 한다.학습 데이터를 이용하고 자동차가 주행 중의 방향을 인식하고 결과에 의해서 적절한 방향으로 가 도우이노 모터 제어가 이루어지는 것을 확인할 수 있다.스트림에 전달되는 이미지 데이터를 인식하고 학습한 데이터와 비교하고 정확도가 얼마나 될지 비율을 얻어낼 수 있고, 정해진 값보다 큰지 작은 시간을 산정하고 논리를 수행시킬 수 있었다.본 레 뷰어는 직진, 우회전, 좌회전 중 데이터가 가장 부족한 괴물의 적중률이 떨어지는 것으로 확인했다.학습 데이터를 보완하고 다시 학습시키면 부족한 부분에 대한 적중률을 높일 수 있겠다.나중에 하고 보지 않고.학습 데이터를 이용해 자동차가 주행 중 방향을 인식하고 결과에 따라 적절한 방향으로 아두이노 모터의 제어가 이뤄지는 것을 확인할 수 있었다. 스트림에 전달되는 이미지 데이터를 인식하여 학습한 데이터와 비교하여 정확도가 얼마나 되는지 비율을 끌어낼 수 있었고, 정해진 값보다 크거나 작을 때를 산정하여 로직을 수행하게 할 수 있었다. 본 리뷰어는 직진, 우회전, 좌회전 중 데이터가 가장 부족한 우회전 적중률이 떨어지는 것을 확인할 수 있었다. 학습 데이터를 보완하여 다시 학습시키면 부족한 부분에 대한 적중률을 높일 수 있을 것 같다. 나중에 해봐야지.학습 데이터를 이용하고 자동차가 주행 중의 방향을 인식하고 결과에 의해서 적절한 방향으로 가 도우이노 모터 제어가 이루어지는 것을 확인할 수 있다.스트림에 전달되는 이미지 데이터를 인식하고 학습한 데이터와 비교하고 정확도가 얼마나 될지 비율을 얻어낼 수 있고, 정해진 값보다 큰지 작은 시간을 산정하고 논리를 수행시킬 수 있었다.본 레 뷰어는 직진, 우회전, 좌회전 중 데이터가 가장 부족한 괴물의 적중률이 떨어지는 것으로 확인했다.학습 데이터를 보완하고 다시 학습시키면 부족한 부분에 대한 적중률을 높일 수 있겠다.나중에 하고 보지 않고.이후 이미지가 진화를 이용하고 중심점을 찾아내면서 바닥과 검은 색 테이프를 구분한 threshold설정이 쉽지 않았다.두 값화하는 부분에서 트럭과 트럭에서는 없는 부분을 구분하는 부분은 테스트 환경에 문제가 있고 결과가 그다지 훌륭하지 않았다.추가로 방법을 강구하고 보지 않고.아마 별로 어렵지 않을 것으로 예상된다.이 진화를 수행한 뒤 트랙의 중심점을 찾아 화면에 위치를 디스플레이해봤다. 예시로 든 화면은 나름대로 중심을 잘 잡은 것처럼 보였지만 실제 자율주행에서는 위에서 언급했듯이 이진화 실패로 인해 결과가 썩 좋지는 않았다. 아쉬운 부분이다.이후 잇달객체 검출은 추가로 진행돼야 할 부분이다.파이 토치 라이브러리와 영상 처리를 위한 yolo5라이브러리를 설치해야 하지만 우선 기존에 설치된 opencv는 uninstall한 뒤에 설치해야 한다.파이 토치와 yolo5가 설치 완료되면 opencv를 다시 설치한다.자동차가 트랙을 주행 중에 각 표시에 처했을 때 인식을 하고 객체로서 인식하고 각 객체에 부여된 라벨링에 따르고 로봇이 작동하도록 프로그래밍하는 단계다.yolo학습을 위해서는 컴퓨터보다는 구글 고 랩을 이용하는 방법도 소개한다.PC의 성능이 떨어질 경우 실행이 못하거나 시간이 오래 걸릴 가능성이 있는 부분을 보완하는 설명이 추가되고 있다.다양한 방법으로 자동 운전을 실현하고 본 결과, 흉내내기는 매우 간단했다.도중에 어려운 내용이 나왔지만, 코드를 라인 단위로 설명하면서 독자를 안내하느라 잠시 정신이 되는 일이 있도 실현되어 동작하는 자동차를 보면서”아!”이것이 할 수 있어”라는 생각을 뿌리치지 못 했다.좀 더 관심을 가지고 사용된 논리와 모듈에 대해서 심화된 공부를 하면 적어도 전문가들이 이 분야를 말할 때에 늦지 않고 내용에 따라잡을 수 있을 것 같아, 큰 도움이 됐다.앞으로 나아갈 길이 멀어서 공부해야 할 많은 인공 지능 분야이지만, 전체 그림을 한번에 그리고 보는 좋은 기회가 된 것 같다.며칠 동안 검토를 위해서 책을 공부하던 시간이 짧게 느껴진다.재미있었다.본 검토는 엔트 서 북에서 교재의 제공을 받고 작성되었습니다.