본 게시물은 ROS공식홈페이지의 튜토리얼을 참고하였습니다.
네트워크 초기화
1. 노드(Node) 생성하기
- ROS1에서는 rosmaster를 통해 네트워크를 초기화 해줬습니다. 하지만 ROS2에서는 Node의 생성이 네트워크 초기화를 의미합니다.
- 커맨드 입력은 작업창(Command Window)을 이용합니다.
ROBOBOT = ros2node("ROBOBOT")
ROBOBOT이라는 이름의 노드를 생성했습니다.
ros2node("[생성하고자 하는 노드이름]")
노드 생성후 출력값은 다음과 같습니다.
ROBOBOT =
ros2node with properties:
Name: '/ROBOBOT'
ID: 30
ROBOBOT 라는 변수명으로 노드를 선언했습니다. 노드는 ID: 30에 생성되었습니다.
*ID할당은 사용자마다 다를 수 있습니다. 0일수도 있고 7일수도 있습니다. 이는 나중에 다루게 됩니다.
변수명을 실질적인 노드 이름과 다르게 선언해도 됩니다. 하지만 관리의 편의성을 위해 변수명과 노드이름을 같게 생성하는걸 추천합니다.
2. 노드 리스트 출력하기
- Matlab에서 ROS를 다루는 명령어도 거의 일치하므로 기존에 ROS를 다뤄봤다면 쉽게 접근할 수 있습니다.
- node 커맨드의 list 입력은 현재 실행중인 모든 노드를 작업창에 출력합니다.
ros2 node list
출력값은 다음과 같습니다.
/ROBOBOT
1번에서 생성한 노드가 출력됩니다.
3. ROS2 네트워크 종료하기
- 이전에 생성한 하나의 노드를 종료해줌으로써 남은 노드의 갯수를 0으로 만들어주고 네트워크를 종료합니다.
clear ROBOBOT
입력창에 노드리스트를 입력한 후 결과값이 나오지 않는다면 정상적으로 노드가 종료된 것 입니다.
토픽과 메세지
이번 내용에서는 Matlab에서 제공하는 Example을 이용합니다.
디폴트 경로 : MATLAB/Example/[설치한 버전]/ros/ExchangeDataWithROS2PublishersAndSubscribersExample
[ExchangeDataWithROS2PublishersAndSubscribersExample.m] <- 해당하는 m파일을 이용합니다.
m파일 실행시 노드와 토픽의 다이어그램은 다음과 같습니다.

node_3가 가상의 라이다센서 데이터를 바탕으로 /scan이라는 토픽을 /node_2와 /node_1에 퍼블리시 해줍니다.
node_1은 로봇의 직선속도와 각속도를 /pose라는 토픽으로 /node_2에 퍼블리시 해줍니다.
이처럼 여러개의 노드가 유기적으로 통신을 하고있습니다.
이러한 관계를 파악하기 위해서는 토픽과 메세지에 대해서 알아야 합니다.
토픽
진행을 위해 위에서 명시한 예제 m파일을 실행해야 합니다.
ROS에서 가장 많이 쓰이는 기본 통신방식 입니다.
1. 토픽 리스트 출력하기
작업창(Command Window)에 커맨드 입력하기
ros2 topic list
출력값은 다음과 같습니다.
/parameter_events
/pose
/rosout
/scan
/parameter_events : ROS2 네트워크에서 항상 사용되는 전역 토픽입니다. 노드에 의해서 파라미터를 관리하거나 변경하는데 사용됩니다.
/pose : 로봇의 직선속도와 각속도를 전달합니다.
/scan : 이 예제에서 주어진 가상의 라이다센서값을 전달합니다.
/rosout : 노드의 디버깅 정보를 가지고 있습니다.
2. 토픽 메세지타입 출력하기
- 토픽이 어떤 메세지를 전달하는지 알 수 있는 방법입니다.
작업창(Command Window)에 커맨드 입력하기
ros2 topic list -t
출력값은 다음과 같습니다.
Topic MessageType
_____________________ _________________________________
{'/parameter_events'} {'rcl_interfaces/ParameterEvent'}
{'/pose' } {'geometry_msgs/Twist' }
{'/rosout' } {'rcl_interfaces/Log' }
{'/scan' } {'sensor_msgs/LaserScan' }
각각의 토픽이 어떤 타입의 메세지를 전송하는지 한눈에 파악할 수 있습니다.
보통 많이 쓰이는 메세지 타입이므로 Google에 검색하여 알아두는것도 좋습니다.
메세지
- 각각의 토픽이 정보를 교환할때 ROS2의 메세지를 사용합니다.
1. 메세지 세부정보 출력
- 많이 사용하는 geometry_msgs/Twist의 구조를 살펴봅니다.
작업창(Command Window)에 커맨드 입력하기
ros2 msg show geometry_msgs/Twist
출력값은 다음과 같습니다.
# This expresses velocity in free space broken into its linear and angular parts.
Vector3 linear
Vector3 angular
간단한 설명과 함께 어떤 구성으로 이루어져 있는지 출력됩니다.
geometry_msgs/Twist는 Vector3 linear와 Vector3 angular의 구성으로 한 번더 쪼개집니다.
그렇다면 더나아가 Vector3의 구조를 살펴보겠습니다.
작업창(Command Window)에 커맨드 입력하기
ros2 msg show geometry_msgs/Vector3
출력값은 다음과 같습니다.
# This represents a vector in free space.
# This is semantically different than a point.
# A vector is always anchored at the origin.
# When a transform is applied to a vector, only the rotational component is applied.
float64 x
float64 y
float64 z
x, y, z의 값이 실수(float64)로 이루어진다는걸 알 수 있습니다.
정리하자면 geometry_msgs/Twist는
실수타입의 세 개의 변수 가진 Vector3를
직선과 각에 대해 총 2개를 사용한 메세지 입니다.
이런식으로 커맨드를 활용하여 우리가 얻고자 하는 정보를 효율적으로 얻을 수 있습니다.
샘플파일 종료
샘플파일을 종료하는 m파일이 따로 있습니다. 이 m파일을 이용하여 종료합니다.
exampleHelperROS2ShutDownSampleNetwork.m 파일을 실행하면 됩니다.
마지막으로 이 종료파일의 구조를 살펴보겠습니다.
%exampleHelperROS2ShutDownSampleNetwork Shut down the example ROS 2 network
% This script shuts down the nodes, publishers and subscribers
% created by exampleHelperROS2CreateSampleNetwork.
%
% See also exampleHelperROS2CreateSampleNetwork
% Copyright 2019 The MathWorks, Inc.
% Clear timer object first
clear('simTimer');
% Shut down publishers and subscribers of the /scan topic
clear('scanPub');
clear('scanPubmsg');
clear('scanSub1');
clear('scanSub2');
% Shut down publishers and subscribers of the /pose topic
clear('twistPub');
clear('twistPubmsg');
clear('twistSub');
% Finally, shut down the three nodes
clear('node_1');
clear('node_2');
clear('node_3');
% Delete data variables
clear('timerHandles');
clear를 사용하여 생성해주었던 노드와 토픽을 종료해주는 내용입니다.
simTimer를 먼저 초기화 해준 후
각 토픽의 서브스크라이버 퍼블리셔를 종료해줍니다.
이후 노드를 종료하고 데이터 변수를 삭제해주며 마무리합니다.
'ROS > Matlab' 카테고리의 다른 글
[matlab] Ubuntu에서 Matlab Add-on 설치시 권한 오류 해결법 (0) | 2023.05.04 |
---|---|
[Matlab]Matlab으로 ROS2toolbox 설치 (0) | 2022.05.10 |