Q. ROS는 운영체제(OS)다?
A. 우리가 흔히 생각하는 운영체제는 아니다.
우리가 흔히 생각하는 OS의 예시인 WINDOW, UNIX, LINUX, MAC OS X etc.. 가 아니라 "메타 운영체제(Meta-Operating System)"인 것이다.
그렇다면, 그냥 Operating System과 무엇이 다르냐면 메타 운영체제는 기존의 운영체제를 이용하고 있다. 기존 운영체제의 프로세스 관리 시스템, 파일 시스템, 유저 인터페이스, 프로그램 유틸(컴파일러, 쓰레드 모델 등)등을 사용하고 있다. 이에 추가적으로 다수의 이기종 하드웨어간의 데티어 송수신, 스케줄링, 에러 처리 등 로봇 응용 소프트웨어에 필요한 필수 기능들을 라이브러리 형태로 제공하고 있다.
(출처 : 표윤석님의 ppt : http://www.slideshare.net/yoonseokpyo/20150708-ros-seminarinbusankorea)
ROS를 공부할 때에 많이 나오는 단어가 "메세지, 토픽, 서비스, 매개변수" 정도가 될 것이다. 이는 그 단어들이 ROS에서 가장 핵심 부분이라고 할 수 있기 때문이다.
각기 목적에 따라 분화된 최소 실행 단위인 노드들은 "메세지 통신"을 통해 노드간의 입/출력 데이터를 주고 받는 처리를 하고 있다.
Message, msg :
노드는 메세지를 통해 노드간의 데이터를 주고받게 된다. 메세지는 integer, floating, boolean와 같은 변수형태이다. 메세지 안에 메세지가 있는 구조, 메세지들의 배열과 같은 구조도 사용할 수 있다.
메세지를 이용한 통신방법으로는 TCPROS, UDPROS 등이 있으며, 단방향 메세지 송/수신 방식의 TOPIC과 양방향 메세지 요청/응답 방식의 SERVICE를 이용하고 있다.
Topic?
topic은 이야깃거리다.
publisher node가 하나의 이야깃거리에 대해서 topic이라는 이름으로 master에 등록한 후, 이야깃거리에 대한 이야기를 message형태로 발행한다.
이 이야깃거리를 수신 받기를 원하는 subscriber node는 master에 등록된 토픽의 이름에 해당되는 발행자 노드의 정보를 받는다.
Service?
Topic은 비동기 방식이라 필요에 따라서 주어진 데이터를 전송하고 받기에 매우 훌륭한 방법이다. 또한 한 번의 접속으로 지속적인 메세지를 송/수신하기 때문에 지속적으로 메세지를 발송해야하는 센서 데이터에 많이 사용되고 있다.
하지만, 경우에 따라서는 요청/응답이 함께 사용되는 동기 방식의 메세지 교환 방식도 필요하다. 서비스는 이런 동기 방식의 메세지 교환 방법이다. 서비스는 토픽과 달리 1회성 메세지 통신이다. 요청/응답이 완료되면 두 노드의 접속은 끊기게 된다. 이런 서비스는 로봇에게 특정의 일을 수행하는 요청시에 명령어로써 많이 사용된다. 네트워크 부하가 적은 장점이 있다.
Parameter?
노드에서 사용되는 매개변수를 말한다. 이는 엄밀히 말하면 메세지 통신이라고 볼 수 없지만, 메세지를 이용한다는 점에서 메세지 통신의 범위에 속할 수 있다. 예를 들자면 접속하는 usb포트 및 카메라 캘리브레이션 값, 속도 및 명령어들의 최대/최저 값등의 설정 등
ros
ros는 메타 운영체제이며, 로봇 응용프로그램을 개발할 때 필요한 하드웨어 추상화, 하위 디바이스 제어, 프로세스간의 메시지 파싱, 패키지 관리, 개발환경에 필요한 라이브러리와 다양한 개발 및 디버깅 도구를 제공한다.
catkin
ROS의 빌드 시스템을 말한다. ROS의 빌드 시스템은 기본적으로 CMake(Cross platform Make)를 이용하고 있어서 package 폴더에 CMakeLists.txt라는 파일에 빌드 환경을 기술하고 있다.이는 ROS와 관련된 빌드, package 관리, package간의 의존관계 등을 편리하게 사용할 수 있도록 하고 있다.
rosbuild
catkin 빌드 시스템 이전에 사용되었던 빌드 시스템이다.
master
마스터는 노드와 노드사이의 연결 및 메시지 통신을 위한 네임 서버와 같은 역할을 한다.
roscore가 실행 명령어 이며, 마스터를 실행하면 각 노드들의 이름을 등록하고 필요에 따라 정보를 받을 수 있다. 마스터가 없이는 노드간의 접속, 토픽과 서비스와 같은 메시지 통신을 할 수 없다.
마스터는 마스터에 접속하는 슬레이브들과의 접속 상태를 유지하지 않는 HTTP기반의 프로토콜인 XMLRPC를 이용하여 슬레이브들과 통신하게 된다. 즉, 슬레이브인 노드들이 필요할 때만 접속하여 서로간의 접속 상태를 체크하지 않는다. 이러한 기능으로 매우 크고, 복잡한 환경에서도 적용 가능하다. 또한 XMLRPC는 매우 가볍고 다양한 프로그래밍 언어를 지워하고 있기 때문에 다기종 하드웨어, 다 언어를 지원하는 ROS에 매우 적합하다.
ROS를 구동하게되면 사용자가 정해놓은 ROS_MASTER_URI 변수에 기재되어 있는 URI 주소 및 포트를 갖는다. 사용자가 설정해놓지 않은 경우에는 URI 주소로 현재의 로컬 IP를 사용하고, 11311 포트를 이용하게 된다.
node
ros에서 최소 단위의 실행 프로세서를 가르키는 용어이다.
하나의 실행 가능한 프로그램으로 생각하면 된다. 하나의 목적에 하나의 노드를 작성하길 권하고 있으며 재사용이 쉽도록 구성하여 만들도록 권고하고 있다.
package
ros를 구성하는 기본 단위로써 실행 가능한 노드를 포함하고 있다.
ros는 패키지를 단위로 각각의 응용 프로그램들이 개발된다.
metapackage
공통된 목적을 가지는 패키지들을 모아둔 패키지들의 집합
massage,msg
노드는 메세지를 통해 노드간의 데이터를 주고받게된다. 메세지는 integer, floating pointer, boolean와 같은 변수 형태이다. 메세지안에 메세지를 품는 형태와 메세지들의 배열과 같은 구조도 사용할 수 있다.
topic
토픽은 이야깃거리이다. 발행자 노드가 하나의 이야깃거리에 대해서 토픽이라는 이름으로 마스터에 등록한 후 , 이야깃거리에 대한 이야기를 메세지 형태로 발행한다. 토픽을 수신 받기를 원하는 구독자 노드는 마스터에 등록된 토픽의 이름에 해당되는 발행자 노드의 정보를 받는다.
publish & publisher
발행은 토픽의 내용에 해당되는 메세지형태의 데이터를 송신하는 것을 말한다.
subscribe&subscriber
구독은 토픽의 내용에 해당되는 메세지 형태의 데이터를 수신하는 것을 말한다.
roscore
ROS 마스터를 구동하는 명령어이다. 같은 네트웍이 라면 다른 컴퓨터에서 실행하여도 된다.
단, 멀티 ROS코어를 지원하는 특수한 경우를 제외하고는 ROS코어는 동일 네트워크에서 하나만 구동되게 된다.
ROS를 구동하게 되면 사용자가 정해놓은 ROS_MASTER_URI 변수에 기재되어 있는 URI 주소 및 포트 를 갖는다. 사용자가 설정해놓지 않은 경우에는 URI 주소로 현재의 로컬 IP 를 사용하고, 11311 포트를 이용하게 된다.
parameter server
매개변수 서버는 패키지에서 매개변수 를 사용할 때, 각 매개변수를 등록하는 서버를 말한다.
매개변수 서버는 마스터의 일부분 이다.
rosrun
ROS의 기본적인 실행 명령어이다. 패키지에서 하나의 노드를 실행하는데 사용된다. 노드가 사용하는 URI 주소 및 포트는 현재 노드가 실행중인 컴퓨터에 저장된 ROS_HOSTNAME 라는 환경 변수값을 URI 주소로 사용하며, 포트는 임의적 고유의 값으로 설정되게 된다.
roslaunch
rosrun이 하나의 노드를 실행하는 명령어라면 ROS런치(roslaunch) 는 복 수개의 노드를 실행하는 개념이다.
이 명령어를 통해 정해진 단일 혹은 복수의 노드 를 실행시킬 수 있다. 그 이외의 기능으로 실행시에 패키지의 매개변수를 변경, 노드 명의 변경, 노드 네임 스페이스 설정, ROS_ROOT 및 ROS_PACKAGE_PATH 설정, 이름 변경, 환경 변수 변경 등의 실행시 변경할 수 있는 많은 옵션들을 갖춘 노드 실행에 특화된 ROS 명령어이다. ROS런치는*.launch라는ROS런치파일을 사용하여 실행 노드에 대한 설정을 해주는데 이는 XML 기반으로 되어 있으며, 태그별 옵션을 제공하고 있다.
bag
ROS에서 주고받는 메시지의 데이터를 저장할 수 있는 있는데 이를 배그라고 한다. ROS에서는 이 배그를 이용하여 메시지를 저장하고 필요로 할 때 이를 재생하여 이전 상황을 그대로 재현할 수있는 기능을 갖추고 있다.
예를들어, 센서를 이용한 로봇 실험을 실행할 때, 센서 값을 배그를 이용하여 메시지 형태로 저장한다. 이 저장된 메시지는 같은 실험을 수행하지 않아도 저장해둔 배그 파일을 재생하는 것으로 그 당시의 센서값을 반복 사용가능하다. 특히, 기록, 재생의 기능을 활용하여 반복되는 프로그램 수정이 많은 알고리즘 개발에 매우 유용하다.
ROS Wiki.
ROS의 각 패키지 및 기능들을 설명하는 페이지(http://wiki. ros.org/)이다. 각 패키지는 위키 페이지에 패키지에 대한 간단한 설명, 사용되는 매개변 수, 저작자, 라이선스, 홈페이지, 저장소, 튜토리얼등을 기술하고 있다.
repositoy
공개된 패키지의 경우, 각 패키지의 위키에 저장소를 명시하고 있다. 저장소는 패키지가 저장된 웹상의 저장소 URL 주소이며 svn, hg, git 등의 소스 관리 시스템을 이용하여 이슈, 개발, 다운로드 등을 관리하고 있다.
graph
위에서 설명한 노드, 토픽, 발행자, 구독자 관계를 그래프 를 통해 나타나게 하는 것이다. 현재 실행중인 메시지 통신을 그래프화 시킨 것으로 1회성 서비스에 대한 그래프는 작성할 수 없다. 실행은 rqt_graph 패키지의 rqt_graph 노드를 실행하면 된다. 실행 명령에는 두 가지가 있는데 rqt_graph과 rosrun rqt_graph rqt_graph 이다.
name 노드, 매개변수, 토픽, 서비스는 모두 이름을 갖고 있다. 이 이름은 마스터에 등록하고 각 노드의 매개변수, 토픽, 서비스를 사용할때 이 이름을 기반 으로 상호적으로 동작하도록 되어있다. 또한, 이름은 실행시에 변경가능하기 때문에 매우 유연하고, 같은 노드, 매개변수, 토픽, 서비스라고 하여도 다른 이름으로 중복 실행이 가능하다. 이러한 이름의 사용으로 ROS는 큰 규모의 프로젝트, 복잡한 구조의 시스템에도 적합하다.
client libray
ROS는 사용되는 언어의 의존성을 낮추기 위하여 클라이언트 라이브러리라는 이름으로 각종 언어의 개발환경을 제공하고 있다. 주요한 클라이언트 라이브러리로는 C++, Python, Lisp 등이 있으며, 그 이외에도 java, lua, .NET, EusLisp, R 등의 언어들을 사용가능하다. 이를 위해 roscpp, rospy, roslisp, rosjava, roslua, roscs, roseus, PhaROS, rosR 등의 클라이언트 라이브러리가 개발되었다.
URI (Uniform Resource Identi?er)
URI(UniformResourceIdentifier, 통합 자원 식별자) 는 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI 은 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에서 식별자로 사용된다.
MD5 ,Message-Digest algorithm 5
MD5는 128비트 암호화 해시 함수 이다.주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다.
ROS에서의 메시지를 이용한 통신에서 MD5를 이용하여 메시지 송수신의 무결성 검사를 하고 있다.
RPC(RemoteProcedureCall).
RPC란’멀리 떨어져(Remote)있는 컴퓨터 상의 프로그램이 다른 컴퓨터 내에 있는 서브프로그램(Procedure)을 불러내는(Call)’ 것을 의미한다. 컴퓨터 프로그램이 다른 주소 공간에서 원격 제어를 위한 프로그래머의 세세한 코딩 없이 함수나 프로시저의 실행을 허용하는 기술로써 대표적으로는 TCP/IP, IPX 등의 전송 프로토콜을 이용한다.
XML(ExtensibleMarkupLanguage).
XML은W3C에서 다른 특수 목적의 마크업 언어를 만드는 용도에서 권장되는 다목적 마크업 언어(markup language)로 태그 등을 이용하여 데이터의 구조를 명기하는 언어의 한 가지이다.
XMLRPC.
XML-RPC란, RPC 프로토콜의 일종으로서, 인코딩 형식에서는 XML을 채택하고, 전송 방식에서는 접속 상태를 유지하지 않고 체크하지 않는 요청/응 답 방식의 HTTP 프로토콜을 사용하고 있다. XML-RPC는 매우 단순한 규약으로서, 작은 데이터 형식이나 명령을 정의하는 정도로만 사용하고 있어서 꽤나 단순한 편이다. 이러한 특징으로, XMLRPC는 매우 가볍고, 다양한 프로그래밍 언어를 지원하고 있기 때문에 다기종 하드웨어, 다언어를 지원하는 ROS에 매우 적합하다.
TCP/IP(TransmissionControlProtocol/InternetProtocol). TCP는Transmission Control Protocol 의 약자로써, 전송 제어 프로토콜이라고 부른다.
흔히 TCP/IP 라 부르는데 이는 인터넷 프로토콜 계층의 시각에서 보면 IP(Internet Protocol) 를 기반으로 전송 제어 프로토콜인 TCP 를 사용하여 데이터의 전달을 보증하고 보낸 순서대로 송/ 수신하게 된다.
TCPROS.
메시지 및 서비스에서 사용되는 TCP/IP 기반의 메시지 방식을 TCPROS라고 한다.
UDPROS.
메시지 및 서비스에서 사용되는 UDP 기반의 메시지 방식을 UDPROS라고 한다.
일반적으로 ROS에서는 사용되지 않고 있다.
CMakeLists.txt.
ROS의 빌드 시스템인 캐킨은 기본적으로 CMake를 이용 하고 있어서 패키지 폴더에 CMakeLists.txt 라는 파일에 빌드 환경을 기술하고 있다.
package.xml.
패키지의 정보를 담은 XML 파일로써 패키지의 이
름, 저 작자, 라이선스, 의존성 패키지 등을 기술하고 있다
댓글 없음:
댓글 쓰기