Chapter 1266. 액션 서버 구현 (Action Server Implementation) Chapter 1266. 액션 서버 구현 (Action Server Implementation) 1266.1액션 서버의 개념과 역할 1266.2액션 서버 구현을 위한 개발 환경 설정 1266.3CMakeLists.txt 구성과 의존성 설정 1266.4package.xml 의존성 선언 1266.5커스텀 액션 인터페이스 정의 1266.6.action 파일 작성 절차 1266.7CMakeLists.txt에서 인터페이스 생성 설정 1266.8생성된 헤더 파일의 확인과 이해 1266.9액션 서버 노드 클래스 설계 1266.10노드 클래스의 기본 구조 1266.11멤버 변수와 초기화 1266.12액션 서버 인스턴스 생성 1266.13rclcpp_action::create_server 호출 구조 1266.14액션 이름 설정과 네임스페이스 관리 1266.15handle_goal 콜백 구현 1266.16목표 유효성 검증 로직 1266.17목표 수락 조건 설정 1266.18목표 거부 조건과 거부 응답 1266.19GoalResponse::ACCEPT_AND_EXECUTE 반환 1266.20GoalResponse::ACCEPT_AND_DEFER 반환 1266.21GoalResponse::REJECT 반환 1266.22handle_cancel 콜백 구현 1266.23취소 요청 수락 조건 설정 1266.24취소 요청 거부 조건 설정 1266.25CancelResponse::ACCEPT 반환 1266.26CancelResponse::REJECT 반환 1266.27handle_accepted 콜백 구현 1266.28목표 수락 후 실행 스레드 관리 1266.29std::thread를 활용한 비동기 실행 1266.30detach와 join의 선택 1266.31execute 콜백 구현 1266.32실행 함수의 기본 구조 1266.33GoalHandle을 통한 목표 데이터 접근 1266.34작업 실행 루프 구현 1266.35루프 내 진행 상황 계산 로직 1266.36피드백 메시지 생성과 발행 1266.37publish_feedback() 호출과 주기 설정 1266.38피드백 발행 빈도와 성능 트레이드오프 1266.39취소 요청 확인과 처리 1266.40is_canceling() 상태 확인 1266.41취소 시 canceled() 호출과 결과 반환 1266.42작업 성공 시 succeed() 호출과 결과 반환 1266.43작업 실패 시 abort() 호출과 결과 반환 1266.44결과 메시지 구성과 반환 1266.45실행 함수에서의 예외 처리 1266.46try-catch 블록을 활용한 안전한 실행 1266.47예외 발생 시 abort 처리 전략 1266.48액션 서버의 스레딩 모델 1266.49SingleThreadedExecutor에서의 서버 동작 1266.50MultiThreadedExecutor에서의 서버 동작 1266.51콜백 그룹 설정에 따른 동작 차이 1266.52MutuallyExclusive 그룹에서의 주의사항 1266.53Reentrant 그룹에서의 동시 실행 1266.54스레드 안전한 공유 자원 접근 1266.55뮤텍스를 활용한 동기화 1266.56원자적 변수(atomic)의 활용 1266.57액션 서버의 생명주기 관리 1266.58서버 시작과 종료 절차 1266.59노드 소멸 시 진행 중인 목표 처리 1266.60graceful shutdown 구현 1266.61SIGINT 핸들러와 액션 서버 1266.62액션 서버의 QoS 설정 1266.63피드백 토픽 QoS 커스터마이징 1266.64상태 토픽 QoS 커스터마이징 1266.65목표 서비스 QoS 커스터마이징 1266.66결과 서비스 QoS 커스터마이징 1266.67네비게이션 액션 서버 구현 예제 1266.68NavigateToPose 액션 서버 구현 1266.69경로 추종 피드백 발행 구현 1266.70도착 판정 로직 구현 1266.71매니퓰레이션 액션 서버 구현 예제 1266.72PickAndPlace 액션 서버 구현 1266.73그리퍼 제어 피드백 발행 구현 1266.74드론 비행 액션 서버 구현 예제 1266.75Takeoff 액션 서버 구현 1266.76비행 고도 피드백 발행 구현 1266.77착륙 판정 로직 구현 1266.78순찰 임무 액션 서버 구현 예제 1266.79다중 웨이포인트 순찰 구현 1266.80순찰 진행률 피드백 발행 구현 1266.81액션 서버의 매개변수화 1266.82declare_parameter를 활용한 설정 외부화 1266.83매개변수 변경 콜백과 동적 설정 1266.84액션 서버의 로깅 전략 1266.85목표 수신 로깅 1266.86실행 과정 로깅 1266.87취소 처리 로깅 1266.88결과 반환 로깅 1266.89액션 서버의 진단(Diagnostics) 통합 1266.90diagnostic_updater를 활용한 서버 상태 보고 1266.91서버 활성 목표 수 진단 1266.92서버 처리 시간 진단 1266.93생명주기 노드에서의 액션 서버 구현 1266.94on_configure에서 서버 생성 1266.95on_activate에서 서버 활성화 1266.96on_deactivate에서 서버 비활성화 1266.97on_cleanup에서 서버 정리 1266.98컴포넌트(Component)로서의 액션 서버 구현 1266.99RCLCPP_COMPONENTS_REGISTER_NODE 매크로 사용 1266.100컴포넌트 컨테이너에서의 동적 로딩 1266.101액션 서버의 단위 테스트 작성 1266.102GTest 기반 액션 서버 테스트 프레임워크 1266.103테스트용 액션 클라이언트 구현 1266.104목표 수락/거부 테스트 1266.105피드백 수신 테스트 1266.106결과 수신 테스트 1266.107취소 처리 테스트 1266.108동시 다중 목표 테스트 1266.109액션 서버의 빌드와 실행 1266.110colcon build 구성 1266.111액션 서버 노드 실행 1266.112ros2 action 명령줄 도구를 활용한 서버 테스트 1266.113ros2 action send_goal 명령 사용 1266.114액션 서버 구현의 일반적인 오류와 해결 1266.115콜백 데드락 문제와 해결 1266.116GoalHandle 유효성 문제 1266.117스레드 안전성 위반 문제 1266.118액션 서버 구현 모범 사례 요약