ROS2 node에 대해서 알아보자

By qsp , Created on 15th Mar 2022

ROS2에서 node를 알아보는 명령어는 ROS와 어떻게 다를까?
ros2라고 치는 거 외에는 거의 같아 보인다~
그리고 catkin_make로 빌드를 했었는데 이번에는 colcon 빌드를 사용하는데 어떻게 패키지를 만드는지 정리해본다

ROS2 node

예전 ROS 포스팅 보기

ROS에서 가장 최소 단위이면서 독립적으로 실행할 수 있는 프로그램을 Node라고 하는데
그 노드의 리스트를 확인하는 명령어이다

먼저 노드를 하나 실행을 해보자~ turtlesim 패키지를 실행한다음에 노드를 확인할 수가 있는데

ros2 run turtlesim turtlesim_node

turtlesim이라는 패키지의 turtlesim_node를 노드를 실행

이제 노드를 확인하는데 다른 터미널 창을 열어준다

ros2 node list

결과는 아래처럼 실행된 노드의 리스트 보여준다

/turtlesim

이번에는 또 다른 터미널 창을 열어준 후에 teleop 키보드를 하나 실행시켜보자

ros2 run turtlesim turtle_teleop_key 

그리고 나서 list를 확인해보면 (위에서 list를 확인했던 터미널에서 다시 입력)

ros2 node list

이번에 결과는 아래처럼 나오게 되고, 노드가 한 개 더 보여지게 된다

/teleop_turtle
/turtlesim

이제 노드의 정보 보기
ros2 node info /노드명 (list를 했을 때 나온 노드명)

ros2 node info /turtlesim

결과는

/turtlesim
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/color_sensor: turtlesim/msg/Color
    /turtle1/pose: turtlesim/msg/Pose
  Service Servers:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /reset: std_srvs/srv/Empty
    /spawn: turtlesim/srv/Spawn
    /turtle1/set_pen: turtlesim/srv/SetPen
    /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
    /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
    /turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /turtlesim/get_parameters: rcl_interfaces/srv/GetParameters
    /turtlesim/list_parameters: rcl_interfaces/srv/ListParameters
    /turtlesim/set_parameters: rcl_interfaces/srv/SetParameters
    /turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  Service Clients:

  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

/turtlesim 노드에 Subscribers, Publishers, Service Servers 까지 다 알려주게 된다


시각화 rqt

시각화로 볼 수 있는 툴이 있다. 실행은 rqt_graph 인데 없다면 설치
rqt_graph (툴) 설치하기

sudo apt install ros-foxy-rqt*

실행

rqt_graph
원은 노드를 의미
화살표는 토픽 또는 서비스를 의미

디버깅을 할 때에 예를 들어 A노드에서 B노드로 데이터를 보내고 있다고 치면
실제로 rqt_graph를 실행해서 실제로 잘 되고 있는지 확인할 수가 있다

ros의 디버깅 툴 rqt라는 것 안에 rqt_graph도 있고 다른 것들도 많이 제공하고 있다

위에서 본 노드들이 모여있는 것이 패키지라고 할 수 있는데
파일 관점: 라이브러리, 파일들을 모아놓은 것들, 하나의 디렉토리로 구성
기능 관점: 관련 있는 프로그램(노드)을 모아놓은 것, 시뮬레이션, 하드웨어 등
또한 빌드할 때에는 colcon build의 단위이기도 하다

build를 할 때 한 a패키지, b패키지, c패키지가 있다고 하면
그중에서 b패키지의 한 노드의 코드 한줄만 바꿨다고 하면 전체를 다 빌드하는게 아니고
하나의 b패키지만 빌드를 하는 것 (시간 소요를 줄임)


package 만들기

c++ 로 패키지 만들기

ros2 pkg create --build-type ament_cmake {만들려는 패키지이름} --dependencies rclcpp {종속성1} {종속성2} ...

python 패키지 만들기

ros2 pkg create --build-type ament_python {만들려는 패키지이름} --dependencies rclpy {종속성1} {종속성2} ...

위의 명령어를 실행하게되면 패키지 디렉토리가 만들어지고
src 디렉토리와 CMakeLists.txt, package.xml 파일이 만들어진다

colcon 빌드를 할 때 --symlink-install 을 하게 되면 전체를 빌드하게되는데
반면 colcon으로 특정 패키지만 빌드하기는 아래처럼 진행한다

colcon build --symlink-install --packages-select 패키지명

댓글

댓글이 없습니다.