Embedded/ROS

ROS2 - (4) Action, Parameter 이론 및 실습

잇(IT) 2024. 9. 23. 16:51

Action

Action은 Topic과 Service의 혼합

Action 목표 및 Action 결과를 전달하는 방식은 Service와 동일하다.

Action Feedback은 Topic과 같은 Message 전송 방식

 

 

기본적으로 Client와 Server가 통신을 하게된다.

1. Client에서 Goal에대한 Service를 Reqeust를 Server에 전달하게 되면 Server에서 Response를 Client로 전달하게 된다.

 1.1. Feedback은 Topic으로 동작하며 Action Server가 Action Client로 정보를 주기적으로 전달하는 역할을 한다.

2. Goal에 대한 응답 이후 최종 결과를 Result Service를 통해 Request, Response를 주고 받는다.

3. Client가 결과를 확인하게 되면 종료한다.

 

 

Action은 비동기식(Topic) + 동기식(Service) 양방향 메시지 송수신 방식

- 목표 Goal을 지정하는 Action Client

- Action Goal을 받아 task를 수행하면서 중간 결과 값에 대항하는 Action Feedback

- 최종 결과 값에 해당되는 Action Result를 전송

 

 

Action Client = Service Client 3개 + Topic Subscriber 2개

Action Server = Service Server 3개 + Topic Publisher 2개

Action Goal/Feedback/Result 데이터는 msg 및 srv interface의 변형으로 Action interface라고 한다.

 

ROS2에서 Goal State라는 개념이 등장한다.

Goal State는 Goal 값을 전달 한 후의 State-Machine을 구동하여 Action의 Process를 모니터링한다.


ros2 node info /turtlesim

/turtlesim의 경우 Server인 것을 알 수 있다.

 

ros2 node info /teleop_turtle

/teleop_turtle의 경우 Client인 것을 알 수 있다.

 

ros2 run turtlesim turtle_teleop_key

 

키보드 입력을 통해 turtlesim에서 거북이 방향을 움직이게 하는 simulation을 실행 시킨 뒤

 

1. 임의의 각도를 입력한 뒤 정상 동작했을 때

successfully를 띄우는 것을 확인할 수 있다.

 

2. 임의의 각도를 입력한 뒤 F 키를 통해 취소했을 때

canceled를 띄우는 것을 확인할 수 있다.

 

* Action 목표는 도중에 취소할 수도 있다. 터미널 창에 표시된다.


ROS2 action list & interface type

ros2 action list -t

 

 

ros2 action info /turtle1/rotate_absolute

 

/turtle1/rotate_absolute 액션에 대해 clients와 servers가 각각 하나씩 있는 것을 확인할 수 있다.


ROS2 action interface type

[theta] 목표 각도 값, [delta] Action 시작 위치에서의 각도 변위, [remaining] 목표 각도로 이동까지 남은 각도의 값으로 feedback 옵션을 사용해야 나타난다.

ros2 interface show turtlesim/action/RotateAbsolute

 

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

위 명령어를 통해 거북이의 방향이 변경된 뒤 

 

- Sending goal

theta 1.5708 goal을 서버로 전송한다.

 

- Goal accepted with ID

goal에 대한 ID를 의미한다.

 

- Result

delta : -3.104....라는 결과를 반환한다.

 

- Goal finished with status

SUCCEEDED를 보여줌으로서 성공했음을 알린다. 


Feedback 옵션 사용

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

Action 명령어에 따라 실시간으로 동작하는 데이터들을 보여준다.


Parameter

 

각 Node의 Parameter Server를 실행시켜 외부의 Parameter Client 간의 통신으로 파라미터를 변경하는 것으로 Service와 동일하다.

단 노드 내 매개변수 또는 글로벌 매개변수를 Service 통신 방법을 사용하여 외부에서 Set/Get 할 수 있게 한다.

 

 

파라미터 관련 기능은 RCL(ROS Client Libraries)의 기본 기능으로 모든 노드가 자신만의 Parameter Server를 가지고 있다.

각 Node는 Parameter Client도 포함시킬 수 있어서 자기 자신의 파라미터 및 다른 노드의 파라미터를 읽고 쓸 수 있다.

추가 프로그래밍이나 컴파일 없이 능동적으로 변화 가능한 프로세스 생성이 가능하다.

각 파라미터는 yaml 파일 형태의 파라미터 설정 파일로 되어 있다.

 

Parameter 내용 확인

ros2 param describe /turtlesim background_b

 

Parameter 값 읽기 (Get)

ros2 param get /turtlesim background_b

 

Parameter 값 쓰기 (Set)

ros2 param set /turtlesim background_b 100


Parameter 저장 값 확인 및 재사용

 

set으로 파라미터의 값을 바꾸어 사용할 수 있으나 Node를 종료하고 다시 시작하면 모든 파라미터는 초기 값으로 다시 설정된다.

현재 파라미터를 저장하고 다시 불러오기 위해 ros2 param dump 명령어를 사용한다.

현재 폴더에 해당 노드 이름으로 설정 파일이 yaml 형태로 저장된다.

 


728x90