시스템최신기술(2020)
(본 과목은 전문가 초청 프로그램에 의해 (주) 자이트론 허성민 대표가 강의하는 과목입니다.)
1. 교과목 개요
ᄋ 최근 실제 도로에서 스스로 주행하는 자율주행 자동차와 자율주행 운반로봇이 언론에 자주 소개되면서 자율주행 기술에 대한 사람들의 관심이 크게 증가하고 있으며 기업들도 자율주행 기술에 많은 투자를 하고 개발인력 확보에 애쓰고 있다.
ᄋ 자율주행 자동차나 주행로봇을 구현하기 위해서는 머신러닝과 인공지능 같은 응용단의 소프트웨어뿐만 아니라 고성능 프로세서와 센서모듈, 모터제어장치 등의 다양한 하드웨어를 제대로 관리하면서 제품 전체의 통합운영을 관장하는 시스템 소프트웨어 기술도 함께 필요하다.
ᄋ 본 강좌에서는 자율주행 자동차 위에 시스템 소프트웨어를 구축하고, 하드웨어 장치들과 그와 연관된 소프트웨어 모듈을 함께 구동시키고, 궁극적으로는 차량이 스스로 주행하게끔 만드는 실습을 통해 자율주행 자동차의 구현에 있어서 어떤 시스템 기술이 어떤 방식으로 이용되는지 직접 경험한다.
ᄋ 본 강좌에서는 실제 자율주행 자동차에서 사용하는 것과 동일한 종류의 다양한 센서와 구동장치를 장착한 1/10 크기의 모형차를 실습플랫폼으로 활용한다. 모형차에는 리눅스 운영체제와 ROS가 탑재되며 카메라, 관성센서 등의 센싱 디바이스와 모터제어기 등의 구동장치가 장착된다.
ᄋ ROS(Robot OS)는 오픈소스로 만들어진 로봇을 위한 미들웨어로, 자율주행 제품에 탑재되는 시스템 소프트웨어의 중요 구성요소이다. ROS는 단순한 관절로봇뿐만 아니라 자율주행 자동차와 운반로봇, 순찰로봇, 안내로봇, 배송로봇 등 다양한 제품군으로 적용범위를 빠르게 넓혀가고 있는 대표적인 오픈소스 미들웨어이다.
ᄋ 본 강좌를 통해 ROS의 기능을 학습하고 실습하면서, ROS를 이용하여 센서로부터 센싱데이터를 어떻게 수집하는지, 이를 다른 곳으로 어떻게 전달하는지, 그리고 최종적으로 핸들과 엑셀과 같은 구동장치로 어떻게 제어명령을 보내 차량을 원하는 방향으로 주행하게 만드는지에 대해서 학습하고 경험한다.
ᄋ 점점 많은 자율주행 자동차와 로봇에 ROS가 탑재되고 있기 때문에 ROS를 사례로 하여 시스템 소프트웨어에 대해 학습하고 이를 활용할 수 있는 능력을 익히고 경험하면 본 강좌의 수강생들이 새로운 자율주행차나 주행로봇을 개발하는데 망설임과 두려움 없이 선뜻 나설 수 있는 자신감을 갖게 될 것으로 기대한다.
ᄋ 수업은 강의와 실습, 그리고 소규모 프로젝트를 수행하는 방식으로 진행된다.
ᄋ 이 수업은 소프트웨어 학부의 전공자 뿐만 아니라 비전공자도 컴퓨터 프로그래밍의 기초 능력만 있으면 수업 내용을 소화할 수 있도록 구성되었다.
2. 수업 목표
ᄋ 자율주행 자동차의 하드웨어와 소프트웨어의 구조와 구성을 이해하고 인지-판단-제어로 이루어지는 자율주행 소프트웨어의 동작과정을 이해하고 실습을 통해 실제 구현과정을 경험한다.
ᄋ 하드웨어와 소프트웨어를 엮어서 제품 전체의 통합운영을 관장하는 시스템 소프트웨어 구성요소 중 하나인 ROS에 대해서 전반적으로 이해하고 자율주행 자동차 에서의 실제 활용을 경험한다.
ᄋ 자율주행 모형차가 스스로 주행하게끔 만드는 프로젝트 실습을 통해 자율주행 자동차의 구현에 있어서 어떤 시스템 기술이 어떤 방식으로 어떻게 이용되는지 직접 경험한다.
ᄋ 본 강좌를 성실히 수강한 학생들은 유사한 모형차를 가지고 진행되는 국민대학교 자율주행 경진대회에 출전하기를 강력히 추천한다. 본 강좌에서 배우고 익힌 것들을 복습하면서 충분히 활용하면, 또한 팀워크를 통해 조금 더 추가하고 발전시 킨다면 상위권 입상은 충분히 가능한 일이다.
3. 선수 학습 내용
ᄋ Python 프로그래밍 기초
ᄋ 리눅스 기본 명령어 활용 기초
4. 교과목 내용
ᄋ (Part 1)
- 자율주행차를 구성하고 있는 프로세서, 각종 센서, 모터제어기와 모터, 등의 하드웨어에 대해서 각각의 기능과 활용처를 살펴고 전체 자동차 시스템의 설계와 구동원리를 이해한다.
ᄋ (Part 2)
- 하드웨어 위에 탑재되는 시스템 소프트웨어에 대해 각각의 기능과 역할에 대해서 학습하고 실습을 통해 소프트웨어를 차곡차곡 쌓아 구축하는 과정을 경험한다. 센서 하드웨어가 획득한 센싱정보를 어떻게 알고리즘 코드 또는 인공 지능 코드로 전달할 수 있는지에 대해서 학습한다.
ᄋ (Part 3)
- 시스템 소프트웨어 중에서 ROS에 대해서 동작방식과 기능, 활용법에 대해 학 습하고 실습을 통해 프로그래밍 기법을 익히고 ROS에서 제공하는 각종 개발편의도구의 활용법을 학습한다.
ᄋ (Part 4)
- 앞서 배운 하드웨어 지식과 ROS 지식을 바탕으로, 자율주행 소프트웨어를 모듈 기반으로 설계하고 구현방안을 구체화하는 소프트웨어 아키텍처 설계작업을 진행한다. 그리고 이를 바탕으로, 실제 자율주행 차량를 구동시켜서 설계한대로 동작하는지 확인하고, 수정하고, 검증하고, 완성하는 시간을 갖는다.
5. 강의 일정
* 1주~4주는 원격 강의가 진행됨.
* 수강생은 ZOOM Live 강의를 들을 수 있도록, K-PUSH 앱을 통해 Q&A 진행할 수 있도록 준비 바람.
ㅇ (1주차-3/19) - ZOOM Live 강의, K-PUSH로 양방향 대화, Q&A
- 교과목 개요 소개
- 실습 플랫폼인 자율주행 모형자동차 소개
- 모형차 구조와 구성 부품 하나씩 살펴보기
- 모형차를 처음 기동하는 방법
ㅇ (2주차-3/26) - ZOOM Live 강의, K-PUSH로 양방향 대화, Q&A
- 자율주행 자동차 하드웨어 구조
- 센서와 구동장치 기초 (카메라, IMU, 초음파, 구동장치)
ㅇ (3주차-4/02) - ZOOM Live 강의, K-PUSH로 양방향 대화, Q&A
- 시스템 소프트웨어 기초 (리눅스, ROS)
- 미들웨어 기초 (OpenCV, Tensorflow, Pytorch, CUDA)
ㅇ (4주차-4/09) - ZOOM Live 강의, K-PUSH로 양방향 대화, Q&A
- ROS 기초
- ROS 기본 명령어
- ROS Package & Nodes 프로그래밍
ㅇ (5주차-4/16)
- 실습을 위한 원격 접속환경 구축
- 프로세서 모듈 위에 ROS & ROS Package 탑재
- ROS 프로그래밍 실습
- ROS 원격연결 프로그래밍 실습
ㅇ (6주차-4/23)
- ROS 도구 기초
- ROS Package 제작 실습
- (프로젝트 과제) 초음파센서를 위한 ROS Package 제작
ㅇ (7주차-4/30) - 4/30 석탄일 공휴일이므로 4/29에 진행 예정
- RVIZ 활용 기초
- (프로젝트 과제) RVIZ 기반으로 초음파센서/IMU센서/구동장치 뷰어 제작
ㅇ (8주차-5/07)
- 중간시험
- 프로젝트 평가 : RVIZ 뷰어 제작 결과물 평가
ㅇ (9주차-5/14)
- 라이다 기초
- 라이다 센싱정보를 이용한 주행제어 방법 소개
- 머신러닝 모델 적용 방법 소개
- (프로젝트 과제) 차량주행 시뮬레이터에서 라이다로 장애물 피해 주행하기
ㅇ (10주차-5/21)
- 라이다 기반 주행 프로젝트 진행상황 공유
- 사용한 알고리즘, 머신러닝 기법의 소개와 토론
ㅇ (11주차-5/28)
- 카메라 기반 영상처리 기초
- AR Tag 기초
- 카메라로 AR Tag 인식하고 정보 취득하는 기능 실습
ㅇ (12주차-6/04)
- 경주대회 코스와 평가 가이드라인 발표
- 블록으로 코스외벽과 장애물을 만들고 카메라와 초음파센서로 주행하는 방식
- 중간미션 실패시 시간추가 벌칙이 있고 짧은 시간 안에 완주하는 것이 목표
- 자율주행 소프트웨어 구조설계 실습
ㅇ (13주차-6/11)
- 진행상황과 이슈사항 발표 & 토론
- 자율주행 실습 및 개별지도
ㅇ (14주차-6/18)
- 진행상황과 이슈사항 발표 & 토론
- 자율주행 실습 및 개별지도
ㅇ (15주차-6/25)
- 기말시험
- 경주대회 진행과 평가 및 총정리
6. 실습 환경
ᄋ 1/10 크기 모형자동차 (리눅스 탑재)
ᄋ 리눅스와 윈도우가 설치된 PC 또는 노트북
ᄋ 모형자동차 전용 주행트랙 (자율주행 스튜디오)
ᄋ 일반 주행트랙 (강의동 복도)
참고