ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ROS2 Action 기초 사용법
    ROS/ROS2 2025. 2. 4. 18:49
    ROS2 version: jazzy

    1. Action

    Action은 비동기식 + 동기식 양방향 메시지 송수신 방식으로 다음과 같이 구성이 되어있다.

    1. Action Client: 액션 목표 (Goal)를 지정.
    2. Feedback: 액션 목표를 받아 특정 태스크를 수행하면서 결괏값에 해당되는 액션 피드백.
    3. Action Server: 최종 결괏값에 해당되는 액션 결과(Result)를 전송.

    ROS2 Action

     

    아래의 그림으로 이야기를 한다면 다음의 구성을 가지게 된다.

    • Action Client: 3개의 Service Client와 2개의 Topic Subscriber.
    • Action Server: 3개의 Service Server와 2개의 Topic Publisher.

    액션 목표, 액션 결과, 액션 피드백은 토픽과 서비스가 혼합되어 있다.

    ROS2 Action 구조

     

    2. Action 실습

    이번에도 turtlesim으로 Service에 대해 살펴보자.

    Terminal 1

    ros2 run turtlesim turtlesim_node

    Terminal 2

    ros2 run turtlesim turtle_teleop_key

     

    turtle_teleop_key를 실행할 때 다음의 명령어를 볼 수 있는데.

    이는 키 f를 중심으로 agent가 회전을 하는데 이는 아래의 그림과 같다.

    Agent가 우측을 바라보고 있기 때문에 g는 0.0 rad의 값을 갖는다.

    Agent에 teleop_key로 회전값을 주면 Agent가 회전을 하며 다음과 같이 성공 여부를 나타내게 된다.

    하지만, 동작중 f를 누르게 되면 Agent가 멈추게 되며 action cancel이 되어 다음의 내용을 확인할 수 있다.

    만약, 첫 번째 행동을 하던 도중 중간에 다른 행동을 입력하게 된다면 다음의 명령을 출력하며 마지막으로 입력된 동작을 하게 된다.

    간단하게 d를 누르고 동작이 끝나기 전에 g를 눌러보자. 그러면 로봇의 방향이 d로 이동을 하다가 중간에 g로 가는 것을 볼 수 있다.

    이와 같은 방식을 사용할 수도 있고, 첫 번째 동작이 모두 끝난 후 두 번째 동작을 할 수 있도록 조정할 수 있다고 한다. (방법은 다양하다.)

     

    2.1 ros2 node info

    ros2 node info <node name>

    이미 이전에 ros2 node info 명령어로 노드의 정보를 보는 것을 해보았다.

    해당 명령어로 node의 topic, service, action에 대해 확인할 수 있다.

    이번에는 action에 대해 공부하고 있으므로 action에 대해 확인을 해보자.

    /turtlesim node의 Action Servers
    /teleop_turtle node의 Action Clients

    /turtlesim의 Action Servers와 /teleop_turtle의 Action Clients기 서로 메시지를 주고 받는 것을 확인할 수 있다.

    rotate_absolute action은 위에서 이야기를 한 것과 같이 send_goal, cancel_goal, status, feedback, get_result로 세분화된 정보를 주고 받는다.

     

    2.2 ros2 action list -t

    ros2 action list 명령어

    ros2 action list 명령어를 사용하여 실행 중인 액션 목록을 확인 할 수 있다.

    '-t'를 넣으면 action의 type을 볼 수 있다.

     

    2.3 ros2 action type

    ros2 action type <action name>

    action의 type 확인

     

    2.4 ros2 action info

    ros2 action info <action name>

    해당 action을 사용하는 node들과 갯수를 보여준다.

    action의 info 확인

     

    2.5 ros2 interface show

    ros2 interface show <type name>

    이전에 topic과 service에서도 interface show로 msg의 정보를 확인할 수 있었다.

    ros2 interface show

     

    2.6 ros2 action send_goal

    ros2 action send_goal <action_name> <action_type> <values>

    ros2 action send_goal을 사용하여 액션 목표(action_goal)을 전달할 수 있다.

    다음의 send_goal명령으로 turtlesim의 Agent를 움직일 수 있다.

    ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"

     

    action send_goal
    초기 상태
    send_goal 이후

     

    만약 feedback을 포함하고 싶다면, 명령어 뒤에 --feedback을 붙여주면 된다.

    ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}" --feedback

    출력 결과:

    ...

     

    'ROS > ROS2' 카테고리의 다른 글

    ROS2 Service 기초 사용법  (0) 2025.01.13
    ROS2 Topic 기초 사용법  (0) 2025.01.08
    ROS2 Node 기초 사용법  (0) 2025.01.07
    ROS2 유용한 명령어  (0) 2025.01.07
    ROS2 DDS (Data Distribution Service)  (0) 2025.01.06
Designed by Tistory.