기본 콘텐츠로 건너뛰기

6월, 2017의 게시물 표시

PID제어 2편 I제어 - 잔류편차 없애기

  1편에서 설명한 P제어는 움직임의 효율을 크게 개선한다. P제어만 하더라도 초등학교 소프트웨어 교육에 적용한다면 학습자들이 로봇의 움직임을 구현하는데 만족도가 클 것이다. 그러나 엄밀하게 말하면 실제 목표값에 도달하지는 못한다.   실제 구현하게 되면 로봇은 일종의 진동운동을 하게 된다. 이 진동은 더 줄어들지 못하고 주행하는동안 계속 유지되는 일종의 "안정"된 상태를 유지한다.  그러나 만약 이안에 사람이 타승했다 가정하고 직진해야 하는 로봇이 계속 좌우 진동을 한다면 멀미가 날 것이다. "안정된 진동"현상을 개선하기 위해서는 특별한 방법이 필요하다. P제어에 I제어를 첨가한다. 로봇의 움직임을 상상하기 위해 탱탱볼로 비유해보고자 한다. 이 탱탱볼을 탄성계수가 매우 이상적인 형태로 원래 입사한 방향에 반사된다고 가정한다. 일단 ON/OFF제어를 이용한 탱탱볼은 다음 그림과 같이 움직일 것이다. 점선은 탱탱볼의 우리가 원하는 진행방향이고 아래 벽은 우리가 설정한 경계값, 그리고 위쪽 벽은 탱탱볼이 센서를 읽은 궤적이라 치자. 그리고 파란색 선은 탱탱볼이 실제로 움직인 모양을 표현했다. 이 비유는 약간의 오개념은 있지만 필자가 보기엔 그럭저럭 비슷하다. 만약 ON/OFF 제어를 P제어로 바꾼다면 이런 그림의 탱탱볼운동으로 바뀔것이다. 보라색 선은 오차를 계산해서 진행방향에 직진성을 더해가는 P제어의 지점들이다. 실제 경계선은 없지만 점선과의 거리에 의해  수정된 가상의 벽면이다. 이 벽면은 점점 그 거리가 오므라 드는가 싶더니만 마침내 평행하고 만다. 이렇게 평행한 상태의 오차를 "잔류편차" 또는 "잔차"라고 한다.  (용어를 정확히 알아두는 것은 중요하다고 생각한다. 왜냐하면 더 발전된 내용을 검색하거나 남에게 설명할때 시행착오의 여지를 없애기 때문이다.) 잔차의 원인은 필자의 생각에는 이렇다. 1. 샘플링 주기- 센서의 샘플링 주기가 잔차의

PID 제어 1편 P제어

현실의 내용을 반영해야 하는 로봇이나 피지컬 컴퓨팅의 경우 다양한 센서 부품을 사용하게 된다. 센서는 그 값을 아날로그 또는 디지털로 프로그램에 전달하는데, 이때 센서의 값을 효율적으로 이용함으로써 로봇과 피지컬 컴퓨팅 기기를 효율적으로 작동시킬 수 있다.  이 글에서는 센서의 값을 효율적으로 이용하기 위해 가장 기초적으로 사용한다는 피드백 제어와 PID 제어에 대해서 이야기 하고자 한다. 어디에 쓰이는가.  센서의 값을 움직임에 반영하는 거의 대부분의 기기에 활용된다. 예를 들어 에어컨의 온도조절, 드론의 수평잡기, 먼~ 예로 우주선의 착륙 등에 활용될 수 있다. 어떤 제어 과정을 거치는가   위키백과 영문판을 구글링 해보면 PID feedbaack 컨트롤의 블럭 다이어 그램이 제시되어 있다. PID feedback process By Arturo Urquizo - http://commons.wikimedia.org/wiki/File:PID.svg, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=17633925   다이어 그램의 PID는 각각 비율, 적분, 미분을 의미한다. 최초 r(t)라는 값은 지난번 처리된 y(t)와 함께 처리되어 e(t)가 되며 e(t)는 P,I,D세가지 과정을 거쳐 u(t)로 되고 다시 이것이 처리되어 결과인 y(t)가 된다. y(t)는 출력되거나 다음 번들어오는 r(t)의 처리를 위해 활용된다. 즉 r(t)의 값이 센서의 값이라면 이것은 PID의 과정을 거쳐 새로운 값이 되어 모터등의 작동에 반영되고 반영된 값은 다시 들어오는 센서값에 영향을 주게 된다는 의미이다. 라인트레이싱에서의 적용 On/Off알고리즘과 P제어 먼저, 라인트레이싱의 예로 P제어를 설명해보고자 한다.  P는 proportion 비율의 첫 글자이다. 초등학교 로봇교육에서는 대부분 On/Off알고리즘을 활용하여 라인트레이싱을 구현하고 있다. 학생들이

프로세스의 다섯가지 상태 (process's five states)

OperatingSystemConcept를 참고하면 프로세스는 new, ready, running, waiting,  terminated 다섯가지 상태를 지닌다. 일단 프로세스를 메모리에 적재되어 실행되는 프로그램으로 정의한다면 각 상태는 다음과 같이 설명할 수 있다. new : 프로그램을 메모리에 적재하기 위해 프로세스를 생성중이다. ready : 프로그램이 메모리에 적재되었고 처리기에 할당할 준비가 되었다. running : 처리기에 의해서 명령어들이 실행중이다. waiting : 프로세스는 어떤 사건을 기다리고 있다. 이 사건이 충족된후 ready상태가 될 것이다. terminated : 프로세스의 실행이 종료되었다. 한편 이 다섯가지 프로세스 상태들은 다음 다이어그램과 같이 전이된다.

캐쉬(Cache)

Cache란? 캐쉬는 접근속도가 다른 저장 시스템간의 속도차를 보완 해주는 장치이다.   A라는 장치에서 B라는 장치로 내용을 요구하는 경우,cache는 B라는 장치보다 접근 속도가 빠르다고 가정한다.  B라는 장치에 있는 내용의 일부가 cache에 저장되어 있다면 A는 B에 내용을 요구하는 것보다 cache에 요구하는 것이 속도면에서 나을 것이다. B를 아예 cache로 대체하면 좋겠지만, cache는 B보다 속도가 더 빠르기 때문에 당연히 가격도 비싸다. 따라서 cache는 일정 크기만 구비해 두고 자주 쓰이는 데이터만 저장한다. Cache를 이용한 처리 과정의 예 캐쉬는 속도차가 큰 저장시스템간에 사용될 수 있다. cpu와 주기억장치 사이에 있는 cache가 그 예중 하나인데,  운영체제가 Cache를 이용하여 프로그램을 수행한다면 다음과 같은 과정이 된다. 데이터를 주기억장치 로부터 cache로 복사 cache에서 데이터를 꺼내 처리 다음 데이터 요구시 cache를 검사하여 원하는 데이터가 있으면 cache에서 데이터를 받아 처리 만약 데이터가 없다면 주기억장치로 부터 cache로 데이터를 복사후 데이터를 처리

운영체제 :: 인터럽트에 관련하여

  인터럽트(interrupt)는 한국어로 새치기, 가로채기로 번역된다. 운영체제에서 인터럽트도 비슷한 의미가 되는데 단순한 가로채기가 아니라 제어권에 대한 이양이다. CPU가 사용자 프로그램에 의해 실행하는 도중 인터럽트가 발생하면, 이는 운영체제에게 제어권이 넘겨진다. 제어권을 넘겨받은 운영체제는 발생한 인터럽트를 해소한 후 사용자 프로그램에 다시 제어권을 이양하게 된다. 인터럽트가 발생하는 경우의 예는 다음과 같다. 입출력동작이 종료되었을 때 0으로 나누는 계산을 했을 때  부적절한 기억장치를 접근하고자 할때 운영체제에 서비스를 요구할 때 등.. 이다. 이외에도 다양한 인터럽트가 있을 수 있으며 이에 대한 자세한 설명은  http://rusy.tistory.com/entry/인터럽트interrupt 에 자세히 언급되어 있다.   인터럽트와 거의 비슷한 의미로 사용되는 트랩(trap)이 있다. 이는 소프트웨어 방식으로 구현하는 인터럽트와 거의 비슷한데, 예외를 검출할 수 있는 프로그램과 같이 생각하면 좋을 것 같다. 예로 시간초과등의 예외를 발생시키기 위해서 어떤 수를 클럭이 발생할때마다 누감할경우 수가 0이 되는 순간 인터럽트를 발생하게 할 수 있다. 인터럽트가 발생한후 이를 처리하고 복귀하는 과정은 다음과 같다. 인터럽트가 발생하면 운영체제는 하던일을 중단하고 중단된 상태정보를 저장한다. 제어를 인터럽트 벡터로 옮겨 요청한 인터럽트 처리 루팅의 주소를 가리키는 포인터를 참조한다. 포인터가 가리키는 주소로 이동하여 인터럽트 처리 루팅을 실행한다. 실행이 종료하면 저장 되었던 중단된 작업의 상태 정보를 복구하여 계속 실행한다. 위의 과정에서 인터럽트 벡터라는 용어가 나온다. 인터럽트 벡터는 일종의 인터럽트를 처리할 서비스들이 적힌 메뉴판이다. 해당되는 인터럽트 번호를 메뉴판에서 참고한후 메뉴판이 가리키는 서비스로 이동하여 해당 서비스를 통해 인터럽트를 처리한다.

가상기계에 대해서

가상기계란? (Virtual Machine) 한 컴퓨터의 하드웨어를 추상화 하여 다수의 다른 실행환경을 제공하도록 한 것이다. 각각의 실행환경은 자신만의 개별적 컴퓨터를 사용하는 효과를 낸다. 즉 가상기계는 소프트웨어로 만들어낸 가상의 하드웨어들이다. 예로 Virtual Box, 윈도우 하이퍼V, VM ware 등이 있다. 가상기계는 실제 기계에 비해 다음과 같은 장점이 있다. 동일한 하드웨어를 공유하면서 다른 운영체제를 동시에 실행시킬 수 있다. 개발중 시스템의 정상동작을 보장하면서, 다른 운영체제의 시스템 개발이 이루어질 수 있다. 운영체제 연구와 개발을 위한 도구로 사용된다. 프로세스의 실행과정 가상기계를 사용하지 않을때 :  여러프로세스들이 하나의 실행환경에서 실행된다. 가상기계를 사용할 경우 : CPU스케쥴링과 가상메모리 기법을 사용함으로써 운영체제 호스트는 각 프로세스들이 자신의 전용 메모리를 갖는 효과를 가진다. 

운영체제 구성 요소

운영체제는 프로그램이 실행되는 환경을 제공해준다. 운영체제가 제공하는 것으로는 크게 서비스, 인터페이스, 구성요소와 그들간의 상호 연결로 나눠 관점을 달리 할 수 있다. 운영체제는 프로세스관리, 주기억장치 관리, 파일관리, 입출력시스템관리, 보조기억장치 관리, 네트워킹, 보호시스템의 요소로 구성된다. 프로세스 관리 프로세스란 메모리에 적재되어 실행중인 프로그램을 의미한다. 프로그램이 실행되기 위해서는 메모리, CPU시간, 입출력등 다양한 자원을 필요로 하는데 이런 자원을 관리하고 할당하는 역할을 운영체제가 한다. 주기억장치 관리 프로그램의 실행은 주기억장치에 적재되는 것으로 시작된다.  프로그램에게 메모리 공간을 할당하고, 이 과정에서 발생하는 빈 공간등에 관리를 하는 것이 운영체제의 역할이다. 파일관리 파일은 파일생성자에 의해 정의된 관련된 정보들의 집합체이다. 운영체제는 다른 형태의 정보저장장치들이 통일되게 운영될 수 있도록 단일화된 형태를 제공한다. 저장장치의 물리적이 특성은 논리적인 저장단위인 파일로 추상화 된다. 물리적 매체에 사상되며 저장장치를 통해 파일에 접근한다. 입출력 시스템 관리 사용자 프로그램은 특정장치에 대해서 단독으로 알고 있을 필요가 없다. 운영체제만의 장치구동기만이 특정장치의 정보를 가지고 있으며 드라이버에 요구를 통해 입출력 시스템을 이용할 수 있도록 한다. 보조기억장치 관리 보조기억장치의 관리는 다음과 같은 세부 요소를 가진다. 자유공간 관리 (빈공간을 관리한다) 저장장소 할당 (저장장소를 할당한다) 디스크 스케쥴 (프로세스가 요구할 경우 저장장소에 접근할 수 있는 기회를 스케쥴한다.) 네트워킹   분산시스템에 있어서 프로세서는 통신매체를 통해 통신하는데 시스템이 관리하는 여러가지 자원들에 접근할 수 있는 방법을 사용자에게 제공할 수 있다. 보호시스템   운영체제에서 보호란 다수의 사용자와 다수의 병행프로세스를 허용하는 시스템에서

하드웨어를 보호하는 4가지 보호 방법 (하드웨어 보호)

대학원 기말고사중 공부한 자료   운영체제에서 하드웨어 보호란 사용자가 불법적인 명령을 수행하려하거나 비정상적인 접근을 발생시키려 하면 이를 감지하고 하드웨어를 비정상적인 작동을 방지하는 방법을 말한다. 이중모드 연산 (Dual-Mode Opreration)    하드웨어 보호방법 중 가장 먼저 언급되는 방법은 연산모드를 2가지 모드로 나누어 실행하는 방법으로 Dual-Mode Operation 즉, 이중모드 연산을 이용하는 것이다. 이는 CPU에서 지원해야 가능한 것인데 사실 인텔 8088 이후의 cpu들은 거의 이중모드연산을 지원한다고 한다.  이중모드 연산은 사용자 모드와 커널모드로 나누어 지며 모드비트라고 하는 현재의 연산상태를 나타내는 비트를 통해 구분된다.   사용자 모드는 특별한 권한이 없는 연산, 커널 모드는 특별한 권한이 있는 연산이다.  사용자 모드로 진행되는 프로그램이 사용자 모드비트를 가지고 운영체제를 변경하거나 다른 사용자의 프로그램을 변경하려 하거나 자신의 메모리 공간이 아닌 다른 공간을 침해하려 할 경우 트랩이나 인터럽트를 발생시킨다. 이때 모드비트는 커널모드로 변경되며 운영체제가 제어권을 가진다. 이를 통해 운영체제가 적절한 처리를 한 후 사용자 프로그램으로 제어권을 넘기는 행위를 할 수 있다. + 커널모드는. 특권모드, 모니터 모드라고도 한다. 입출력 보호(I/O Protection) 입출력에 대한 불법적인 행위를 막는 것으로 모든 입출력은 특권모드로 정의된다. 사용자가 입출력 권한을 운영체제에 요구하고 운영체제는 이에 대한 결과를 사용자 프로그램에 넘겨준다. 즉 입출력에 대한 과정은 운영체제가 관장하도록 하는 것이 입출력 보호이다. 기억장치 보호(Memory Protection) 사용자 프로그램은 특정 메모리 영역과 크기를 할당 받는다. 자신에게 할당받은 영역이상의 행위를 할 경우 이를 막아야 다른 프로세스의 과정에 간섭이 일어나지 않는다. 이를 위해 정정주소범위를 운영체제가 결정