Author: Joonhee Lim
Team: UNIST RML
Date: 2022/02/04
0. Abstract
시뮬레이션 환경이 필요한 이유
1. 실제 환경에서 자율주행차량 알고리즘을 개발하고 테스트하는 것은 시간과 비용이 매우 많이 소모된다.
2. 머신러닝의 최근 발전을 활용하려면 다양한 조건과 환경에서의 대량의 훈련 데이터를 수집해야 한다.
-> 이러한 두 가지 이유로 Unreal Engine을 기반으로 하는 새로운 시뮬레이터 Airsim을 제시한다.
해당 논문에서는 쿼드로터를 시뮬레이션 환경과 실제 환경에서 비교한다.
1. Introduction
강화학습 등 다양한 로봇 시스템 훈련의 한계
1. 필요한 학습 데이터가 매우 많음
-> 이는 자율주행 차량의 학습에 경우 더욱 심각한 문제이다(학습하다가 차가 부서짐)
2. 시뮬레이션에서 학습한 내용을 현실에 보다 더 잘 전달해야만 함
-> 이를 해결하기 위해 등장한 그림자, 반사와 같은 미세한 디테일과 정확한 시스템 역학 모델을 사용한 Airsim 등장!
이 시뮬레이션 환경을 통해 강화학습과 같은 학습에 좋은 영향을 끼치고자 함
2. Related Work
굉장히 Good한 다른 시뮬레이션 환경을 소개한다.
1. Gazebo
- 가장 인기 있는 시뮬레이션이자 기능이 상당히 많지만 현실과 가까운 시뮬레이션 환경 구축과는 거리가 있으며 Unreal Engine이나 Unity와 같은 렌더링 기술 발전에 뒤쳐져있다.
2. Hector
- 풍동 조정 비행 역학, 다양한 센서, 소프트웨어를 제공한다 하지만 인기 하드웨어 플랫폼에 대한 지원이 부족하다 또한 ROS 및 Gazebo에 매우 의존하고 있기 때문에 시뮬레이션 다양성이 제한된다.
3. RotorS
- 마이크로 항공기를 설계하고 시뮬레이션에서 테스트할 수 있다
4. jMavSim
- PX4를 이용하며 사용하기 쉬운 시뮬레이션 환경
3. Architecture
Airsim은 확장성에 중점을 둔 모듈식 설계로 만들어졌다.
- 환경 모델, 차량 모델, 물리 엔진, 센서 모델, 렌더링 인터페이스, API 및 차량 펌웨어용 인터페이스 계층으로 이루어졌다.
포함하는 비행 제어기: PX4, ROSFlight, Hackflight
*비행 제어기란 센서 데이터를 입력으로 받아 현재 상태의 추정치를 계산하고 작동기 제어 신호를 출력하여 제어
항력, 마찰력, 중력과 같은 힘과 토크가 물리 엔진에 의해 입력되어 차량의 다음 운동학적 상태를 계산하여 나타낸다.
시뮬레이션 내부 컴퓨터는 슬램이나 Path Planning과 같은 연산을 수행할 수 있다.
충돌은 Unreal 엔진에서 구현된 파이프라인을 활용하여 탐지한다.
3.1 Vehicle Model
Airsim에서는 액추에이터의 힘과 토크를 다음과 같은 식으로 계산한다.
Ct: thrust 계수
Cpow: 전력 계수
ρ: 공기 밀도
D: 프로펠러 직경
ωmax: 분당 회전의 최대 각속도
이와 같은 계산으로 비행 물체를 시뮬레이션할 수 있게 된다.
3.2 Environment
차량은 중력, 공기 밀도, 기압 및 자기장을 포함한 다양한 물리 현상에 노출된다. 아주아주 정확하게 복잡한 연산을 수행할수도 있지만 Airsim은 Realtime에 초점을 맞추어 실시간 작업이 가능한 계산량만큼의 연산을 수행한다.
Gravity
대부분의 지상 기반 또는 저고도 환경에서는 복잡한 모델을 사용하는 것이 중요하지 않을 수 있지만 정확한 모델을 만드는데 그렇게 큰 Cost가 들지 않으므로 정확한 모델을 이용한다.
우리는 뉴턴의 중력 법칙에 대한 이항 정리를 적용하고 더 큰 힘을 무시함으로써 높이 h에서의 중력 가속도를 근사화한다.
Re: 지구의 직경
g0: 표면상 중력 상수
Magnetic Field
지구의 복잡한 자기장을 정확하게 모델링하는 것은 매우 큰 Cost가 드는 작업이다.
이에따라 우리는 지구가 완벽한 쌍극자 구라고 가정하는 기울어진 쌍극자 모델을 구현하였다.
-> 이 모델을 사용하면 극지방과 같이 자주 문제가 되는 영역뿐만 아니라 공간을 이동할 때 발생하는 자기장의 변화를 시뮬레이션할 수 있습니다.
먼저 지리적 위도 θ, 경도 φ, 고도 h가 주어지면 자기 공위도 θm를 계산할 수 있다.
* θ0, φ0은 실제 북극의 위도와 경도를 나타낸다.
이에따라 총 자기강도 |B|가 계산된다.
B0: 지구 표면의 자기 적도에서 자기장의 평균값
µm: 자기 공위도
Re: 지구 표면의 평균 반지름
이에 따라 경사 α와 적위 β 각도를 결정할 수 있다.
마지막으로 우리는 자기장 벡터의 수평장 강도 (H), 위도 (X), 세로 (Y) 및 수직장 (Z) 성분을 계산할 수 있다.
Air Pressure and Density
고도와 지구 대기 압력 사이의관계는 매우 복잡한데 이는 각각의 개별적인 특성을 가진 많은 뚜렷한 층의 존재 때문이다.
우리는 51km 미만의 고도에 대해 1976년 미국 표준 대기 모델을 사용하여 표준 온도 T와 표준 압력 P를 계산하고 86km 이상의 고도에 대해 Table3의 모델로 전환합니다.
이 때 공기 밀도 ρ는 P/RT이다.
* R은 특정 기체 상수
3.3 Physics Engine
물체의 운동학적 상태는 위치, 방향, 선속도, 각속도, 선가속도, 각가속도 총 6가지로 표현된다.
1000hz로 물리 엔진을 시뮬레이션 상에서 업데이트하려고 노력하고 있다.
-> 물리 엔진 연산의 복잡성을 줄여 Realtime + 성능까지 챙기고 있다.
Linear and Angular drag
차량이 공기와 함께 움직이기 때문에 선형 및 각 항력은 차체의 역학관계에 큰 영향을 미친다.
시뮬레이터는 다음 수식을 통해 물체에 대한 선형 항력을 계산한다.
Clin: 선형 공기 항력 계수
A: 차랑 단면
ρ: 공기 밀도
이 항력은 속도 V와 반대 방향으로 작용한다.
우리는 각도 항력을 모델링하기 위해 단순하지만 더 나은 근사치를 이용한다.
다음 식을 이용해서 근사화하긴 하는데 필자에게는 그렇게 중요한 내용이 아니므로 생략..
Accelerations
다음과 같은 식으로 알짜 힘과 알짜 토크를 계산한다.
우리는 뉴턴의 제2법칙을 이용하여 선형 가속도 a = Fnet/m + g 을 구할 수 있다
각가속도는 오일러의 회전방정식을 이용하여 각 가속도 α = I(역함수) ·(τnet - (ω ×(I · ω))) 를 구한다.
* I: inertia tensor
Integration
속도와 초기 위치를 이용하여 차량의 위치를 업데이트한다.
계산량을 줄이기 위해 Runge kutta 대신 Velocity Verlet 알고리즘을 사용한다.
각가속도도 비슷한 방법으로 업데이트하지만 방향은 약간 다르다.
Collisions
Unreal 엔진은 다양한 충돌 감지 시스템을 제공하며 우리는 이 기능을 직접 사용했다. 이 충돌 반응을 계산하여 차량의 선형 및 각도 운동을 모두 수정한다.
3.4 Sensors
Airsim은 가속도계, 자이로스코프, 기압계, 자기계 및 GPS용 센서 모델을 제공한다.
Barometer기압계를 구현하기 위해 Air Pressure and Density를 이용하여 Ground truth를 계산하고 장기 비행 시 보다 현실적인 동작을 위해 가우스 마르코프 프로세스를 적용하여 시간 경과에 따른 압력 측정의 표류를 모델링했다.
bk: 편향 요소
τ: 시상수
η: 가우시안 Noise(평균이 0)
최종적으로 다음과 같은 수식으로 변환된다.
a: -6.5 x 10-3
g: 중력 가속도
R: 특정 기체 상수
P0: 해수면 압력
P: 측정 값
T0: reference temperature
Gyroscope and Accelerometer
자이로스코프와 가속도계는 IMU를 구성한다. 우리는 백색 소음과 시간 경과에 따른 편향 표류를 추가하여 모델링하였다.
ωout은 측정값이고 ω은 실제 계산 값이다.
Magnetometer기울어진 쌍극자 모델을 지구 자기장에 적용한 후 백색 소음을 추가하여 센서 값을 낸다.GPS
지연 시간(200ms)와 느린 업데이트 속도(50hz)로 시뮬레이션된다.
위치 추정 오류는 시간이 지남에 따라 고쳐지며 붕괴율은 1차 저역 통과 필터를 사용하여 모델링된다.
3.5 Visual Rendering
고급 렌더링이 Airsim의 핵심 사항이었기 때문에 Unreal 엔진 4로 구현하였다.
이는 오픈 소스이며 윈도우, 리눅스에서 사용할 수 있는 매력적인 엔진이다.
4. Experiments
우리는 현실에서의 쿼드로터의 비행과 Airsim에서의 쿼드로터의 비행을 비교하였다.
하드웨어 플랫폼:
Ubuntu 16.04, GigaByte 5500와 플레임휠 쿼드로터 프레임에 장착된 픽스호크 v2 비행 컨트롤러를 사용하여 수행되었다.
경로 평가:
(a) 원형 궤적
- 반지름 10m
(b) 정사각형 궤적
- 길이 5m
가로축은 시간을 나타내고 세로축은 X와 Y방향의 오프셋을 나타낸다.
결과: 현실과 시뮬레이션은 상당히 유사한 비행을 보였다.
센서:
기압계, 자기계, IMU의 현실과의 차이 또한 조사하였다.
(1) IMU
비행 물체가 정지해 있을 땐 비슷한 값을 보였지만 하늘에서 비행을 할 때의 값은 크게 달랐다.
이는 현실에서는 모터가 작동하면서 기체를 떨게 만들지만 이는 Airsim에서 구현되지 않았기 때문.
(2) Barometer
센서를 지상과 178cm 사이에 주기적으로 놓았다.
마지막 부분에서는 온도 상승으로 작은 차이가 발생하였지만 대부분의 값이 현실과 일치하였다.
(3) Magnetometer
차량을 바닥에 놓고 90도를 네번 돌렸다.
결과는 현실과 매우 유사함을 보였다.
5. Conclusion and Future Work
앞으로 첨단 노이즈 모델과 렌즈 모델을 추가할 예정.
장애물로 인한 GPS 신호의 저하는 아직 시뮬레이션되지 않았으며, 광선 추적 방법을 사용하여 추가할 계획.
더 발전된 바람 효과와 열 시뮬레이션을 추가할 계획입니다.
해당 글의 모든 사진들은 논문 원문에서 가져왔음을 알립니다.