11-09 09:15
Notice
Recent Posts
Recent Comments
관리 메뉴

BAN2ARU

[ROS2/FOXY] 튜토리얼 3. Understanding nodes 본문

Study/ROS2

[ROS2/FOXY] 튜토리얼 3. Understanding nodes

밴나루 2023. 6. 2. 22:31
반응형

ROS-foxy 튜토리얼은 공식 홈페이지를 참조함

 

이전 튜토리얼 글 모음

 

목표 : ROS2의 node 기능에 대해서 이해하기

1. ROS2 그래프

ROS 그래프는 ROS 시스템 내에서 런타임 시 노드 간의 관계를 보여주는 인프라 구조로, 노드 간의 상호작용을 시각적으로 표현하는데, 이를 통해 노드 및 통신 구조를 이해할 수 있다.

2. ROS에서의 노드

ROS에서 노드는 하나의 실행 가능한 프로세스이며, 각 노드들은 다른 노드와 토픽(topic), 서비스(service), 액션(action), 파라미터(parameter) 등을 통해 데이터를 주고받을 수 있다. ROS의 핵심 요소 중 하나인 노드 간의 통신 구조를 이해하고 활용하는 것은 ROS 개발에서 매우 중요하다.

전체 로봇 시스템에서는 함께 작동하는 많은 노드로 구성되어 있다. ROS2에서 단일 excutable파일(c++, python 프로그램 등)은 하나 또는 그 이상의 node를 포함할 수 있다.

Tasks

1. ros2 run

ros2 run 명령어는 패키지에서 executable한 파일을 실행하는 방법 중 하나이다.

ros2 run <package_name> <executable_name>

예를 들어, 이전 튜토리얼에서 실행하였던 ros2 run turtlesim turtlesim_node 명령어는 turtlesim 패키지의 turtlesim_node executable을 실행한다. 이 명령어는 런타임에 하나 이상의 노드를 실행할 수 있도록 한다.

2. ros2 node list

ros2 node list 는 현재 실행 중인 모든 ROS2 노드의 이름을 출력하는 명령어이다. 이 명령어는 현재 실행 중인 노드가 무엇인지 확인할 수 있어 많은 노드를 실행하는 시스템을 tracking 할 때 유용하게 사용된다. 이전 튜토리얼을 통해 우리는 turtlesim 노드와 teleop노드를 실행한 후, ros2 node list 명령어를 통해 해당 리스트를 확인했었다.

2.1 Remapping

Remapping은 노드 간에 토픽, 서비스, 액션 등의 통신 인터페이스 이름을 다시 할당(mapping)해주는 기능을 의미한다. 이전 튜토리얼에서 cmd_vel 토픽과 ggobuk으로 target을 변경하기 위하여 turtle_teleop_key에 remapping을 수행하였다.

이번에는 turtlesim을 하나 실행한 후 이를 다시 ggobukim으로 remapping하는 작업을 수행해 보자.

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=ggobukim

해당 작업을 수행하면 turtlesim창이 2개 열리는 것을 확인할 수 있다. 이를 ros2 node list를 실행하면 아래와 같이 /turtlesim과 /ggobukim 노드가 실행 중인 것을 확인할 수 있다.

Docker 버전

docker start [컨테이너명:ros_cyg]
docker exec [컨테이너명:ros_cyg] /bin/bash -c "source /opt/ros/foxy/setup.bash && ros2 run turtlesim turtlesim_node"
# 새로운 터미널 open
docker exec [컨테이너명:ros_cyg] /bin/bash -c "source /opt/ros/foxy/setup.bash && ros2 run turtlesim turtlesim_node --ros-args --remap __node:=ggobukim"
# 새로운 터미널 oepn
docker attach [컨테이너명:ros_cyg]
ros2 node list

3. ros2 node info

ros2 node info 특정한 노드에 대해 정보를 제공하는 명령어이다. 아래와 같은 형식으로 사용된다.

ros2 node info <node_name>

방금 우리가 사용한 ggobukim 노드에 대해 정보를 조회하고 싶다면 아래와 같이 작성하면 된다.

ros2 node info /ggobukim

노드 정보는 위와 같이 Subscribers [구독하는 토픽], Publishers [발행하는 토픽], Service Server [제공하는 서비스], Action Servers [액션 서버], Action Clients [액션 클라이언트]에 대한 목록을 보여준다. 즉, 해당 노드와 상호작용하는 ROS 그래프 연결에 대해 보여준다고 볼 수 있다.

Summary

ROS에서의 노드에 대해 배웠으며, ros2 node에 관한 명령어에 대해 학습함. 아래는 요약내용임.

ROS(Robotic Operating System)에서 노드는 ROS 시스템에서 실행되는 최소 단위의 프로세스를 의미하며, 각 노드는 다른 노드와 통신하여 데이터를 주고받을 수 있다.

ros2 node는 ROS2에서 제공하는 명령어 중 하나로 이번 시간에는 실행 중인 노드 목록과 노드의 정보를 확인할 수 있는 명령어에 대해 알아보았다.

  • ros2 node list : 실행 중인 모든 노드의 목록을 출력하는 명령어
  • ros2 node info <node_name> : <node_name>에 해당하는 노드에 대한 정보를 출력하는 명령어

해당 기능들은 ROS 시스템의 기본 구성과 동작을 이해하는데 유용하며, 노드 간의 통신 및 인터페이스를 활용할 때 유용하다.

 

 

728x90
Comments