[ROS2] Turtlesim으로 보는 ROS 2의 인터페이스와 파라미터

강민우·2023년 1월 3일
2
post-thumbnail

[ROS 2로 시작하는 로봇 프로그래밍]에 기반한 정리글입니다.

1. ROS 2 인터페이스

ROS 노드 간에 데이터를 주고받기 위해서 토픽, 서비스, 액션을 사용하고, 이때 사용되는 데이터 형태를 ROS 2 인터페이스 라고 한다. 이들은 각각 msg, srv, action interface를 사용하며, 정수, 부동 소수점, boolean과 같은 단순 자료형과, 데이터 구조와 메시지들이 나열된 배열같은 구조로도 사용이 가능하다.

1.1 메시지 인터페이스

turtlesim 패키지를 예로, 이 노드의 정보를 확인하면, turtle1/cmd_vel 토픽은 geometry_msgs/msg/Twist 형태임을 알 수 있다.
$ ros2 node info /turtlesim

이 메시지들을 ros2 interface show 명령어로 메시지 형태, 이름을 확인할 수 있다.

$ ros2 interface show geometry_msgs/msg/Twist
$ ros2 interface show geometry_msgs/msg/Vector3

즉, geometry_msgs/msg/Twist 메시지 형태는 float64 자료형의 linear.x, linear.y, linear.z, angular.x, angular.y, angular.z을 가짐을 알 수 있다.

또한 ros2 interface는 show 이외에도 list, package, packages, proto가 있다.

  • list : 현재 개발환경의 모든 msg, srv, action 메시지 출력
  • packages : msg, srv, action 인터페이스를 담고 있는 패키지 목록 출력
  • package : 옵션에 패키지명 입력 시 지정한 패키지에 포함된 인터페이스 출력
  • proto : 특정 인터페이스 형태 입력 시 그 인터페이스의 기본 형태 표시

1.2 서비스 인터페이스

서비스 또한 별도의 인터페이스를 가지고 있는데, 이를 서비스 인터페이스 라고 부르며, .srv 파일을 가르킨다.

ROS 2의 서비스에서 서비스를 요청할 때 필요한 /spawn 서비스를 예로 들어본다.
$ ros2 service list

ros2 interface show 명령어로 .srv의 인터페이스를 확인할 수 있다.
$ ros2 interface show turtlesim/srv/Spawn.srv

해당 명령어를 호출하면 구분자(---)로 나뉘는 것을 알 수 있는데, 위쪽이 Request, 아래쪽이 Response이다. 즉, 서비스 요청은 float64 형태의 x, y, theta, string 형태의 name이고, 응답은 string 형태의 name이 된다.

1.3 액션 인터페이스

ros2 interface show 명령어로 action 파일의 인터페이스를 확인할 수 있다.


해당 명령어는 구분자를 통해, Action Goal, Action Result, Action Feedback으로 나누어 출력된다.
즉, goal은 theta, result는 delta, feedback은 remaining이 된다.


2. ROS 2 파라미터

ROS 2의 파라미터는 각 노드가 가진 Parameter Server를 통하여 외부의 Parameter Client와 통신하여 파라미터를 변경하는 것이다. ROS 2의 Service와 비슷하지만, 파라미터는 서비스 통신 방법을 사용하여 노드 내부, 외부에서 노드 내 매개변수를 쉽게 지정, 변경, 가져와서 사용할 수 있게 하는 점에서 사용 목적이 다르다.

각 노드는 자기 자신, 다른 노드의 파라미터를 읽고 쓸 수 있으며, 이를 활용하면 능동적으로 변화 가능한 프로세스를 만들 수 있기 때문에 파라미터는 매우 유용하다.

2.1 파라미터 확인

turtlesim 노드와 teleop_turtle 노드로 파라미터를 실습한다.
$ ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

아래의 명령어로 파라미터 목록을 확인할 수 있다.
$ ros2 param list

아래의 명령어로 파라미터 내용을 확인할 수 있다.
$ ros2 param describe /turtlesim background_b
해당 파라미터 이름은 background_b, 데이터 형태는 integer, 파라미터의 설명을 확인할 수 있다.

아래의 명령어로 파라미터를 읽을 수 있다. 이것으로 turtlesim 노드의 background 배경의 RGB 값은 (69,86,255) 임을 알 수 있다.
$ ros2 param get <node_name> <parameter_name>

2.2 파라미터 쓰기

파라미터 쓰기 명령어는 아래와 같이 노드 이름, 파라미터 이름, 변경할 파라미터 값을 지정한다.
$ ros2 param set <node_name> <param_name> <value>

해당 명령어를 수행하면 turtlesim node의 배경색이 바뀜을 확인할 수 있다.

2.3 파라미터 저장

앞에서 파라미터 쓰기를 통하여 파라미터 값을 변경했지만, 노드를 종료한 후 다시 실행하면 모든 파라미터는 초기값으로 설정된다. 이때 파라미터 저장 명령어를 사용하면 변경된 파라미터를 저장할 수 있다.

$ ros2 param dump /turtlesim

노드 실행 시 저장된 파라미터 값을 사용하려면 --ros-args --params-file 옵션과 함께 파라미터가 저장된 yaml 파일의 이름을 입력하면 된다.

$ ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml

2.4 파라미터 삭제

특정 파라미터 삭제는 $ ros2 param delete <node_name> <parameter_name>로 할 수 있다.


3. 마무리

이번 포스팅에서는 ROS 2가 가지는 메시지 통신의 인터페이스의 형태를 확인하였고, 각 노드가 가진 Parameter을 확인하고 쓰기, 저장, 삭제의 기능을 이해하였다.

다음 포스팅에서는 ROS 2를 잘 활용할 수 있는 CLI 및 GUI 개발 도구를 정리한다.

profile
어제보다 성장한 오늘

2개의 댓글

comment-user-thumbnail
2023년 1월 4일

얼굴만큼 실력도 멋지시네요

1개의 답글