ROS 용어 정리
Node
최소 단위의 실행 가능한 프로세서를 가리키는 용어로써 하나의 실행 가능한 프로그램으로 생각하면 된다. ROS에서는 최소한의 실행단위로 프로그램을 나누어 작업하게 된다. 각 노드는 메시지 통신으로 데이터를 주고 받는다. Node 별로 프로그램을 짜면 각각의 기능별로 유닛 테스트를 행할 수 있고, 내가 짜고자 하는 로직에 집중할 수 있다는 장점이 있다.
Package
하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것. 또한, 패키지의 묶음을 메타 패키지라 하여 따로 분리한다.
Message
메시지를 통해 노드 간의 데이터를 주고받게 된다. 메시지는 integer, floating point, boolean와 같은 변수 형태이다. 또한, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용할 수 있다.
Message 통신 방식
목적에 따라 Topic, Service, Action 등의 통신 방법을 사용하는데, 대부분 ROS에선 90% 이상 Topic의 방식을 많이 사용한다.
1) Topic
ROS에서 쓰고 있는 단방향 통신 방법으로 연속성을 가진다. Topic은 센서 데이터 등 일방적으로 데이터를 보내야 하는 상황에 많이 사용한다. 메시지를 보내는 사람을 Publisher, 메시지를 받는 사람을 Subscriber라고 한다.
2) Service
양방향 통신 방법으로 일회성의 특징을 띤다.
ex) 로봇에게 x좌표 30도, y좌표 45도로 이동하라고 요청을 보내면, 서비스 서버는 그것에 맞춰 로봇을 동작시키거나 관련된 프로세서를 처리하게 된다. 그 후, 서비스를 처리하고 나선 처리 상태를 클라이언트 딴에 알려주게 된다.
3) Action
Service와 비슷하나, 중간 단계에서 피드백이 추가됐다는 점에서 차이가 있다. 보통 복잡한 테스크나 중간 단계의 결과값이 필요할 때 사용된다.
Message 통신 개념
1) 마스터 구동
XMLRPC(XML-Remote Procedure Call) -> XML 기반의 아주 간단한 서버-클라이언트 시스템
$ roscore
노드 정보들을 관리한다. 실행되는 노드들의 정보들을 관리해서 노드들의 통신을 연결시켜주는 매개체 역할을 한다.
2) 서브스크라이버 노드(Node) 구동
$rosrun 패키지이름 노드이름
subscriber node가 실행되자마자 노드 정보(노드 이름, 토픽 이름, 메시지 형태, ip 번호, 포트 번호)를 마스터에게 전달해준다. (마스터가 노드 정보 관리하기 때문)
3) 퍼블리셔 노드(Node) 구동
$rosrun 패키지이름 노드이름
publisher node가 실행되자마자 노드 정보(노드 이름, 토픽 이름, 메시지 형태, ip 번호, 포트 번호)를 마스터에게 전달해준다. (마스터가 노드 정보 관리하기 때문)
4) 퍼블리셔 정보 알림
마스터는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알린다.
5) 퍼블리셔 노드에 접속 요청
마스터로부터 받은 퍼브리셔 정보를 이용하여 TCPROS 접속을 요청(이제 마스터는 필요 X)
6) 서브스크라이버 노드에 접속 응답
접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송
7) TCP 접속
TCPROS를 이용하여 퍼블리셔 노드와 직접 연결한다.
8) 메시지 전송
발행자 노드느 서브스크라이버 노드에게 메시지를 전송(토픽)
9) 서비스 요청 및 응답
1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.
Message 통신 예제
←→↑↓의 키보드 입력이 메시지 형태로 전달되어 해당 방향으로 거북이를 움직이는 예제
roscore
rosrun turtlesim turtlesim_node // turtlesim이란 패키지 안에 turtlesim_node라는 노드 하나를 실행시켜라.
rusrun turtlesim turtle_teleop_key
rosrun rqt_graph rqt_graph
추가 용어 정리
Name
노드, 메시지(토픽, 서비스, 액션, 파라미터) 가지는 고유의 식별자로, ROS는 그래프라는 추상 데이터 형태를 지원
▪︎ 글로벌(global) : 문자 없이 네임을 바로 쓰거나 네임 앞에 슬래쉬(/)를 붙임.
▪︎ 프리베이트(private): 네임 앞에 틸트(~)를 붙임.
좌표변환(TF, transform)
각 조인트(joint)들의 상대 좌표 변환.
트리 형태로 조인트들간의 관계도를 표시함
* 참고 링크
https://www.youtube.com/watch?v=skqzz_xQQXg&list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&index=5
'Autonomous Driving > ROS' 카테고리의 다른 글
SLAM과 내비게이션 (2) | 2023.02.05 |
---|---|
[ROS] ROS 기본 프로그래밍 (0) | 2023.01.29 |
ROS 명령어 (0) | 2023.01.21 |
ROS에 대해 알아보자 (0) | 2023.01.15 |