🌊🤖 UNav-Sim: 궁극의 수중 로봇 시뮬레이터를 소개합니다! 🚀
UNavSim_logo
UNav-Sim은 **Unreal Engine 5 (UE5)**와 AirSim의 강력한 기능을 활용하여 매우 상세한 렌더링 및 시뮬레이션 기능을 제공하는 오픈 소스 최첨단 수중 로봇 시뮬레이터 도구입니다. 연구원, 개발자 또는 로봇 공학 애호가이든 관계없이, UNav-Sim은 여러분이 수중 로봇 공학의 세계 깊숙이 뛰어들 수 있는 플랫폼을 제공합니다.
주요 기능:
- 오픈 소스 :heavy_check_mark:
- Unreal Engine 5를 사용한 고정밀 렌더링 :heavy_check_mark:
- 수중 물리 및 로봇 모델 :heavy_check_mark:
- Linux 및 Windows 호환 :heavy_check_mark:
- ROS1 및 ROS2 지원 :heavy_check_mark:
목차
1. 설치 방법
2. 시뮬레이션 실행하기
3. 시작하기 (Getting Started)
4. UNav-Sim ros 내비게이션 스택
5. UNav-Sim 문서(documentation)
1. 설치 지침 (Ubuntu OS용)
UNav-Sim은 사실적인 렌더링을 생성하기 위해 Unreal Engine 5에 의존합니다. 먼저 UE5를 설치한 다음 UNav-Sim 설치를 진행하세요.
1.1. UE5
1.2. UNav-Sim
좋아하는 폴더에 이 레포지토리를 클론하세요:
자동으로 UNav-Sim을 설정하고 빌드할 수 있는 스크립트를 제공합니다:
문제 해결: Ubuntu 22에서 UNav-Sim을 설치하는 경우, vulkan-utils 대신 vulkan-tools를 설치해야 합니다:
sudo apt update
sudo apt install vulkan-tools
1.3. UE5 환경 설정
cd ~/UNav-Sim/Unreal/Environments/Blocks
Blocks.uproject에서 마우스 오른쪽 버튼을 클릭하고 'Unreal Engine Generate Project Files'를 선택하세요
2. 시뮬레이션 실행
- settings.json 파일을 C:\Users[username]\Documents\AirSim에 추가하세요
- IDE를 사용하여 프로젝트 열기
- Launch BlocksEditor(DebugGame)을 사용하여 실행 및 디버그
3. 시작하기 - HelloROV 예제
HelloROV 예제는 UNav-Sim API와 AirSim API를 조합하여 ROV의 스러스터를 제어하고 **원형 궤적 추종 컨트롤러 (Circular Trajectory Following Controller)**를 실행하는 방법을 보여줍니다. 이 예제는 고정된 고도(altitude)와 요각(yaw angle)을 유지하면서 ROV를 원형 경로를 따라 이동시킵니다.
이 컨트롤러는 ROV가 따라갈 참조 궤적(reference)을 생성합니다. 반지름 (radius), 각속도 (angular velocity), 고도 (altitude), 그리고 **요각 (yaw)**과 같은 매개변수가 정의됩니다. 각 시간 단계마다 컨트롤러는 궤적에서 참조 위치를 계산하고 제어 신호를 조정합니다.
컨트롤러는 ROV의 원하는 움직임에 해당하는 필요한 렌치 (wrench) (힘 및 토크)를 계산합니다. 이 렌치는 사전에 정의된 스러스트 할당 행렬(thrust allocation matrix)을 사용하여 일련의 모터 명령으로 매핑됩니다.
로봇에 가해지는 힘(wrench)은 ROV의 추진기(thrusters)를 위한 PWM 신호로 변환됩니다. 이 PWM 신호는 추진기의 속도를 제어하며, 이는 ROV가 계획된 궤적을 따라 이동하는 역할을 합니다.
제어 루프는 지속적으로 기준 위치(reference positions)를 생성하고 이에 상응하는 제어 신호(힘/wrench)를 계산하여 작동합니다. ROV로부터의 피드백(예: 위치 또는 방향 데이터)은 실시간으로 제어 전략을 조정하는 데 사용될 수 있으며, 이를 통해 ROV가 궤적을 유지할 수 있게 합니다.
AirSim API는 제어 시스템과 ROV 간의 통신을 용이하게 합니다. PWM 신호는 API의 moveByMotorPWMsAsync 함수를 사용하여 ROV 모터에 비동기적으로(asynchronously) 전송되며, 이를 통해 ROV가 명령을 실행할 수 있습니다.
제어를 위한 주요 API
-
PWM 제어 (모터 제어 API):
AirSim API의 함수 moveByMotorPWMsAsync(pwm, duration)는 계산된 PWM 값을 ROV 모터에 전송하여 추진기를 제어할 수 있게 합니다.
-
피드백:
위치, 속도, 방향과 같은 피드백은 AirSim API를 사용하여 접근할 수 있으며, 이를 통해 ROV의 진행 상황을 모니터링하고 컨트롤러의 동작을 그에 맞춰 조정할 수 있습니다.
4. UNav-Sim ROS 내비게이션 스택
논문에서 상세히 설명된 바와 같이, UNav-Sim ROS 내비게이션 스택은 수중 차량 항해에 필수적인 다양한 구성 요소를 포함합니다. 이 스택은 BlueROV2 Heavy 모델에 맞춤화된 비선형 모델 예측 제어기(Nonlinear Model Predictive Controller, NMPC)와 파이프 추적 경로 계획기(pipe-following path planner)를 통합합니다. 또한, 여러 시각적 동시 위치 추정 및 지도 작성(Visual Simultaneous Localization and Mapping, VSLAM) 알고리즘을 포함하고 있습니다.
구성 요소:
- BlueROV2 Heavy 모델용 NMPC
ROS 1 저장소에 위치한 이 구성 요소는 BlueROV2 Heavy 모델 전용 비선형 모델 예측 제어기(NMPC)를 제공합니다. 이 컨트롤러는 수중 차량의 정밀하고 동적인 제어를 용이하게 합니다.
저장소 경로: extbackslash UNav-Sim extbackslash ros extbackslash src extbackslash UNav-Sim_NMPC
파이프 추적 경로 계획기 (Pipe Following Path Planner)
이 스택에는 파이프 추적 작업에 대해 훈련된 경로 계획 신경망이 포함되어 있으며, 이는 다양한 수중 검사 및 유지보수 임무에 필수적입니다.
- 시각적 동시 위치 추정 및 지도 작성 (VSLAM) 알고리즘
UNav-Sim ROS 내비게이션 스택은 여러 시각적 동시 위치 추정 및 지도 작성 (Visual Simultaneous Localization and Mapping, VSLAM) 알고리즘을 통합하고 있습니다. 이 알고리즘들은 비전 센서 데이터를 사용하여 주변 환경을 동시에 매핑하는 동시에 그 안에서 차량의 위치를 파악할 수 있게 합니다.
ROS 2용 저장소 경로: \\\UNav-Sim\ros2\src\robot_visual_localization
5. UNav-Sim 문서화
논문 링크
인용 (Citation)
본 프레임워크를 작업에 사용하신다면, 다음 논문을 인용해 주십시오: 논문 링크
@inproceedings{amer2023unav,
title={UNav-Sim: A Visually Realistic Underwater Robotics Simulator and Synthetic Data-generation Framework},
author={Amer, Abdelhakim and {\'A}lvarez-Tu{ō}n, Olaya and U{ğ}urlu, Halil {〼}brahim and Sejersen, Jonas Le Fevre and Brodskiy, Yury and Kayacan, Erdal},
...
@inproceedings{alvarez2023mimir,
title={Mimir-uw: A multipurpose synthetic dataset for underwater navigation and inspection},
author={{\'A}lvarez-Tu{ō}n, Olaya and Kanner, Hemanth and Marnet, Luiza Ribeiro and Pham, Huy Xuan and le Fevre Sejersen, Jonas and Brodskiy, Yury and Kayacan, Erdal},
...
질문 및 문의 사항
문의사항이 있으시면 GitHub 이슈를 생성해 주십시오. 가능한 한 빨리 답변드리도록 노력하겠습니다!
⭐ 유용하다고 생각하시면 이 저장소에 별점을 눌러주세요! ⭐
본 프로젝트를 사용해 주셔서 감사합니다! 🌟
Star History Chart