왕다방

인공지능 로봇 사용자들의 자유게시판입니다. 가정용로봇, 서비스로봇, 교육용로봇 등 자유롭게 올려주세요.

제목ROS2: 액션 / 파라미터2021-11-29 23:27
작성자user icon Level 2

88x31.png


1. 액션(Action)


액션(action)은 토픽과 서비스가 혼합된 형태의 통신 방식 입니다. 서비스와 유사하지만 서비스는 동기적으로 통신하는 반면 액션은 비동기적으로 통신합니다.


요청을 하는 노드를 액션 클라이언트(action client), 응답을 하는 노드를 액션 서버(action server)라고 합니다.


액션 클라이언트는 목표(goal)를 서비스를 통해 설정합니다. 액션 서버는 결과(result)가 있을때까지 피드백(feedback)을 토픽을 통해 발행(publish) 합니다.


mb-file.php?path=2021%2F11%2F29%2FF4302_1.gif
출처: https://docs.ros.org/en/foxy/Tutorials/Understanding-ROS2-Actions.html


액션은 토픽의 비동기 통신과 서비스의 동기통신이 혼합되어 있으므로 액션을 원활히 수행하기 위해 따로 상태 머신(state machine)을 운용합니다.

mb-file.php?path=2021%2F11%2F29%2FF4307_6.png
출처: http://design.ros2.org/articles/actions.html


클라이언트로 부터 목표 서비스 요청을 받으면 상태머신을 통해 액션 목표의 상태에 이르기까지 토픽을 통해 피드백을 보냅니다.


액션도 turtlesim 패키지를 통해 알아보도록 하겠습니다.


2개의 터미널에 각각 turtlesim_node 노드와 turtle_teleop_key 노드를 실행합니다.

  $ ros2 run turtlesim turtlesim_node

  $ ros2 run turtlesim turtle_teleop_key


다음 명령어를 통해 액션 리스트를 확인합시다.

  $ ros2 action list

mb-file.php?path=2021%2F11%2F29%2FF4303_2.png


-t 옵션을 넣어서 타입도 같이 확인해봅시다.

  $ ros2 action list -t

mb-file.php?path=2021%2F11%2F29%2FF4304_3.png
 

액션의 정보를 확인해봅시다.

  $ ros2 action info [액션 이름]

mb-file.php?path=2021%2F11%2F29%2FF4305_4.png
/turtle1/rotate_absolute 액션에는 /teleop_turtle 노드가 액션 클라이언트로, /turtlesim 노드가 액션 서버로 연결되어 있는 것을 확인할 수 있습니다.


액션 인터페이스의 확장자는 .action 입니다. action 인터페이스의 구조를 알아봅시다.

  $ ros2 interface show [메시지 타입].action

mb-file.php?path=2021%2F11%2F29%2FF4306_5.png
액션 인터페이스는 서비스 인터페이스처럼 --- 으로 구분되는데 각각 액션 목표(goal), 액션 결과(result), 액션 피드백(feedback)의 정보를 담고 있습니다.


이제 액션 목표설정을 해봅시다. 다음 명령어를 입력합니다.

  $ ros2 action send_goal [액션 이름] [메시지 타입] "인수"


피드백을 받으려면 옵션으로 --feedback을 넣어주면 됩니다.

  $ ros2 action send_goal /turtle1/rotate_absolute turtlesim/RotateAbolute "{theta: 3.14}" --feedback

mb-file.php?path=2021%2F11%2F29%2FF4316_7.gif


액션을 수행중에 Ctrl + C를 눌러 액션 수행을 중단하면 취소(cancel) 서비스를 요청하면서 액션이 종료됩니다.

mb-file.php?path=2021%2F11%2F29%2FF4317_8.gif



2. 파라미터(Parameter)


파라미터(parameter)는 서비스와 비슷하지만 RPC를 목적으로 하는 서비스와 달리 파라미터는 노드의 매개변수 설정을 목적으로 합니다. ROS에서 노드는 기본적으로 파라미터 서버를 포함하고 있습니다.


turtlesim 패키지를 통해 파라미터를 확인해보겠습니다.


turtlesim_node 노드와 turtle_teleop_key 노드를 각각 터미널에서 실행합니다.

  $ ros2 run turtlesim turtlesim_node

  $ ros2 run turtlesim turtle_teleop_key


다른 터미널을 열고 다음 명령어를 통해 파라미터를 확인합시다.

  $ ros2 pram list

mb-file.php?path=2021%2F11%2F29%2FF4319_7.png
 

다음 명령어를 통해 파라미터의 세부정보를 확인해봅시다.

  $ ros2 param describe [노드 이름] [파라미터 이름]

mb-file.php?path=2021%2F11%2F29%2FF4320_8.png

background_b 파라미터는 integer 타입이고 배경색상의 Blue 채널을 나타낸다는 것을 알 수 있습니다.


이제 다음 명령어를 통해 파라미터를 읽어보겠습니다.

  $ ros2 param get [노드 이름] [파라미터 이름]

mb-file.php?path=2021%2F11%2F29%2FF4321_9.png


이를 통해 turtlesim_node 노드의 배경색이 rgb(69, 86, 255)라는 것을 알 수 있습니다.

mb-file.php?path=2021%2F11%2F29%2FF4322_10.png
이 색상의 rgb는 69, 86, 255 입니다.


파라미터를 변경하려면 다음 명령어를 입력합니다.

  $ ros2 param set [노드 이름] [파라미터 이름] [값]

mb-file.php?path=2021%2F11%2F29%2FF4324_12.png 

rgb 값을 0,0,0으로 설정하면 다음과 같이 배경색이 검은색으로 변합니다.

mb-file.php?path=2021%2F11%2F29%2FF4323_11.png


파라미터 값은 노드를 다시 실행시킬때 초기화됩니다.

파라미터 값을 저장하려면 다음 명령어를 입력합니다.

  $ ros2 param dump [노드 이름]


다음 명령어를 실행한 경로에 노드이름으로 yaml 파일이 생성됩니다.

  $ ros2 param dump /turtlesim

mb-file.php?path=2021%2F11%2F29%2FF4325_13.png
mb-file.php?path=2021%2F11%2F29%2FF4326_14.png
 

노드 실행시 저장된 파라미터를 사용하려면 다음 명령어를 입력하세요.

  $ ros2 run [패키지 이름] [노드 이름] --ros-args --params-file [파라미터 파일 경로]


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

mb-file.php?path=2021%2F11%2F29%2FF4323_11.png 

#ROS2# 액션# 파라미터
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)