ROS 용어 정리
Node
최소 단위의 실행 가능한 프로세스를 가리키는 용어로써 하나의 실행 가능한 프로그램으로 생각하면 된다.
ROS에서는 최소한의 실행 단위로 프로그램을 나누어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고 받는다. Node의 공유를 통해서 개발시간을 단축시킬 수 있는 장점이 있다.
Package
하나 이상의 노드, 노드 실행을 위한 정보등을 묶어놓은것
Message
메시지를 통해 노드간의 데이터를 주고받게 된다. 메시지는 integer, floatingpoint, boolean와 같은 변수 형태이다.
또한, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.
Topic
단방향성, 연속성을 가진 메시지 통신 방법 중 하나(network, cpu 사용률이 높다.)
Topic에 대해 1:1의 Publisher, Subscriber 통신도 가능하며, 목적에 따라서 1:N, N:1, N:N통신도 가능하다.
Publisher
Topic을 보내는 애
Subscriber Node
Topic을 받는 애
Service
양방향성, 일회성을 가진 메시지 통신 방법
Topic은 정보를 계속 보내는데 Service는 한번 보내고 접속이 끊김.
Service server
Service를 보내는 애
Service client
Service를 요청하는 애
Action
Service와 비슷하지만 중간중간 피드백이 있는 메시지 통신 방법
Action server
Action 명령을 수행하는 걸 받아서 실제로 처리하는 애
Action client
Action을 요청하는 애
※ROS에서 90%는 Topic을 사용한다. 5~10%는 Service를 사용하고 Action은 빈도가 많이 떨어진다.
Action은 프로그램이 많이 복잡하고 실행시간이 길때 사용된다.
노드간의 메시지 통신 단계
1. 마스터 구동: XMLRPC(XML-Remote Procedure Call)
마스터: Node들의 정보를 관리해서 Node들의 통신을 연결하는 매개체
$roscore
2. 서브스크라이버 노드(Node) 구동
$rosrun 패키지이름 노드이름
실행되면 서브스크라이버 노드 정보(Node 이름, Topic 이름, 어떤 형태의 메시지를 보낼것인지, ip번호, 포트번호)를 마스터에게 전달
3. 퍼블리셔 노드(Node) 구동
$rosrun 패키지이름 노드이름
실행되면 퍼블리셔 노드 정보 (Node 이름, Topic 이름, 어떤 형태의 메시지를 보낼것인지, ip번호, 포트번호)를 마스터에게 전달
4. 퍼블리셔 정보 알림
마스터는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알린다.
5. 퍼블리셔 노드에 접속 요청
마스터로부터 받은 퍼블리셔 정보를 이용하여 TCPROS 접속을 요청
6. 서브스크라이버 노드에 접속 응답
접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송
7. TCP 접속
TCPROS를 이용하여 퍼블리셔 노드와 직접 연결한다.
8. 메시지 전송
발행자 노드는 서브스크라이버 노드에게 메시지(토픽)를 전송
※서비스 요청 및 응답
1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.
※ rosrun은 Command Line Tool 중 하나로 Node 하나를 실행시킬때 사용하는 명령어이다.
파라미터
파라미터는 로봇 시스템의 동작을 조정하는 설정값을 의미한다. 이를 통해 동일한 코드를 다양한 상황에 맞게 쉽게 재사용할 수 있다.
ROS 메세지
메세지는 노드 간에 데이터를 주고받을 때 사용하는 데이터의 형태
- 토픽, 서비스, 액션은 모두 메세지를 사용
- 단순 자료형 예) 정수(integer), 부동 소수점(floating point), 불(boolean)
- 메세지 안에 메세지를 품고 있는 간단한 데이터 구 예) geometry_msgs/PoseStamped
- 메세지들이 나열된 배열과 같은 구조 예) float32[] ranges 예) sensor_msgs/LaserScan
네임(Names)
노드, 메세지(토픽, 서비스, 액션, 파라미터)가 가지는 고유의 식별자
ROS는 그래프(graph)라는 추상 데이터 형태(abstract data type) 지원
글로벌(global)
문자 없이 네임을 바로 쓰거나 네임 앞에 슬래쉬(/)를 붙임.
프리베이트(private)
네임 앞에 틸트(~)를 붙임.
좌표 변환(TF, transform)
각 조인트(joint)들의 상대 좌표 변환
트리(tree) 형태로 조인트들간의 관계도를 표시함.
클라이언트 라이브러리(Client Library)
다양한 프로그래밍 언어 지원
- roscpp, rospy, roslisp
- rosjava, roscs, roseus, rosgo, roshask, rosnodejs, RobotOS.jl, roslua
- PhaROS, rosR, rosruby, Unreal-Ros-Plugin
- MATLAB for ROS
- LabVIEW for ROS
Rviz
ROS의 3D 시각화툴
로봇 외형의 표시와 계획된 동작을 표현
내비게이션
매니퓰레이션
원격제어
RQT
플러그인 방식의 ROS의 종합 GUI 툴
Gazebo
로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환경 모델등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2024 ROS 스터디] 김기태 #2주차 - ROS의 중요컨셉&명령어와 도구 (1) | 2024.07.14 |
---|---|
[2024 ROS 스터디] 초라핀스카 베로니카 #2주차 - ROS에서 쓰이는 용어 및 도구 (0) | 2024.07.13 |
[2024 ROS 스터디] 반제호 #2주차 - ROS의 컨셉과 RViz (0) | 2024.07.12 |
[2024 ROS 스터디] 이연수 #1주차 - ROS 소개 (0) | 2024.07.08 |
[2024 ROS 스터디] 김기태 #1주차 - ROS 소개 및 설치하기 (0) | 2024.07.07 |