반응형
ROS 란?
- 로봇의 응용프로그램을 개발하기 위한 운영체제와 같은 로봇 소프트웨어 플렛폼.
- 하드웨어 추상화
- 하위 디바이스 제어
- 센싱, 인식, 지도작성, 모션플래닝 등의 기능 구현
- 프로세스 간의 메시지 파싱
- 패키지 관리
- 개발환경에 필요한 라이브러리와 다양한 개발 및 디버깅 도구 제공
Master 란?
- 노드와 노드 사이의 연결과 메시지 통신을 위한 네임 서버와 같은 역할.
- roscore가 실행명령어이며, 마스터를 실행하면 각 노드의 이름을 등록하고 필요에 따라 정보를 받을 수 있음.
- 마스터 없이는 노드 간의 접속, 토픽과 서비스와 같은 메시지 통신을 할 수 없음.
- 마스터는 마스터에 접속하는 슬레이브들과의 접속상태를 유지하지 않는 HTTP기반의 프로토콜인 XMLRPC를 이용하여 통신.
즉, 슬레이브인 노드들이 필요할 때만 접속하여 자신의 정보를 등록하거나 다른 노드의 정보를 요청하여 수신받음. - ROS를 구동하면 마스터는 사용자가 정해놓은 ROS_MASTER_URI변수에 기재된 URI주소와 포트를 가짐.
만약, 사용자가 설정해 놓지 않았다면 기본값으로 URI주소는 localhost를 사용하고 포트는 11311을 이용.
Node 란?
- ROS에서 실행되는 최소 단위의 실행가능한 프로세서를 지칭.
따라서 하나의 목적에 하나의 노드를 작성하길 권하며, 재사용이 쉽게 개발하기를 권함. - 노드는 구동과 함께 마스터에 노드 이름과 Publisher, Subscriber, Service Server, Service Client에서 사용하는 토픽 및 서비스 이름, 메시지 형태, URI 주소와 포트를 등록.
- 이 정보를 기반으로 각 노드는 노드끼리 토픽과 서비스를 이용하여 메시지를 주고 받음.
- 마스터와 통신할 때는 XMLRPC를 이용하며, 노드간의 통신에서는 XMLRPC나 TCPROS (TCP/IP)를 이용.
- URI와 포트는 현재 노드가 실행중인 컴퓨터에 저장된 ROS_HOSTNAME이라는 환경변숫값을 URI 주소로 사용하며, 포트는 임의의 고윳값으로 설정됨.
Package 란?
- ROS를 구성하는 기본 단위. 응용프로그램은 패키지 단위로 개발되며, 패키지는 최소한 하나 이상의 노드를 포함하거나 다른 패키지의 노드를 실행하기 위한 설정 파일들을 포함.
- 더불어 각종 프로세스를 구동하기 위한 ROS의존성 라이브러리, 데이터셋, 설정 파일 등 패키지에 필요한 모든 파일을 포함.
Metapackage란?
- 공통된 목적을 지닌 패키지들의 집합을 말함.
- 예를 들어, Navigation의 메타패키지는 AMCL, DWA, EKF, map_server등 10여개의 패키지로 구성.
메시지란?
- 노드는 메시지를 통해 노드 간의 데이터(int, float, point, bool , list 등)를 주고 받음.
- 메시지를 이용한 통신방식으로는 TCPROS, UDPROS 방식 등이 있으며, 단방향 메시지 송수신 방식의 토픽과 양방향 메시지 요청/응답 방식의 서비스를 이용.
Topic 이란?
- Topic은 "이야깃거리"이며, Publisher 노드가 하나의 이야깃거리에 대해서 Topic으로 마스터에 등록한 후, 이야깃거리에 대한 이야기를 메시지 형태로 퍼블리시함.
- 이 이야깃거리를 수신받기를 원하는 Subscriber 노드는 마스터에 등록된 토픽의 이름에 해당하는 퍼블리셔 노드의 정보를 받음.
- 이 정보를 기반으로 Subscriber 노드는 Publisher 노드와 직접 연결하여 메시지를 토픽으로 송수신함.
- Publish와 Subscribe 개념의 토픽 통신방식은 비동기 방식이라 필요에 따라 데이터를 송수신하기에 훌륭한 방식이며, 한 번의 접속으로 지속적인 메시지를 송수신하기에 지속해서 메시지를 발송해야 하는 센서 데이터에 적합하며 많이 사용됨 (지속적 메시지 통신).
Publish와 Publisher 란?
- Publish: Topic의 내용에 해당하는 메시지 형태의 데이터를 송신하는 것.
- Publisher: Publish를 수행하기 위해 Topic을 포함한 자신의 정보들을 마스터에 등록하고, Subscriber 노드에 메시지를 보냄.
+ 추가로 하나의 노드에서 복수로 선언할 수 있음.
Subscribe와 Subscriber 란?
- Subscribe: Topic의 내용에 해당하는 메시지 형태의 데이터를 수신하는 것.
- Subscriber: Subscribe를 수행하기 위해 Topic을 포함한 자신의 정보를 마스터에 등록하고, Subscribe하고자 하는 Topic을 Publish하는 Publisher 노드의 정보를 마스터로부터 받음.
+ 추가로 하나의 노드에서 복수로 선언할 수 있음.
Service 란?
- Service 메시지 통신은 특정 목적의 작업에 해당되는 서비스를 요청(request)하는 서비스 클라이언트와 서비스 응답(reponse)을 담당하는 서비스 서버 간의 동기적 양방향 서비스 메시지 통신을 말함.
- 서비스 요청과 응답이 완료되면 연결된 두 노드의 접속은 끊김 (일회성 메시지 통신).
Service Server 란?
- Service server는 요청을 입력으로 받고 응답을 출력으로 하는 서비스 메시지 통신의 서버 역할.
- 요청과 응답은 모두 메시지로 되어 있으며, 서비스 요청을 받으면 지정된 서비스를 수행한 다음에 그 결과를 서비스 클라이언트에 전달.
Service Client 란?
- Service client는 요청을 출력으로 하고 응답을 입력으로 받는 서비스 메시지 통신의 클라이언트 역할.
- 요청과 응답은 모두 메시지로 되어 있으며, 서비스 요청을 서비스 서버에 전달하고 그 결과값을 받음.
Action 란?
- Action은 Service처럼 양방향을 요구하나 요청 처리 후 응답까지 오랜 시간이 걸리고 중간 결괏값이 필요한 경우에 사용되는 메시지 통신을 말함.
- Action 메시지도 Service와 유사하게 요청과 응답에 해당하는 목표(goal)와 결과(result)가 있고, 중간 결괏값에 해당하는 피드백(feedback)이 추가됨.
- 구성은 Action의 Goal를 정하는 Action Client와 목표에 맞추어 정해진 일을 수행하고 Action Feedback과 Result를 전달하는 Action Server로 구성되어, 이들간 비동기식 양방향 메시지 통신을 수행
Action Server 란?
- Service server는 요청을 입력으로 받고 응답을 출력으로 하는 서비스 메시지 통신의 서버 역할.
- 요청과 응답은 모두 메시지로 되어 있으며, 서비스 요청을 받으면 지정된 서비스를 수행한 다음에 그 결과를 서비스 클라이언트에 전달.
Action Client 란?
- Service client는 요청을 출력으로 하고 응답을 입력으로 받는 서비스 메시지 통신의 클라이언트 역할.
- 요청과 응답은 모두 메시지로 되어 있으며, 서비스 요청을 서비스 서버에 전달하고 그 결과값을 받음.
Parameter 란?
- Parameter는 노드에서 사용되는 파라미터를 말하며, 흔히 윈도우 프로그램에서 *.ini 설정 파일과 유사함.
- Parameter는 default로 설정값들이 지정되어 있고, 필요에 따라 외부에서 실시간으로 읽거나 쓸 수 있음.
Parameter Server란?
- Parameter Server 패키지에서 파라미터를 사용할 때, 각 Parameter를 등록하는 서버를 말함.
- Parameter Server는 마스터의 한 기능이기도 함.
Catkin 이란?
- catkin은 ROS의 빌드 시스템이며, CMake를 ROS에 맞게 수정하여 ROS에 특화된 빌드 시스템.
- 기본적으로 CMake(Cross Platform Make)를 이용하고 있어 패키지 폴더에 CMakeLists.txt라는 파일에 빌드 환경을 기술.
- catkin을 이용하면 ROS와 관련된 빌드, 패키지 관리, 패키지 간의 의존관계 등을 편리하게 사용할 수 있음.
- 현 시점에서 ROS를 사용한다면 rosbuild가 아닌 Catkin을 사용해야 함.
rosbuild 란?
- rosbuild는 catkin 빌드 시스템 이전에 사용되었던 빌드시스템.
- 만약 rosbuild 빌드 시스템을 사용한 이전 패키지를 사용해야만 한다면 rosbuild를 catkin으로 변경하여 사용하기를 추천.
roscore 이란?
- ROS 마스터를 구동하는 명령어.
- 같은 네트워크라면 다른 컴퓨터에서 실행해도 되지만, 같은 네트워크 에서 하나만 구동됨(멀티 roscore를 지원하는 경우를 제외).
- ROS를 구동하면 사용자가 정해놓은 ROS_MASTER_URI 변수에 기재된 URI주소와 포트를 사용(default: localhost:11311).
rosrun 이란?
- ROS 의 기본 실행 명령어이며, 패키지에서 하나의 노드를 실행하는데 사용.
- 노드가 사용하는 URI 주소와 포트는 현재 노드가 실행 중인 컴퓨터에 저장된 ROS_HOSTNAME 환경 변숫값을 URI 주소로 사용하며, 포트는 임의의 고윳값으로 설정.
roslaunch 란?
- rosrun은 하나의 노드를 실행하는 명령어라면 roslaunch는 여러 노드를 실행하는 개념.
- 하나 이상의 노드를 실행시키는 것 외의 다른 기능은 노드를 실행할 때 패키지의 파라미터나 노드 이름 변경, 노드네임스페이스 설정, ROS_ROOT 및 ROS_PACKAGE_PATH 설정, 환경변수 변경 등 많은 옵션을 갖춘 노드 실행에 특화된 ROS 명령.
- roslaunch는 *.launch 파일을 사용하여 실행노드에 대한 설정을 해주는데 이는 XML 태그 형태로 다양한 옵션을 제공.
bag 란?
- ROS에서 주고받는 메시지의 데이터는 저장할 수 있는데 이때 사용되는 파일 포맷을 bag라고 하며 확장자 *.bag를 사용.
- bag를 이용하여 메시지를 저장하고 필요할 때 이를 재생하여 이전 상황을 그대로 재현가능.
- 예를 들어, 센서를 이용한 로봇 실험을 실행할 때, 센서값을 bag를 이용하여 저장해놓으면 그 당시의 실험값을 반복 사용가능.
repository 이란?
- 공개된 패키지의 경우, 각 패키지의 위키(http://wiki.ros.org/ko)에 repository 명시.
- repository는 패키지가 저장된 웹상의 URL 주소이며 svn, hg, git 등의 소스 관리 시스템을 이용하여 이슈, 개발, 내려받기 등 관리.
name 이란?
- 노드, 파라미터, 토픽, 서비스에는 모두 name가 있음.
- name는 마스터에 등록하고 각 노드의 파라미터, 토픽, 서비스를 사용할 때 이름을 기반으로 검색, 메시지를 전송함.
- 또한 name는 실행할 때 변경할 수 있기 때문에 매우 유연하고, 같은 노드, 파라미터, 토픽, 서비스라고 하여도 다른 네임으로 중복하여 사용할 수 있음.
- 이런 name의 사용으로 ROS는 큰 규모의 프로젝트, 복잡한 구조의 시스템에도 적합.
Client Library 란?
- ROS는 사용되는 언어의 의존성을 낮추기 위해 Client Library로 각종 언어의 개발환경을 제공.
- 주요한 Client Library로는 C++, python, Lisp 가 있으며, Java, Lua, .NET, EusLisp, R 등의 언어들을 사용할 수 있음.
- 이를 위해 roscpp, rospy, roslisp, rosjava, roslua, roscs, roseus, PhaROS, rosR 등의 Client Library가 개발.
URI (Uniform Resource Identifier) 란?
- 인터넷에 있는 자원을 나타내는 유일한 주소.
- URI는 인터넷에서 요구되는 기본 조건으로 인터넷 프로토콜에서 식별자로 사용.
RPC (Remote Procedure Call) 란?
- 멀리 떨어져(Remote) 있는 컴퓨터 상의 프로그램이 다른 컴퓨터 내에 있는 서브 프로그램(Procedure)을 불러내는 것.
- 컴퓨터 프로그램이 다른 주소 공간에서 원격 제어를 위한 프로그래머의 세세한 코딩 없이 함수나 프로시저의 실행을 허용하는 기술로서 TCP/IP, IPX 등의 전송 프로토콜을 이용.
XMLRPC 란?
- RPC 프로토콜의 일정으로서 인코딩 형식에서는 XML을 채택하고, 전송방식에서는 접속상태를 유지하지 않고 점검하지 않는 요청과 응답 방식의 HTTP 프로토콜을 사용.
반응형
'Study: Robotics(Robot) > Robot: ROS(Robot Operating Sytem)' 카테고리의 다른 글
[ROS] ROS URDF vs. Gazebo SDF: Link Pose, Joint Pose, Visual & Collision (0) | 2023.10.27 |
---|---|
[ROS] ROS TF 좌표계 및 변환 (0) | 2023.10.26 |
[ROS] ROS rosrun 실행파일 만들기(python, cpp) (0) | 2023.10.12 |
[ROS] ROS Docker Official Image, Docker Compose 파일 (0) | 2023.05.03 |
[ROS] Why ROS2? (feat. ROS1 vs ROS2) (0) | 2022.11.30 |