ROS 2 Action

권호떡의 데싸정복·2024년 10월 8일

ROS2 Robot Operating System

목록 보기
10/10

이론

  1. 액션이란?
    • 다소 시간이 걸릴 수 있는 작업이 처리되는 동안 피드백과 업데이트를 제공
      로봇을 목표로 이동하거나 복잡한 계산을 수행하는 등 시간이 오래 걸리는 작업에 유용
  2. 구성요소 (해당 그림에서는 클라이언트 측에 3개의 서비스 클라이언트와 2개의 토픽 구독자, 서버 측에 2개의 토픽 게시자가 있는 3개의 서비스 서버가 포함됨)
    1. 작업 클라이언트 (Node A)
      • 목표 요청 보내기 : ex) 로봇을 특정 위치로 이동
      • 피드백 수신 : 작업 서버는 작업이 어떻게 진행되고 있는지 클라이언트에 알리기 위해 정기적인 피드백을 보냄
      • 결과 수신 : 작업이 완료되면 '작업 성공' 같은 메시지를 보냄
    2. 작업 서버 (Node B)
      • 목표 수신 및 처리 : 서버로 들어오는 목표 요청을 처리하고 작업 시작
      • 피드백 보내기 : 작업의 현재 상태를 클라이언트에게 보냄 ex) 50% 완료
      • 결과 보내기 : 작업이 완료되면 서버는 최종 결과를 클라이언트에게 보냄

ROS2 Action과 ROS1 Action의 차이점

  • 서비스 목표 요청(send_goal()), 목표 취소(cancel_goal()), 결과 요청(get_result())을 처리
  • 프로세스 전반에 걸쳐 피드백과 상태 업데이트를 보낼 수 있음

Goal sate machine 다이어그램

  1. ACCEPTED
    • 액션 서버에서 goal을 받아 수락한 초기 상태
    • 클라이언트가 목표를 보내고 서버가 이를 승인한 후에 목표가 승인
    • 목표가 승인되면 다음 상태인 EXECUTING으로 이동
  2. EXECUTING
    • 액션 서버가 goal에서 요청한 작업을 수행중 ex) 로봇이 움직이는게 goal라면, 로봇이 움직이고 있음
    • 진행 상황을 나타내기 위해 피드백이 클라이언트에게 계속 전송됨
    • goal가 완료되었는지 또는 취소 요청이 되었는지에 따라 SUCCEEDED 또는 CANCELING으로 가게됨
  3. SUCCEEDED
    • 작업을 성공하면 goal가 SUCCEEDED로 전환됨
    • 목표가 달성되었을 알리기 위해 결과가 클라이언트로 전송됨
  4. CANCELING
    • 클라이언트가 목표 취소를 요청하면 작업 서버가 성공적으로 작업을 중지시키면 goal이 CANCELED로 전환됨
    • 작업이 중단되었으나 오류 없이 성공적으로 수행되었음을 의미
  5. ABORTED
    • 서버가 어떤 이유로 작업을 완료할 수 없는 경우 goal이 ABORTED로 전환
    • 작업이 실패한것임. 결과는 실패로 표시

실습

# 터미널 1
$  ros2 run turtlesim turtlesim_node

# 터미널 2
$ ros2 run turtlesim turtle_teleop_key

  • G, B, V, C, D, E, R, T 키를 사용하여 움직일 수 있음
  • 해당 키들은 각 거북이들의 rotate_absolute 액션을 수행함에 있어서 액션의 목표값을 전달하는 목적으로 사용
  • F키를 중심으로 8개의 버튼을 사용
  • 키들은 위치별로 0.7854 radian 값씩 반시계 방향으로 각도를 회전
  • ex) R을 누르면 1.5708 radian 목표 값이 전달되어 12시 방향으로 회전

  • 액션 목표는 F를 눌러 도중에 취소할 수 있음
  • 액션이 취소없이 goal에 도달하면 '[INFO]: Rotation goal completed successfully' 가 표시
  • 액션 도중 f를 눌러 취소한다면 '[INFO]: Rotation goal canceled'
# 노드 정보를 알 수 있음
$ ros2 node info /turtlesim
$ ros2 node info /teleop_turtle

# 액션 목록
$ ros2 action list -t

# 액션 정보
$ ros2 action info /turtle1/rotate_absolute

# 액션 goal 전달
# turtle1 거북이를 절대 각도로 회전하라는 소리
# "{theta: 1.5708}" 는 전송되는 goal 메시지. 1.5708 라디안 값으로 회전하라는 소리
$ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.5708}"

$ ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: -1.5708}" --feedback
  • 터미널 결과값을 보면 메시지 전송 후 goal을 이루기 위해서 -2.992 라디안을 회전했다고 볼 수 있음

action interface

  • 액션 인터페이스는 메시지 및 서비스 인터피에스의 확장형이라고 볼 수 있음
  • 'ros2 interface show turtlesim/action/RotateAbsolute.action' 코드를 이용해 확인 가능
  • theta, delta, remaining 이라는 세개의 데이터 존재

ROS2의 jazzy 버전은 지원을 안하나 실행 시 오류가 발생한다.

profile
데이터사이언스정복

0개의 댓글