앞서 설명한데로, 액션과 서비스의 가장 큰 차이점은 서버 수행상태에 대한 feedback이 가능하단 점이다. 이때 feefback이 단순히 중간중간 값만 전달 받는 것이라면 얼마나 아쉬운가!
그래서 서버의 종료 상태를 다음과 같이 구분한다.
- preempted: 클라이언트에서 취소한 경우.
- succeeded: 정상적으로 종료한 경우
- aborted: 서버에서 취소한 경우.
위의 각 상태는 다음 클라이언트 메소드를 통해 확인할 수 있다.
client.get_state() #preempted=2, succeded=3, aborted=4
- 각 상태에 대해서는 아래와 같이 행위를 지정할 수 있다.
server.set_abort( result변수, "전달할 메시지") # 서버 중단시 전달할 결과값 설정
server.set_preempted(result변수, "메시지")
그 외에, 이러한 서버 상태를 통제하기 위한, server.is_XXX 들이 있다.
'ROS' 카테고리의 다른 글
ROS1-12 액션 예제 2 - 서버/클라이언크 코딩 (0) | 2022.07.28 |
---|---|
ROS1-12 액션 예제 1 - 준비하기 (0) | 2022.07.28 |
ROS1-11 서비스 예제 - 서비스 코드 (0) | 2022.07.27 |
ROS1-10 서비스 예제 - 서비스 메시지 준비하기 (0) | 2022.07.27 |
ROS1-09 토픽 예제2 - 사용자가 정의한 자료형 (0) | 2022.07.26 |