해당 실습 자료는 한양대학교 Road Balance - ROS 2 for G CampROS 2 Documentation: Foxy, 표윤석, 임태훈 <ROS 2로 시작하는 로봇 프로그래밍> 루피페이퍼(2022) 를 참고하여 작성하였습니다.


이번 장에서는 Action 에 대한 개념과 더불어 피나보나치 수열을 이용한 프로그래밍을 작성해볼 예정입니다.

Fibonacci Action Client, Server


터미널을 열고, 다음 커맨드 라인들을 입력해주세요!!

## 해당 예제는 한양대학교 Road Balance - ROS 2 for G Camp 에서 작성된 예제 입니다.
$ cd ~/ros_ws/src
$ git clone <https://github.com/Road-Balance/gcamp_ros2_basic.git>
$ cd ..

$ colcon build --packages-select py_action_pkg custom-interfaces
$ . install/local_setup.bash
# New Terminal
$ ros2 run py_action_pkg fibonacci_action_server
[INFO] [1626792109.173088162] [fibonacci_action_server]: === Fibonacci Action Server Started ====
[INFO] [1626792115.074029404] [fibonacci_action_server]: Received goal request
[INFO] [1626792115.075281091] [fibonacci_action_server]: Executing goal...
[INFO] [1626792115.075621321] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1])
[INFO] [1626792116.077248488] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2])
[INFO] [1626792117.078657096] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3])
[INFO] [1626792118.079457416] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3, 5])
[WARN] [1626792119.081143359] [fibonacci_action_server]: ==== Succeed ====

# New Terminal
$ ros2 run py_action_pkg fibonacci_action_client
[INFO] [1626792114.821178745] [fibonacci_action_client]: === Fibonacci Action Client Started ====
[INFO] [1626792115.074789827] [fibonacci_action_client]: Goal accepted
[INFO] [1626792115.076096725] [fibonacci_action_client]: Received feedback: array('i', [0, 1, 1])
[INFO] [1626792116.078249418] [fibonacci_action_client]: Received feedback: array('i', [0, 1, 1, 2])
[INFO] [1626792117.079569923] [fibonacci_action_client]: Received feedback: array('i', [0, 1, 1, 2, 3])
[INFO] [1626792118.080175567] [fibonacci_action_client]: Received feedback: array('i', [0, 1, 1, 2, 3, 5])
[WARN] [1626792119.083050145] [fibonacci_action_client]: Action Done !! Result: array('i', [0, 1, 1, 2, 3, 5])

<aside> 💡 client는 완료 후 자동 종료되고, server는 종료되지 않고 다음 client를 기다립니다.

</aside>

본 예제 결과를 살펴보면, 0,1,1,2,3,5 이런 배열을 주고받는 것을 알 수 있지요.

원하는 숫자를 request하면 해당 번째까지의 [피보나치 수열](https://ko.wikipedia.org/wiki/피보나치_수#:~:text=수학에서%2C 피보나치 수(영어,0으로 두기도 한다.)을 지속적으로 반환하는 예제입니다.

Received feedback: array('i', [0, 1, 1])[0, 1, 1]
Received feedback: array('i', [0, 1, 1, 2])
Received feedback: array('i', [0, 1, 1, 2, 3])
Received feedback: array('i', [0, 1, 1, 2, 3, 5])

이제, 이론으로 넘어가 Action이 어떠한 방식으로 데이터를 주고받는지 살피겠습니다.

ROS2 Action 개념