연구 논문: 강화학습 기반 자율운항선박의 동적·정적 장애물 회피 및 항법 성능 향상 연구 [정보과학회/한국소프트웨어종합학술대회] 게재 - [2025]
해상환경에서 동적 및 정적 장애물을 회피하며 목표 지점까지 안전하게 항해하는 자율 운항 선박(ASV) 시뮬레이션 플랫폼
- A* 경로 탐색: 그리드 기반 최적 경로 계산
- 강화학습 (PPO): 360° 센서 기반 실시간 장애물 회피
- RRT* (참고용): 샘플링 기반 경로 계획 (스크립트만 포함)
- Crest Ocean System 기반 현실적인 해상 환경
- 정적 장애물 (0~8개) 및 동적 장애물 (0~4개) 설정 가능
- 6자유도 선박 물리 시뮬레이션
- Unity: 2021.3 LTS 이상
- Python: 3.8 이상 (ML-Agents 학습용)
- ML-Agents Toolkit: 2.0 이상
- 저장소 클론
git clone https://github.com/your-username/unity-asv-navigation-rl.git
cd unity-asv-navigation-rl- ML-Agents 설치 (RL 학습용)
pip install mlagents==0.30.0-
Unity에서 프로젝트 열기
- Unity Hub 실행
- "열기"를 클릭하고 클론한 프로젝트 폴더 선택
- Unity가 모든 에셋을 가져올 때까지 대기
-
패키지 의존성 확인
- 프로젝트가 Package Manager를 통해 필요한 패키지를 자동으로 가져옴
Packages/manifest.json에서 의존성 확인
Assets/Scenes/Train-AStar.unity열기- Unity 에디터에서 Play 버튼 클릭
- 선박이 A* 경로 탐색을 이용하여 자동으로 항해
- 결과는 콘솔에 로그로 기록됨
Assets/Scenes/Train-RL.unity열기BoatAgent_RL컴포넌트에 학습된 모델이 로드되어 있는지 확인- Play 버튼 클릭
- 선박이 학습된 RL 정책을 사용하여 항해
- 새 씬을 생성하거나 기존 씬을 열기
Assets/Prefabs/에서 원하는 프리팹을 드래그:TrainArea-AStar.prefab- A* 항법 설정TrainArea_RL.prefab- RL 에이전트 설정
- Inspector에서 파라미터 설정
- Play를 눌러 시뮬레이션 시작
-
학습 파라미터 설정
config/boat_rl_curriculum.yaml편집 (커리큘럼 학습용)
-
학습 시작
mlagents-learn config/boat_rl_curriculum.yaml --run-id=ASV_Navigation_v1-
학습 진행 상황 모니터링
- TensorBoard 열기:
tensorboard --logdir results/ - 학습 곡선, 보상, 에피소드 통계 확인
- TensorBoard 열기:
-
학습된 모델 내보내기
- 모델은
results/ASV_Navigation_v1/에 저장됨 .onnx파일을Assets/ML-Agents/로 복사하여 추론에 사용
- 모델은
autonomous-usv-navigation/
├── Assets/
│ ├── Scenes/ # Unity 씬
│ │ ├── Train-AStar.unity # A* 항법 씬
│ │ └── Train-RL.unity # RL 학습/테스트 씬
│ │
│ ├── Scripts/ # C# 소스 코드
│ │ ├── BoatProbesBase.cs # 선박 물리 베이스 클래스
│ │ ├── BoatProbes_AStar.cs # A* 선박 컨트롤러
│ │ ├── BoatProbes_RL.cs # RL 선박 컨트롤러
│ │ ├── BoatProbesAI.cs # AI 선박 컨트롤러
│ │ ├── BoatAgent.cs # 기본 ML-Agents 에이전트
│ │ ├── BoatAgent_RL.cs # 고급 RL 에이전트
│ │ ├── BoatAIController_AStar.cs # A* 경로 탐색 로직
│ │ ├── BoatAIController_RRT.cs # RRT* 경로 탐색 로직
│ │ ├── BoatAIAdapter.cs # AI 어댑터 인터페이스
│ │ ├── BoatMovementEnhancer.cs # 선박 이동 개선 유틸리티
│ │ ├── ObstacleController.cs # 장애물 제어 스크립트
│ │ ├── MoveComponent.cs # 이동 컴포넌트
│ │ ├── PlaytimeLogger.cs # 실행 시간 로깅 유틸리티
│ │ └── DataScript/ # 데이터 수집 유틸리티
│ │ ├── AStar/ # A* 실험 데이터
│ │ │ └── Experimentmanager.cs # 실험 관리자
│ │ └── Testmanager.cs # 테스트 관리자
│ │
│ ├── Prefabs/ # 재사용 가능한 게임 오브젝트
│ │ ├── TrainArea-AStar.prefab
│ │ ├── TrainArea_RL.prefab
│ │ └── [장애물 프리팹들]
│ │
│ ├── Materials/ # 3D 머티리얼
│ ├── Models/ # 3D 모델
│ └── ML-Agents/ # 학습된 ML 모델
│
├── config/ # ML-Agents 설정
│ ├── boat_rl_curriculum.yaml # 커리큘럼 학습 설정
│ └── boat_rl_test.yaml # 테스트 설정
│
├── Packages/ # Unity 패키지 (자동 관리)
├── ProjectSettings/ # Unity 프로젝트 설정
│
├── README.md # 영문 README
└── README_KR.md # 한글 README (본 파일)
- Crest Ocean System 4
- A* Pathfinding Project 4.2.17
- Unity ML-Agents 2.0+