![]() Vicente Egea, Jorge Garrido, Roberto Guzm?, Ranko Zotovic Roberto Guzman님은 컴퓨터공학(물리적 시스템)을 전공하였습니다. 현재 Universidad Politecnica de Valencia의 시스템 및 자동화공학과에서 로보틱스분야의 교수와 연구원으로 활동하였습니다. 또한 독일의 Hagen에 있는 FernUniversitaet에서 프로세스 제어 및 조정에 관한 부서에서 연구원으로 일하였습니다. 현재 TMC-Electronics의 연구개발부에서 근무하고 있습니다. Ranko Zotovic님은 산업공학자입니다. 로봇이나 절삭용 공작기계, 품질제어 등등 산업기계를 설계하거나 작동한 수년간의 경험을 가지고 있습니다. 현재 Universidad Politecnica of Valencia의 시스템 및 자동화공학과에서 로보틱스와 CAD/CAM분야를 가르키고 있습니다. Jorge Garrido Serrano님은 컴퓨터공학(물리적 시스템)을 전공하였습니다. PCBot의 소프트웨어 구조에 관한 설계 및 구현에 관한 박사논문을 준비하고 있습니다. Bancaja prize for Partnerships with Industry를 수상한 경력이 있는 그는 현재 독일의 FernUniversitaet - Hagen에서 유럽프로젝트 "MobiNet"(의료연구용 이동로봇기술;Mobile Robotics Technology for Health Care Research)의 일원으로 참여하고 있습니다. Vicente Egea Mañas님은 컴퓨터공학(물리적 시스템)을 전공하였습니다. PCBot의 하드웨어를 설계하고 구현하여 Bancaja prize for Partnerships with Industry상을 수상하였습니다.현재 TGI에서 근무하고 있습니다. 필자에게 연락하기: 차례: 들어가는 글 무인반송차의 구조 소프트웨어 아키텍쳐 결론 |
Abstract: 최근 몇년동안 이동로봇과관련된 분야가 빠른 성장을 보이고 있습니다. 로보틱스,메카트로닉스, 인공지능과 관련된 많은 학과들에서 자율적인 이송로봇에 대한 연구를 중점적으로 진행하고 있습니다. 지금까지 연구개발에 소요되는 막대는 경비는 이들의 사용을 우주항공이나 군사무기 또는 원자력산업등에 국한되어 사용되어 왔습니다. 그러나 이분야에서 빠른 변화의 흐름은 농업,산업,서비스업,광업,의료업등등 많은 분야로 소개되면서 이용의 폭이 넓어지고 있습니다. 이러한 급성장에는 잠재된 엄청난 힘에 대한 전략적 부분이기 때문입니다.
현재 상업용으로 제작되어 판매중인 무인반송차(AGV;이동로봇의 한 형태)는 대부분 고가이면서 하드웨어나 소프트웨어에 대하여 폐쇄적이고 독점적인 구조를 가지고 있고 관련자료도 부족하며 임의로 변경하기가 어렵다.
시스템 및 자동화 학과에서는 위에 설명한 제약조건이 없는 무인반송차을 연구실에서 직접 제작하기로 하였다. 제작된 무인반송차는 개인용컴퓨터가 가지는 많은 장점을 활용하기 위하여 PC를 기반으로 하는 구조를 사용하였다. 개인용 PC는 하드웨어나 소프트웨어 측면에서 가격, 성능, 호환성, 다양성 및 활용성면이 우수하다. 또한 리눅스와 실시간 확장판인 실시간리눅스를 사용한 것은 이 프로젝트를 쉽게 수행할 수 있는 한 요인이 되었다.
![]() |
제작된 무인반송차 PCBot 1.0 |
제작된 시스템은 동력을 내는 추진용 바퀴두개와 지탱하기 위한 바퀴로 구성되어 있다. 운동학적으로는 바퀴달린 걸상이나 탱크의 운동학과 비슷하다. 중심의 속도를 제어하려면 우리는 매 시간에 따라 각 바퀴의 속도를 제어해야 한다.
시스템의 설계는 크게 두개의 영역으로 나뉘어진다.: 하단부에는 모두 기계적이고 전기적 동력 부품들이 들어있고, 상단부에는 제어와 통신에 관련된 부품들이 모여있다. 하단부는 알루미늄판위에 설치되었다. 여기에 바퀴와 감속기, 모터, 엔코더, 동력판(Power Plate), 동력공급장치와 배터리가 설치되어 있다. 상단부에는 제어카드와 플로피드라이브가 달린 개인용 PC의 메인보드가 장착되어 있다.
![]() |
제작된 무인반송차 PCBot의 정면과 측면 |
하드웨어 아키텍쳐에 사용된 제어카드는 하나를 통하여 모터를 제어할 수 있는 기능을 가지고 있다.따라서 축 제어는 컨트롤 카드나 PC에서 바로 제어할 수 있다. 이 프로젝트를 위하여 시스템에 사용된 카드와 소프트웨어를 모두 손수 디자인하였다.
![]() |
하드웨어 아키텍쳐 |
무인반송차를 제어하기 위한 명령은 외부컴퓨터(호스트)에서 보내지게 된다. 달려있는 PC는 적절한 동작명령과 참고값들을 제어카드로 보내는 것을 담당한다. 제어카드는 전압의 형태로 된 요청을 생성하고 이를 동력판에서 증폭시켜서 모터에 전달된다. 각 축의 움직임은 위치센서(엔코더)를 이용하여 알 수 있다. 제어카드는 이 값을 측정하여 모터를 제어한다.
무인반송차가 작동하려면 첫째 클로즈드 루프 컨트롤시스템(closed-loop control system)이어야 한다. 이러한 방식의 제어시스템은 시간의 연속된 간격마다 제어를 수행하여 정확한 제어가 수행되도록 해 준다. 둘째 상황변수가 주기적으로 갱신되어야 한다. 예를 들어 매 순간순간 무인반송차의 중심위치를 결정하기 위하여 상태변수가 어떤 값인지를 알아야 한다.
이 두가지 요구조건을 만족하려면 실시간 운영체제를 사용해야 한다. 실시간운영체제는 계산의 수행뿐만 아니라 한정된 시간내에 그 결과를 얻을 수 있다는 특징을 가진 정확한 시스템이다.
PCBot을 수행하기 위하여 소프트아키텍쳐에 리눅스 커널 2.0.33과 실시간 확장판(0.6버젼)을 이용하였다.
리눅스와 리얼타임리눅스(RT-Linux)를 사용한 이유는 이 운영체제를 이용하여 많은 자동화업종 회사들이 리눅스에서 돌아가는 프로그램을 개발하는 이유와 같다.그 이유를 들자면 다음과 같다.:
실시간 운영체제인 실시간 리눅스는 뉴멕시코의 광업기술기관의 컴퓨터사이언스부의 Victor Yodaiken와 Michael Barabanov에 의해 개발되었다. 아래 그림은 구조를 간단하게 나타낸 것이다. 실시간 커널은 하드웨어와 밀접한 영역에서 작동된다. 정적 우선권을 가진 스케쥴러는 실시간으로 하드웨어를 이용할 수 있는 모든 접근에 관한 작업들을 관리한다. 스케쥴러의 입장에서 보면 리눅스는 또하나의 실시간 작업이면서 가장 낮은 우선권을 가진 작업이다. 따라서 언제나 여유시간이 있게 될 때만 실행되게 된다.
![]() |
실시간 시스템 RT-Linux |
PCBot에 사용된 소프트웨어 아키텍쳐는 잘알려져있는 클라이언트-서버 모델에 바탕을 두고 있다. 서버는 로봇에서 작동하며 원격장치에서 작동하는 클라이언트들의 요청을 다루게 된다. 서버와 클라이언트간의 통신은 TCP/IP를 이용하였다.
통신에 TCP/IP를 사용하면 로봇을 호스트에서 실행하는 운영체제로부터 독립적으로 만들수 있다. 클라이언트는 사용자로부터 명령을 받아서 명령들을 로봇에 전달한다. 명령에는 움직임, 상태 설정 및 상태 요청 등 3가지 형식이 있다. 클라이언트는 입력명령의 문법을 확인하여 서버에 적절한 메시지를 작성, 소켓을 통하여 서버로 보내게 된다.
서버는 클라이언트의 연결을 계속 기다린다. 한번 연결이 이루어지면 서버는 즉시 제어작업을 실행하기 위한 실시간 모듈로 바뀌게 된다. 실시간모듈은 로봇에 전달되는 명령을 실행한다. 그리고 시스템 통합을 계속 집지키는 개처럼 지켜보면서 시스템을 관리하게 된다.
![]() |
소프트웨어 아키텍쳐 |
소프트웨어는 크게 두부분으로 구성된다. 하나는 리눅스 운영체제를 실행하는 부분이며 다른 하나는 그때그때의 요구에 따라 실시간으로 (실시간 리눅스) 수행되는 부분이다. 서버는 리눅스쪽이며 무인반송차에 설치된 개인용 PC에 들어있다. 엄격한 시간요청에서 이루어 질 필요가 없는 두번째 응용프로그램인 클라이언트는 설치된 PC에 두지 않아야 한다.
실시간모듈은 몇개의 주기적 실시간업무(동작명령과 감독작업)와 간헐적인 업무 (드라이버와 정지)로 구성된다.
이진 신호는 실시간업무에 의한 하드웨어의 접근을 막아준다. 우리는 몇가지 이유에서 이 이진신호를 사용해야 했다. 첫째 컨트롤 카드와 통신하는 방법은 변위 레지스터를 이용하는 방법이다. 만약 변위 레지스터를 사용하는 업무가 있는데 가른 작업이 끼어들었다면 유효하지 않는 데이터가 이 레지스터에 기록된다. 둘째, 레지스터 레벨은 가로채기가 되면 안되기 때문이다. 마지막으로 양축의 제어동작의 전달은 가능한한 동시적으로 이루어 져야 한다.
3개의 실시간-FIFO 큐는 리얼타임모듈과 서버간의 통신을 담당한다. 서브는 큐에 저장된 클라이언트로부터 받은 작동명령을 기록한다. 실시간 모듈은 서버로 명령이 제대로 전달되었는지와 서버의 어떤 위급한 상황을 알려줄 필요성이 있을때 나머지 2개의 큐를 이용한다.
이벤트의 전형적인 순서는 다음과 같다:사용자가 사용자와 떨어져있는 PCBot과 연결하기 위하여 클라이언트 프로세스를 실행한다. 각 명령들이 입력되면 클라이언트는 실행하고 그것을 서버에 전달한다. 서버는 처리된 메시지를 받아서 실시간-피포(fifo/first in first out)를 통하여 실시간 모듈에 메시지를 전달 하기 위하여 다시 처리과정을 거친다.
드라이버는 실시간 Fifo와 함께 명령을 다룬다. 만약 작동이 필요하면 드라이버는 관련된 실시간 작업을 작동시킨 다음 서버에게 확인메시지를 보낸다.이 작업은 모터를 작동시키는데 필요한 행동들을 관리하면서 실행된다.
동작명령은 차지하고라도 사용자는 상태를 요청하거나 지정할 수 있다. 이런 경우 동일한 드라이버가 상대적으로 전역변수를 읽거나 쓰면서 요청에 응답하게 된다.
전역변수들은 모든 실시간 작업과 드라이버에 의해 공유되는 기억공간에 위치하고 있다. 전역변수는 작업들간의 간단하면서 신속한 통신을 가능하게 해준다. 특히 감독기능은 무인반송차의 상태에 예기치못했던 상황뿐만 아니라 적절한 변화까지 서버에 알려준다.
![]() |
소프트웨어 아키텍쳐 - 시스템 역할 |
PC를 기본으로 하는 시스템 아키텍쳐는 비용이 적게 들고, 쉽게 하드웨어와 소프트웨어를 업그레이드할 수 있으며 많은 소프트웨어를 이용할 수 있고 작업을 수행하는 능력면에서 막강한 장점이 있다. 무엇보다 하드웨어가 절대 퇴화하지 않는다. 왜냐하면 고장난 부붐이나 시대에 뒤떨어진 부품을 최신것으로 바꿔주면 바로 그 다음 세대의 제품이 되며 또한 현재 있는 소프트웨어와 호환성이 유지되기 때문이다.
리눅스와 그것의 실시간 확장인 RT-Linux를 선택한 것은 매우 운이 좋은 결정이었다. 우리는 아무런 추가비용없이 wpe(윈도우즈 프로그래밍 환경;Windows Programing Environment)이나 GNU C컴파일러와 같은 매우 강력한 GNU의 개발도구들을 사용할 수 있었다.
이 실험을 수행하는 동안 리눅스시스템은 안정되고 강력한 시스템이라는 것을 보여주었을뿐만 아니라 장치의 자원을 매우 효과적으로 관리함을 보여주었다. 우리는 경우 단순한 486PC를 장착하여 사용하였는데 개발시간이나 성능면에서 별다른 단점이나 불리함을 경험하지 않았다.(이 장치에서 병렬적으로 여러명의 사용자가 개발했다.) 실제로 시스템의 활용도를 분석해본 결과 최악의 경우에서조차 CPU시간은 약 70%정도였다.
이프로젝트동안의 소프트웨어 통합은 공개영역에서 이루어졌으므로 모든 소스는 언제나 이용할 수 있다. 이것은 실시간 커널의 내부적 동작원리를 매우 잘 알 수 있는 계기가 되었으며 새로운 단계로 올라서기 위한 가능성의 문을 활짝 열어주었다. (다른 시간 관리자의 사용이나 실시간용 드라이버의 개발 등등) 이러한 점은 상업용 무인반송차량에서는 의문속에 감추어졌을 부분들이다.
실시간 리눅스는 커널의 수정에서 시스템 호출을 이용하는 변수들의 저장과 가시화에 이르기까지 매우 많은 기법들을 이용하여 디버그를 실시간으로 쉽게 할 수 있었다.
개발하는 동안 우리는 생각지도 못한 실시간 리눅스와 관련된 메일링리스트릐 회원들의 지지를 늘 함께 받았으며 엄청난 양의 문서들을 이용할 수 있었다.
리눅스포커스에 실렸던 다른 기사들:
실시간 리눅스
실시간 리눅스 II
원래 기사는 스페인어로 쓰여졌습니다.
번역 : 이주호
Webpages maintained by Miguel 햚gel Sep?veda © Vicente Egea, Jorge Garrido, Roberto Guzm?, Ranko Zotovic LinuxFocus 1998 |