ROS

로봇 시스템

Mr.Bini 2019. 3. 22. 12:49

  Robot System
10.로봇 시스템 (Robot System)



Created Date: 2014.09.22
Modified Date: 2014.09.22
revision 1


                                                                                                          출처: https://cafe.naver.com/openrt/6575
1. 로봇 시스템

지금까지 시스템은 요소와 요소를 연결하는 집합이라는 개념 하에 로봇 시스템이란 무엇인가를 알아보기 위하여, 로봇을 구성하고 있는 요소는 어떠한 것 들이 있으며, 이러한 요소들은 어떠한 방법을 이용하여 상호 연동 하는가에 대해 알아 보았습니다. 그 결과, 로봇은 크게 기계/하드웨어/소프트웨어로 구분이 될 수 있으며, 거북이 로봇을 예로 들어 어떠한 요소들이 가각의 카테고리에 해당이 되는지를 살펴 보았습니다. 다시 한번 정리해 볼까요? 


이미지 출처 : 구글 이미지 검색


포스가 느껴지는 저 로봇은 제가 좋아하는 Rollin’ Justin 이라는 로봇 입니다. 그림은 별로 의미는 없고요 그냥 넣어 봤습니다 ㅡㅡ;;. 아무튼, 빨간색으로 표시된 것은 로봇의 기구적 요소이며, 파랑색은 하드웨어적 요소, 초록색은 소프트웨어적 요소입니다. 제어기의  Firmware 나 모터와 같은 경우는 두가지 속성이 조금씩 걸쳐진다고 보아 색상을 저렇게 표시 했습니다. 로봇의 SBC 및 Controller 는 복잡한 계산을 효율적으로 처리하기 위하여 복수개가 존재할 수 있습니다. 주로 로봇의 하드웨어적 요소들은 상호간의 연결을 위하여 USB, RS232/485, CAN, EtherCAT 과 같은 중/장 거리 통신 방법을 사용합니다. 그리고, 제어기의 센서들은 제어기의MCU 와 연동하기 위하여 UART, SPI, I2C 와 같은 근거리 통신 방법을 이용 합니다. 로봇의 응용 소프트웨어들은 OS 에서 작동하는 SBC(PC) 에서 작동하며, Software Framework 를 이용하여 로봇을 구성하는 다른 소프트웨어 요소들과 SOCKET 과 같은 방법으로 통신을 합니다.

앞서 다 설명한 내용들이니, 이해는 쉽게 가실 것 같습니다. 위 그림처럼, 로봇의 시스템은 상당히 복잡한 구조로 연결이 되어 있습니다. 따라서, 이러한 모든 분야에 대해서 두루 직식을 갖춘다는 것은, 정말 많은 노력을 하지 않으면 매우 힘든 일이 될 것입니다. 보통은, 한사람이 이러한 전분야에 걸쳐 모두 개발을 하는 경우는 잘 없습니다. 따라서, 자신이 가지고 있는 배경에 따라, 기여하고자 하는 분야를 선택해서 로봇을 개발하게 됩니다. 하지만, 중요한 것은 소위 로봇 공학자가 되고 싶다면, 자신이 어떠한 분야를 선택해서 로봇을 개발하던, 로봇 전체에 대한 이해는 필수적으로 필요한 것이며, 나아가 조금씩 각 분야에 대한 지식을 넓혀 가는 것이 좋을 것 입니다. 이러한 식으로 내공이 쌓여 로봇의 전 분야에 대해 통달하게 된다면, 로봇의 어떠한 분야에 기여하던, 혹은 혼자 로봇 1대를 만들던 각 분야가 만들어 내는 시너지로 인하여 좋은 결과를 얻을 수 있을 것 이라고 생각 합니다. 

이제 마지막으로, 각 분야에 해당하는 기술이나 학문은 어떠한 것이 있는지 한번 알아보겠습니다.

1. 기계부

  • 기계부에서 하는 일은 주로, 로봇의 기계적인 요소에 대한 설계를 합니다. 이 부분도, 사실 경계가 불분명 합니다만은, 설계에 필요한 특징들에 따라 아래와 같이 세분화를 할 수 있지 않을까 생각이 됩니다.
  • 기구 설계
  • 로봇을 구성하는 구조물들의 위치 결정이나 결합에 대한 내용을 설계. 3D CAD (Catia, Solidworks, UG NX, Invector 등) 프로그램을 이용하여, 실제 물건들이 어떠한 형상을 가지고 어떻게 조립 될 것인지를 모델링 한다.
  • 메커니즘 설계
  • 로봇을 움직이는 요소들이 어떻게 결합되어 움직임을 만들어 낼 것인지를 설계. 예를 들어, 팔을 특정 범위에서 움직이기 위해서는, 팔 관절의 길이가 어떻게 되어야 하며, 각 관절이 어떻게 연결이 되어야 하는지를 결정. 또한, 모터의 동력이 어떠한 식으로 전달 되어야 하고, 이를 위해 필요한 동력 전달 방식의 종류 (각종 기어, 타이밍벨트 등) 와 같은 항목들을 결정. 기구설계와 마찬가지로 3D CAD 프로그램을 이용하여, 결정된 요소들을 모델링 한다.
  • 구조 설계
  • 로봇이 구조적으로 안정한지에 대한 설계를 한다. 예를 들어, 로봇이 특정 물건을 들고 특정 속도로 이동할 경우, 로봇이 넘어지지 않고 이동할 수 있는 바퀴간의 거리를 결정하거나, 혹은 특정 하중을 지탱하며 이동하기 위해 필요한 모터의 토크를 선정. 그리고, 해당 토크를 견디기 위한 축의 지름 및 재질을 결정한다. 이러한 과정은, 결과적으로는 3D CAD 를 통하여 모델링이 되나, 계산을 위해 MATLAB 과 같은 프로그램을 이용하거나, CAE 와 같은 해석 프로그램을 이용하여 시뮬레이션을 하게 된다.
  • 사실 3가지를 모두 기구설계라고 볼 수도 있지 않을까 생각이 되긴 합니다. 하지만, 각 process 에서 하는 일이 조금씩 다른것 같아 구분을 해 보았습니다. 1번은, 주로 로봇의 외관이나, 각종 부품을 감싸고 있는 Housing 에 대한 설계입니다. 2번은, 기구학을 바탕으로, 로봇이 특정 공간에서 목적대로 움직이기 위한 메커니즘을 설계 합니다. 3번은, 역학을 바탕으로 로봇이 안정적으로 움직일 수 있는 구조적인 기반에 대한 설계를 합니다.
  • 로봇의 기구부를 다루기 위해서는 정역학, 동역학, 재료공학, 기구학(메커니즘), 기계 요소, 로보틱스 등 과 같은 학문을 공부해야 합니다. 또한, 이를 위한 도구로써는, 주로 3D CAD 프로그램이 사용이 됩니다.
  • 이 외에도, 로봇의 디자인이나, 생산을 위한 기계공작법이나, 금형 설계등과 같은 내용이 있지만, 설계의 입장은 아니기에 제외 했습니다.


2. 하드웨어부

  • 기계부에서 하는 일은 주로, 로봇에 들어가는 전원에 대한 관리나, 혹은 제어기와 같은 요소들을 제작하게 됩니다. 이러한 제어기를 제작하기 위한 과정은, 크게 3단계로 볼 수 있으며, 1) 회로 설계, 2) 기판 디자인, 3) 생산 으로 볼 수 있습니다. 이중 1), 2) 까지를 설계 단계로 볼 수 있으며, 3)은 제작의 단계이기 때문에, 여기서는 이야기 하지 않겠습니다.
  • 회로 역시 크게는 전력과 같은 내용을 다루는 아날로그 부분과, 제어기와 같은 것 들을 설계하는 디지털 부분으로 나뉠 수 있다고 생각이 됩니다. 이러한 회로 설계는 주로 회로 설계 CAD (OrCAD, EagleCAD, Altium Designer) 와 같은 프로그램을 이용하여, 회로를 그리게 됩니다.
  • 아날로그
  • 주로 베터리와 연관되어, 베터리를 안정적으로 충/방전 시키거나, 로봇의 각 요소에 필요한 전력을 계산하여 안정적으로 공급하기 위한 회로를 설계한다.
  • 디지털
  • 주로 제어기와 연관 되어, MCU 와 같은 Digital Process 를 이용하여, 로봇에 부착된 모터나 각종 센서, 그리고 기타 IC 들을 어떻게 연결 시킬 것 인지에 대한 회로를 설계 한다.
  • 두가지 회로 모두, 우리가 흔히 말하는 저항이나 커페시터와 같은 소자들을 주로 사용한다기 보다는, 특수 목적으로 출시 되는 각종 IC (전력 관리IC, 각종 통신 IC, 모터제어 IC, 등등등) 을 사용하기 때문에, 많은 IC 에 대한 지식이 필요하며, 이에 따라 Data Sheet 를 잘 볼 수 있어야 합니다 (영어를 잘 해야 겠죠 ㅡㅡ;). 또한, 회로를 설계한다는 것은, 단순히 전자회로의 schematic 을 설계하는 것이 아니라, 설계할 때 어떠한 부품 (IC의 종류, LRC는 어떠한 것을 쓸지, 커넥터의 종류 등등) 을 함께 결정하는 일입니다. 부품에 대한 지식이 많이 필요합니다.
  • 기판 디자인은 Artwork 라 불리우는 작업으로써, 실제 기판에서 각 소자들이 연결되어 있는 선을 어떻게 그릴 것인가를 디자인 하는 작업 입니다. 이 작업은 Artwork 도구 (PADS 등) 을 이용하게 됩니다.
  • 로봇의 하드웨어부를 다루기 위해서는, 전기 회로, 전자 회로, 전력 공학, 디지털 공학, 마이크로프로세서, 센서 공학 등 과 같은 학문을 공부해야 합니다. 또한, 이를 위한 도구는 회로 설계 CAD 및 PCB 설계 프로그램을 이용 합니다.

3. 소프트웨어부
  • 소프트웨어부는 로봇을 어떻게 움직일지를 결정하는 일종의 제어 프로그램을 만들게 됩니다. 여기서 제어라 함은, 모터와 같은 장치들을 원하는데로 움직이게 해주는 하위 제어 (Low-level Control) 와 로봇의 큼지막한 움직임을 결정하는 상위 제어 (High-level Control) 로 구분 될 수 있다고 생각 합니다. 일반적으로, 하위 제어 소프트웨어와 같은 경우는 C언어로 개발 되어 MCU 기반의 제어기에 탑재가 되고, 상위 제어 소프트웨어와 같은 경우는 일반적인 응용 프로그래밍 언어로 탑재 되어 OS 기반의 SBC 와 같은 환경에서 작동하게 됩니다.
  • 하위 제어
  • 로봇의 모터나 각종 센서와 같은 장치들을 제어하는 프로그램을 만들며, 또한 이러한 장치들이 서로 연동할 수 있는 시스템을 구축 한다. 예를 들어, 모터를 원하는 속도로 유지시켜 주기 위한 제어 소프트웨어나, 각종 센서로 부터 입력되는 노이즈를 줄이기 위한 디지털 필터를 설계 및 구현하며, 각종 IC 들과 연동하기 위한 UART/SPI 와 같은 통신 인터페이스 구현, 또한 상위 제어의 소프트웨어와 연동하기 위한 USB/RS232 와 같은 통신 구현 및 Protocol 을 들 수 있다.
  • 상위 제어
  • 일반적으로 말하는 로봇의 응용 프로그램에 해당이 되며, 특정 제어 프로그램을 작성한다기 보다는, 다양한 분야의 각종 소프트웨어 모듈(요소) 들을 결합하여 하나의 소프트웨어 시스템을 만든다. 이렇게 로봇의 응용 프로그램에 필요한 요소들은 아래와 같은 기술들이 있다.
  • 메니퓰레이션 : 로봇의 팔이 어떻게 움직일 것인지를 제어함
  • SLAM : 로봇의 위치 인식과 Map Building 을 동시에 하는 기술
  • 물체 인식 : 카메라 혹은 Depth 센서를 이용하여 물체의 종류 및 위치를 인식
  • 얼굴 인식 : 카메라를 이용하여 사람의 얼굴을 보고 누구인지를 인식
  • 음성 인식 : 사람의 목소리를 듣고 문장을 추출
  • 온톨로지 : 로봇이 가지고 있는 각종 정보들을 체계화 시켜 구축
  • 기타 등등 (너무 많아서..)
  • 위 두가지 모두 공통적으로, 시스템의 연동을 위해 필요한 각종 시스템 프로그래밍 (소켓 프로그래밍, 연동을 위한 Protocol 설계 및 구현 등등) 이 필요합니다.
  • 로봇의 소프트웨어부를 다루기 위해서는, 제어공학, 마이크로프로세서, 임베디드 시스템, 계측공학, 필터 설계, 동역학, 로보틱스, 영상 처리, 신호 처리, 자료 구조, 알고 리즘, 운영 체제, 객체 지향 프로그래밍, 데이터베이스, 데이터 통신, 소프트웨어 공학, 기계 학습, 패턴 인식, 인공 지능 등과 같은 학문을 공부해야 합니다. 또한, 이를 위한 도구로써는 각종 프로그래밍 언어 (Assemble, C/C++, Java, Python, Prolog, lisp, RDF, OWL 등) 및 해당 언어를 빌드하기 위한 각종 도구 (IAR, Visual Studio, Eclipse, GCC 등), 그리고 소프트웨어를 통합하기 위한 Framework (MSRDS, ROS, OPRoS 등) 를 이용 합니다.

적고 보니 굉장히 많네요. 우선, 각 분야에 대해 필요한 내용들을 적었습니다만, 전분야 공통적으로 공업수학이나 선형대수, 미적분, 확률통계와 같은 기본적인 수학은 당연히 알고 있어야 합니다. 또한, 재차 강조하듯 로봇 공학자가 되기 위해서는 한분야에 치우치지 말고, 전 분야에 걸쳐 (전 분야를 어설프게 하라는 뜻이 아닙니다. 전 분야를 잘하라는 뜻이죠) 지속적인 공부를 하는 노력이 필요 합니다. 

자...이제 로봇이 어떻게 구성되어 있으며, 로봇을 만들기 위해서는 어떠한 것들이 필요한지에 대한 이해가 되셨나요? 비록 짧은 내용으로 로봇이라는 것을 설명하기에는 부족한 강좌였을 수도 있습니다만, 도움이 되셨기를 바라며 [로봇 시스템] 강좌를 마칩니다. ^^;;


End.

written by 민트사랑


이 저작물은 크리에이티브 커먼즈 저작자표시-비영리 4.0 Unported 라이선스에 따라 이용할 수 있습니다.