ROS 1 의 특징, 구조, 빌드 시스템과 용어에 대한 정리입니다.
ROS 용어 정리
마스터 : 노드와 노드 사이의 연결과 메시지 통신을 위한 네임서버와 같은 역할을 함. roscore 명령어로 실행 가능.
- ROS_MASTER_URI 변수에 기재된 URI 주소와 포트를 가짐.
- 기본값으로 URI 주소는 현재 로컬 IP를 가지며 포트를 11311을 가짐.
노드 : ROS에서 실행되는 최소단위의 프로세서.
- 하나의 목적에 하나의 노드를 작성하길 권고. 재사용이 쉽게 개발할 것.
- 구동과 함께 마스터에 노드 이름과 publisher, subscriber, service server, service client 에서 사용하는 토픽 및 서비스 이름, 메시지 형태, URI 주소와 포트를 등록함.
- 등록된 정보를 통해 노드 사이에서 토픽과 서비스를 사용하여 메시지를 주고받음.
패키지 : ROS를 구성하는 기본 단위
- 최소한 하나 이상의 노드를 포함시키거나 다른 노드를 실행하기 위한 설정 파일들을 포함 함.
- 각종 프로세스를 구동하기 위한 ROS 의존성 라이브러리, 데이터셋, 설정 파일 등 패키지에 필요한 모든 파일을 포함.
메타 패키지 : 공통된 목적을 지닌 패키지들의 집합.
메시지 : 노드 간의 데이터를 주고받을 수 있게 하는 매게체
- integer, floating, point, boolean 과 같은 변수형태.
- 메시지 안에 메시지를 품고 있는 간단한 데이터 구조와 메시지들이 나열된 배열과 같은 구조로 사용할 수 있다.
- 단방향 메시지 송수신 방식의 토픽과 양방향 메시지 요청/응답 방식의 서비스 이용.
토픽 : 퍼블리셔 노드가 하나의 주제에 대해서 토픽으로 마스터에 등록한 후 주제에 대한 내용을 메시지 형태로 퍼플리시.
서브스크라이버 : 토픽의 내용에 해당되는 메시지 형태의 데이터를 수신하는 것.
- 서브스크라이버 노드는 서브스크라이브를 수행하기 위해서, 토픽을 포함한 자신의 정보들을 마스터에 등록하고, 구독하고자 하는 토픽을 퍼블리시 하는 퍼블리셔 노드의 정보를 마스터로부터 받는다.
- 위 정보를 기반으로 서브스크라이버 노드는 퍼블리셔 노드와 직접 접속하여 메시지를 받는다.
- 서브스크라이버는 이를 실행하는 개체로써 노드에서 선언함.
- 서브스크라이버는 하나의 노드에서 복수로 선언할 수 있다.
- 퍼블리시와 서브스크라이브 개념의 토픽 통신 방식은 비동기 방식이여서 필요에 따라 주어진 데이터를 전송하고 받기에 적합함.
- 한 번의 접속으로 지속적인 메시지를 송수신 하기 때문에 지속해서 메시지를 발송해야 하는 센서 데이터에 적합하여 많이 사용됨.
- 때에 따라서 요청과 응답이 함께 사용되는 동기 방식의 메시지 교환 방식도 필요함. 이에 따라 ROS 에서는 service 라는 이름으로 메시지 동기 방식으로 제공.
서비스 : 특정 목적의 작업에 해당되는 서비스를 요청하는 서비스 클라이언트와 서비스 응답을 담당하는 서비스 서버 간의 동기적 양방향 서비스 메시지 통신을 말함.
서비스 서버 : 요청을 입력으로 받고, 응답을 출력으로 하는 서비스 메시지 통신의 서버 역할을 함.
- 요청과 응답은 모두 메시지로 되어 있음.
- 서비스 요청을 받으면 지정된 서비스를 수행한 다음에 그 결과를 서비스 클라이언트에 전달.
파라미터 : 노드에서 사용되는 파라미터
- 디폴트(default)로 설정값들이 정해져 있고, 필요에 따라 외부에서 읽거나 쓸 수 있다.
- 외부에서 쓰기 기능을 이용하여 상황에 따라 설정값을 실시간으로 수정가능.
파라미터 서버 : 패키지에서 파라미터를 사용할 때, 각 파라미터를 등록하는 서버를 말함.
캐킨(catkin) : ROS의 빌드 시스템
- 기본적으로 CMake(Cross Platform Make) 를 이용하고 있어서 패키지 폴더에 CMakeLists.txt 라는 파일에 빌드환경을 기술.
- ROS 에서는 CMake 를 ROS 에 맞게 수정하여 ROS 에 특화된 캐킨 빌드 시스템을 만듬.
ROS 빌드 : 캐킨 빌드 시스템 이전에 사용되었던 빌드 시스템
roscore : ROS 마스터를 구동하는 명령어
- 같은 네트워크라면 다른 컴퓨터에서 실행해도 된다.
- 멀티 roscore 를 지원하는 특수한 경우에는 불가.
- 구동시에 사용자가 정해놓은 ROS_MASTER_URI 변수에 기재된 URI 포트를 사용하게 된다.
- 사용자가 설정해 놓지 않았다면 URI 주소로 현재의 로컬 IP 를 사용하고, 11311 포트를 사용.
rosrun : ROS 의 기본 실행 명령어. 패키지에서 하나의 노드를 실행하는데 사용 됨.
- 노드가 사용하는 URI 주소와 포트는 현재 노드가 실행 중인 컴퓨터에 저장된 ROS_HOSTNAME 환경 변숫값을 URI 주소로 사용.
roslaunch : rosrun 이 하나의 노드를 실행한다면, roslaunch 는 여러 노드를 실행하는 개념.
- 하나 이상의 노드 실행 가능.
- 노드를 실행할 때 패키지의 파라미터나 노드 이름 변경, 노드 네임스페이스 설정, ROS_ROOT 및 ROS_PACKAGE_PATH 설정, 환경 변수 변경 등 다양한 옵션을 갖춤.
- .launch 파일을 사용하여 실행 노드에 대한 설정을 해주는데 이는 XML(Extensible Markup Language) 에 기반을 두고 있으며, XML 태그 형태의 다양한 옵션을 제공함.
bag : ROS 에서 주고받는 메시지의 데이터를 지정할 때 사용하는 파일 포맷
- 확장자.log
- 메시지를 저장하고 필요시에 재생하여 이전 상황을 그대로 재현할 수 있음.
네임 : 마스터에 등록된 노드, 파라미터, 토픽, 서비스의 이름
- 실행시에 변경이 가능하여 유연하게 사용이 가능함.
- 같은 노드, 파라미터, 토픽, 서비스라고 하여도 다른 네임으로 중복하여 사용이 가능.
클라이언트 라이브러리 : 사용되는 언어의 의존성을 낮추기 위해 제공하는 각종 언어의 개발환경.
- C++, Python, Lisp, Java, Lua 등.
- 이를 위해 roscpp, rospy, roslisp 등의 라이브러리가 개발됨.
'ROS > ROS1' 카테고리의 다른 글
[ROS1] 005 : ROS 1 turtlesim 패키지 사용해보기 (0) | 2023.08.26 |
---|---|
[ROS1] 003 : ROS melodic Jetson Nano에서 QT 기반 package 개발하기(Qt creator 설치, qt-ros plugin 설치 불가 문제 해결) - 1 (0) | 2023.02.20 |
[ROS1] 002 : ROS melodic 명령어 정리 (0) | 2023.02.18 |
[ROS1] 001 : ROS 1 melodic && noetic 한줄 설치 & 개별 설치 정리 (Ubuntu 20.04) (0) | 2023.02.17 |