목록공부/캡스톤 디자인 (22)
Broccoli's House
4회차 - (5) TORCS : SCR-패치 클라이언트 설정 클라이언트 - 클라이언트 : TORCS의 SCR-패치를 통해 서버가 열려있는 상태에서, 서버를 통해 게임의 데이터를 읽거나 쓰려면 메모리 영역을 읽어올 수 있는 클라이언트가 있어야 한다. 다른 어떤 언어로도 클라이언트를 만들 수 있으나, 여기에서는 C++과 파이썬으로 구성된 클라이언트를 소개하고자 한다. C++ 클라이언트 - 유튜브 (https://www.youtube.com/watch?v=mFo98deSk4Q)를 보면 자세한 과정을 알 수 있다. - URL (https://sourceforge.net/projects/cig/)에서 동일한 클라이언트를 다운받을 수 있다. 압축 파일을 받은 후에, 압축을 해제한다. 클라이언트는 게임 외부에서 작동..
4회차 - (4) TORCS : SCR-패치 서버 설정 SCR-패치 - SCR(Simulated Car Racing) 패치 : TORCS는 매년 게임 내에서 튜닝된 차량들이 경쟁하는 대회(Simulated Car Racing Championship)를 개최한다. 차량을 튜닝하기 위해서는 TORCS 게임 내 차량의 여러 데이터들을 받아와야 하는데, 그저 설치만 완료한 게임은 독립적이라 접근하여 게임 속 차량에 관련된 데이터들을 읽어들일 수가 없다. 따라서 차량의 데이터를 받아올 수 있도록 게임과 외부의 통로를 만들어주는 것이 SCR-패치이다. 관련된 자세한 내용과 여러 운영체제에 대한 설치 방법에 대해서 다음 문서에 잘 나와있다. 여기에서는 Windows 10 환경에서의 패치만을 다룬다. - SCR-패치를..
4회차 - (3) TORCS : 설치 및 설정 TORCS - TORCS(The Open Racing Car Simulator) : TORCS는 리눅스, 윈도우같은 여러 운영체제에서 사용할 수 있는 오픈 소스로 된 3D 차량 레이싱 시뮬레이터이다. C++로 만들어졌으며, OpenGL로 그래픽을 렌더링한다. 20년 전인 1997년도에 만들어졌지만 현재까지도 여러 차량 시뮬레이션에 사용되는 프로그램이다. - 20년 전의 게임인 만큼, 그래픽이 Microsoft의 AirSim만큼 화려하지 않고 오히려 매우 단조롭다. 그렇기 때문에 오히려 영상 처리나 학습 모델을 만들어 학습하는 것이 편리할 수 있다. 또한 출시된 기간이 오래되었으므로 여러 예제들이 존재하고, 대회가 있어 아직도 커뮤니티가 존재한다. 가장 중요한..
4회차 - (2) Microsoft AirSim Car Simulator : 환경 구성 언리얼 환경 구성 - Github(https://github.com/Microsoft/AirSim/blob/master/docs/unreal_custenv.md)에 언리얼 환경 구성에 대한 단계별로 자세한 설명이 있으나, 오류가 발생하여 다른 방법으로 대체한다. 유튜브에 동일한 방식의 언리얼 환경 구성이 영상으로 올라와있다(https://www.youtube.com/watch?v=1oY8Qu5maQQ&feature=youtu.be). 영상을 먼저 따라하기 보다는 Github의 설명이 더 최신이므로, Github의 지시 사항을 그대로 따라해보고 오류가 발생하는 경우 영상을 따라하기 바란다. (1). 에픽 게임 런처를 실..
4회차 - (1) Microsoft AirSim Car Simulator : 설치 Microsoft AirSim - AirSim은 Microsoft사에서 자율 주행, 영상 처리, 강화 학습, 인공 지능 알고리즘 등의 연구를 위하여 개발한, 언리얼 엔진(Unreal Engine)을 기반으로 하는 드론 및 자동차 시뮬레이터이다. 오픈 소스이며, 차량이나 드론의 상태와 관련된 API를 제공한다. (https://github.com/Microsoft/AirSim) AirSim 바이너리 설치 (Windows 10 환경) - 언리얼 엔진 홈페이지(https://www.unrealengine.com/ko/blog)에서 에픽 게임 런처를 다운 받는다. 다운 완료된 런처를 실행하여 최신 버전의 언리얼 엔진을 다운로드 한..
3주차 - (3) 아두이노를 이용한 RPM 측정 포토 인터럽터(Photo Interrupter) 제원 : LM393 H2010 - 한 쪽 면에서 빛을 쏘아 반대편의 광센서가 그 빛을 받아들인다. 광센서에 입력이 없으면 0을, 투과하여 입력이 있으면 1을 반환한다. 따라서 패턴이 그려진 투명 디스크를 사용하면, 패턴의 수만큼 센서에서 펄스를 생성하고 회전수를 계산할 수 있다. 하드웨어 세팅 : 포토인터럽터, 아두이노 DUE, NI-6008, 엔코더, 마인드스톰 컨트롤러 및 모터, 패턴 디스크 - 아두이노 및 NI-6008, 마인드스톰의 컨트롤러를 컴퓨터에 연결한다. - NI-6008에 엔코더를 연결하고, 포토인터럽터는 아두이노의 5V, GND와 디지털 입력 포트(44)에 각각 연결한다. - 패턴 디스크는 ..
3주차 - (2) 아두이노 →랩뷰 AD/DA 변환 하드웨어 세팅 : NI-6008, 아두이노 DUE, 전선 - NI-6008과 아두이노를 컴퓨터에 연결한다. - NI-6008의 AI3(-)와 아두이노의 디지털 입력 포트(44)를 전선으로 연결한다. 소프트웨어 세팅 - 아두이노는 사인 함수를 지원하지 않기 때문에 따로 싸인 함수 값을 가지고 있는 배열을 선언해준다. - 아두이노 DUE의 DAC1을 출력으로 둔다. 아두이노 DUE의 DAC는 12비트의 분해능을 가진다. - 12비트의 분해능으로 아날로그 값을 출력하는 코드를 작성한다. 아두이노 DUE의 경우, 정격 전압은 3.3V이지만 출력되는 전압에는 보드 자체에서 1/6의 오프셋이 있어 1/6~5/6의 값만을 출력한다. - 랩뷰에서, DAQ 어시스턴트로 ..
3주차 - (1) 랩뷰 → 아두이노 AD/DA 변환 하드웨어 세팅 : NI-6008, 아두이노 DUE, 전선 - NI-6008과 아두이노를 컴퓨터에 연결한다. - NI-6008의 AO0를 아두이노의 아날로그 입력 포트 A0와 연결하고, GND 포트에 각각 전선을 연결한다. 소프트웨어 세팅 - 랩뷰에서 아날로그 블록을 가져다 놓는다. - 블록으로 웨이브폼을 디지털로 변환한다. 출력되는 디지털 웨이브폼은 불리언 형태이기 때문에, 블록을 통해 2진수로 변경해준다. - 출력된 12비트의 2진수(0~4095)를 아두이노 DUE의 정격전압 3.3V로 스케일링 해준다. - 스케일링된 출력은 배열의 형태이기 때문에, 신호를 출력하여 아두이노에서 읽기 어렵다. 따라서 배열에서 각각의 원소를 차례대로 불러내어 DAQ 어시..
2주차 - (2) NI-6008을 이용한 엔코더 펄스 카운트 엔코더 제원 : KDMecatec 로터리 엔코더 EN40-AB-256 - 측정에 사용된 로터리 엔코더는 1회전당 256개의 펄스를 생성한다. 하드웨어 세팅 : NI USB-6008, 엔코더 - NI-6008과 컴퓨터를 연결한다. - NI-6008의 5V, GND핀에다 각각에 맞는 엔코더의 전선을 연결한다. - PFI0 핀에 엔코더의 A상 전선을 연결한다. (PFI0 = ctr0) 소프트웨어 세팅 - Labview의 함수 팔레트에서 측정 I/O의 아이콘을 끌어다 놓는다. - DAQ 어시스턴트 - 신호 수집 - 카운터 입력 - 에지 카운트 - Dev1의 ctr0을 설정 후 확인한다. - While 루프 구조와 웨이브폼 차트 인디케이터, 타이밍을 설..
2주차 - (1) 아두이노를 이용한 엔코더 펄스 카운트 엔코더 제원 : KDMecatec 로터리 엔코더 EN40-AB-256 - 측정에 사용한 로터리 엔코더는 1회전당 256개의 펄스를 생성한다. 하드웨어 세팅 : 아두이노 Due, 엔코더 - 아두이노 Due의 프로그래밍 포트와 컴퓨터를 연결한다. - 엔코더는 A상, B상 2개의 출력이 존재하지만, 펄스 카운트에서는 굳이 두개 모두 필요없으므로 하나만 연결한다. - 디지털 입력 핀에 엔코더 A상의 전선을 연결하고, 아두이노의 5V, GND 핀에 그에 맞는 엔코더의 전선을 연결한다. 소프트웨어 세팅 - Arduino IDE에서 툴 - 보드에서 Arduino (Programming Port) 설정 후, 연결된 포트 설정 - PLX-DAQ 프로그램을 사용하여 ..