ROS2 기본 개념(노드, 토픽, 서비스, 액션)
ROS가 무엇일까?
- 운영체제와 비슷한 하드웨어 추상화를 포함하고 있으면서도 전통적인 운영체제는 아니기에 이기종 하드웨어에서도 사용할 수 있는 특징이 있다.
- 이기종 하드웨어
- 임베디드 시스템과 같이 다양한 제조사의 센서, 마이크로컨트롤러 등이 혼합되어 하나의 시스템을 이루는 것
- 이기종 하드웨어
- 로봇 응용 프로그램을 개발하기 위해 로봇에 특화된 다양한 개발환경을 제공하는 로봇 소프트웨어 플랫폼이자 로봇 소프트웨어 개발을 위한 일종의 툴
ROS2 기본 개념
- 노드(Node)
- 프로그램의 재사용성을 극대화하기 위해 최소 단위의 실행 가능한 프로세스라고 정의한 단어
- 원본 영상을 출력하는 카메라 드라이버
- 원본 영상에 필터링 하는 필터 노드
- 필터링된 영상에서 특징점을 추출하는 노드
- 특징점을 이용해 물건을 검출하는 노드
ros2 run
명령어를 통해서 노드를 실행한다.ros2 launch
를 이용해서 하나 이상의 노드를 실행시킬 수 있다.-
rqt_graph
명령어를 통해 노드와 노드 간의 메시지 통신을 그래프 형태로 볼 수 있다.# tutlesim 패키지의 특정 노드를 실행 ros2 run turtlesim tutlesim_node ros2 run turtlesim tutle_teleop_key
-
ros2 node list
명령어로 현재 개발환경에서 동작 중인 노드 목록을 볼 수 있다.- rqt_graph 는 rqt 플러그인 형태로 실행되어 위와 같은 노드를 만들게 되는데, rqt는 다양한 툴을 복수 개 실행할 수 있도록 하기 위해 노드 이름 뒤에 프로세스 아이디가 붙는다.
ros2 run turtlesim turtlesim_node __node:=new_turtle
처럼 명령어를 입력하면 동일 노드를 다른 이름으로 복수 개 실행할 수 있다.
- 프로그램의 재사용성을 극대화하기 위해 최소 단위의 실행 가능한 프로세스라고 정의한 단어
- 패키지(Package)
- 하나 이상의 노드 또는 노드 실행을 위한 정보 등을 묶어 놓은 것
- 메타패키지(Metapackage)
- 패키지의 묶음
- 메시지(Message)
- 노드와 노드 사이에 주고 받는 데이터
- Integer, Floating point, Boolean, String 과 같은 데이터 형태이며 메시지 안에 메시지를 품고 있는 데이터 구조 또는 배열로도 사용할 수 있음
- 메시지를 주고 받는 통신 방법에 따라 토픽(Topic), 서비스(Service), 액션(Action), 파라미터(Parameter)로 나눌 수 있음
-
토픽(Topic)
- Node A - Node B처럼 비동기식 단방향 메시지 송수신 방식으로 msg 인터페이스 형태의 메시지를 퍼블리시하는 Publisher 와 메시지를 서브스크라이브하는 Subscriber 간의 통신
- 1:1 통신을 기본으로 하지만 구성 방식에 따라 1:N, N:1, N:N 통신도 가능
- ROS 메시지 통신에서 가장 널리 사용되는 방법
- 노드는 하나 이상의 토픽을 퍼블리시할 수 있을 뿐만 아니라 동시에 토픽을 서브스크라이브하는 Subcriver 역할도 동시에 수행할 수 있다.
- 기본 특징으로 비동기성과 연속성을 가지고 있어서 센서 값 전송 및 항시 정보를 주고 받아야 하는 부분에서 주로 사용된다.
ros2 node info /turtlesim
- tutlesim 노드의 토픽 정보를 확인할 수 있다.
- 서브스크라이브 하고 있는 msg와 퍼블리시 하고 있는 msg가 무엇인지 알 수 있다.
ros2 topic info /turtle1/cmd_vel
- 토픽 메시지 형태, 토픽의 퍼블리셔 및 서브스크라이버 정보를 확인할 수 있다.
ros2 topic echo /turtle1/cmd_vel
- /turtle1/cmd_vel 토픽의 값을 확인할 수 있다.
- teleop_turtle 노드를 실행한 터미널 창에서 키보드를 눌러 내린 명령에 대한 값을 확인할 수 있음
ros2 topic bw /turtle1/cmd_vel
- 송수신 받는 토픽의 초당 대역폭을 볼 수 있다.
ros2 topic hz /turtle1/cmd_vel
- 토픽의 전송 주기를 확인할 수 있다.
ros2 topic pub <topic_name> <msg_type> "<args"
- 토픽을 직접 퍼블리시 하는 명령어이다.
ros2 bag record <topic_name1> <topic_name2> <topic_name3>
- 퍼블리시되는 토픽을 파일 형태로 저장하고 필요할 때 저장된 토픽을 다시 불러와 동일한 주기로 재생할 수 있는 기능이다.
ros2 bag info rosbag2_2023_12_19-23_35_31/
- rosbag 파일의 정보를 확인할 수 있다.
ros2 bag play rosbag2_2023_12_19-23_35_31/
- rosbag 를 재생한다.
-
서비스(sevice)
- Node A - Node B 처럼 동기식 양방향 메시지 송수신 방식
- 서비스 요청을 하는 쪽을 Sevice Client, 요청 받은 서비스를 수행한 후 응답하는 쪽을 Service Server 라고 한다.
- 특정 요청을 하는 클라이언트 단과 요청받은 일을 수행한 후에 결과값을 전달하는 서버 단과의 통신이다.
ros2 service list -t
- 서비스 목록과 형태를 볼 수 있다.
ros2 service call <service_name> <service_type> "<arguments>"
- 서비스 요청 방법이다.
ros2 service call /clear std_srvs/srv/Empty
- /clear 서비스를 요청하는 방법이다.
- turtlesim 창에서 표시된 이동 궤적을 지우는 서비스이다.
ros2 service call /kill turtlesim/srv/Kill “name: ‘turtle1’”
- 지정된 이름의 거북이를 없앤다.
ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 255, g: 255, b: 255, width: 10}"
- r, g, b 값을 조합하여 궤적의 색을 지정하고, width 로 궤적의 크기를 지정할 수 있다.
ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 7, theta: 1.57, name: "raffaello'}"
- 지정한 위치 및 자세로 지정한 이름의 거북이를 추가한다.
-
액션(Action)
- 비동기식, 동기식 양방향 메시지 송수신 방식으로 액션 목표를 지정하는 Action Client 와 액션 목표를 받아 특정 태스크를 수행하면서 중간 결괏값을 전송하는 액션 피드백 그리고 최종 결괏값을 담은 액션 결과를 전송하는 Action Server 간의 통신이다.
- ROS1과 달리 ROS2에서는 목표, 피드백, 결과값을 주고 받기 위해 토픽과 서비스를 혼합하여 사용한다.
- 목표 전달(send_goal), 목표 취소(cancle_goal), 결과 받기(get_result) 액션에는 서비스 통신이 활용된다.
토픽, 서비스, 액션 비교
토픽(Topic) | 서비스(Service) | 액션(Action) | |
---|---|---|---|
연속성 | 연속성 | 일회성 | 복합(토픽+서비스) |
방향성 | 단방향 | 양방향 | 양방향 |
동기성 | 비동기 | 동기 | 동기 + 비동기 |
연결 | 1:1, 1:N, N:1, N:N (Publisher:Subscriber) | 1:1 (Server:Client) | 1:1 (Server:Client) |
노드 역할 | 퍼블리셔(Publisher), 서브스크라이버(Subscriber) | 서버(Server), 클라이언트(Client) | 서버(Server), 클라이언트(Client) |
동작 트리거 | 퍼블리셔 | 클라이언트 | 클라이언트 |
인터페이스 | msg 인터페이스 | srv 인터페이스 | action 인터페이스 |
CLI 명령어 | ros2 topic, ros2 interface | ros2 service, ros2 interface | ros2 action, ros2 interface |
사용 예 | 센서 데이터, 로봇 상태, 로봇 좌표, 로봇 속도 명령 등 | LED 제어, 모터 토크 On/Off, IK/FK 계산, 이동 경로 계산 | 목적지로 이동, 물건 파지, 복합 테스트 등 |
#### Reference
- ROS2로 시작하는 로봇 프로그래밍 서적
Leave a comment