이 프로젝트는 ROS2, LLM(OpenAI Chat API), VRX 시뮬레이터를 활용해
무인선(USV)의 AI Captain 시스템을 실험하기 위한 구조를 제공합니다.
- 자연어 명령 → LLM → 구조화된 JSON(orders) → Captain 노드
- Captain이 의도 해석, 상태 관리, 명령 큐잉 → SubCaptain → Server
- Server는 실제 실행/사람 확인을 담당
- VRX thruster 제어 및 항법(Odometry) 감시 기능 포함
- Flask + ROS2 노드
- 자연어 입력(
text_command)을 받아 LLM 호출 - LLM 응답을 온톨로지 기반 JSON으로 변환 후
/voice_cmd퍼블리시 Mission Start전에는 다른 명령을 무시- 대화 히스토리 관리(
client_id기반)
/voice_cmd구독 → 미션 시작/명령 JSON 처리ShipStatus관리 및 주기 퍼블리시(/ship/status)navigation,thruster,operation,note
- 명령 큐잉 →
/captain/order발행 /subcaptain/response수신 후 상태 업데이트- 출항(5)은
navigation && thruster == True일 때만 허용 - 부족 항목이 있으면 자동으로 재검사 명령 enqueue
/captain/order구독/server/execute_order서비스 호출- 결과를
/subcaptain/response퍼블리시
/server/execute_order서비스 서버- 주문 처리:
- 3: Thruster check → 사용자 입력 True/False
- 4: Navigation check →
NavGuardian상태 기반 or 사용자 확인 - 5: Departure → 사용자 입력 승인 여부
- "확인하는 사람" 역할
/agent_0/odom(nav_msgs/Odometry) 감시- 오돔이 끊기면
/nav/health=False발행, 들어오면 True - Captain은 이를 받아
ShipStatus.navigation자동 갱신 - 운항 중 오돔 끊기면
operation=False로 자동 전환 - 옵션: 네비 끊김 시 rosgpt에 알림 → LLM이 재검사 명령(JSON) 생성
/ship/status구독- 20Hz 주기로 좌/우 추진기 토픽 발행
- 조건 충족(
navigation && thruster && operation) →180.0 - 아니면
0.0
- 조건 충족(
- 토픽:
/agent0/thrusters/left/thrust(std_msgs/Float64)/agent0/thrusters/right/thrust(std_msgs/Float64)
bool navigation
bool thruster
bool operation
string note