본문 바로가기

카테고리 없음

Airsim Simulation& Drone Competition

Arisim, Unreal Engine, PX4(noise added) 설치 링크 및 실행코드

https://github.com/rladntjd/Drone_Competition.git

 

GitHub - rladntjd/Drone_Competition: Autonomous Drone Simulation Competition

Autonomous Drone Simulation Competition. Contribute to rladntjd/Drone_Competition development by creating an account on GitHub.

github.com

 

-Mavros

실행코드는 아래와 같다.

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"

Mavros 는 위의 그림과 같이 설정이 된다. 따라서 Airsim 을 사용함에 있어서 port 가 겹치지 않게끔 설정해야한다. Airsim 설정 포트는 14530 으로 설정하는걸 추천한다. 

Airsim 에서 settings.json 파일에서 udp 를 127.0.0.1 로 하면 연결이 잘되고, mavlink 연결을 다시 시도해도 다시 연결이된다.

-PX4

아래 실행코드를 실행한뒤, 언리얼을 실행한다 (노이즈 있는 파일은 GPS lock 까지 시간이 걸림)

px4 에서 mixer_multirotor.cpp 파일내부에서 thrust 에다가 Gaussian 노이즈를 추가하여 시뮬레이션에서 드론의 진동 노이즈를 구현할 수 있다. (px4 v1.10.1 기준)

make px4_sitl_default none_iris

- Airsim

Airsim 에서 Setting.json 을 바꾸면 라이다, IMU, GPS, 카메라 등 센서 종류 추가 가능 (https://microsoft.github.io/AirSim/sensors/#default-sensors)

-> unreal engine 에서 돌리면 컴퓨팅 파워를 많이 먹음 (이미지 가저오는 방식이 single core를 이용하기 때문)

-> 대략 320*480 사이즈로 15프레임 정도 나옴 (RGB, Depth, Segmentation 방식 지원)(i7 10세대, 1660ti 기준)

cd ~/AirSim/ros
source devel/setup.bash
roslaunch airsim_ros_pkgs airsim_node.launch

Airsim 에서의 추가 적인 함수 등은 Python3 를 사용한다 이것을 기존의 ros 와 통신 하기 위해서는 아래 코드를 사용하여 ros python3 를 다운로드 해야한다. 

pip3 install rospy
pip3 install airsim

- Depth noise 프로그램

Airsim 에서 DepthPerspective 로 Depth 값을 수신한다.  Depth 값에 노이즈를 추가하여 ros publish 를 진행한다. 이를 통해 더 현실감 있는 시뮬레이션이 가능하다

 

- Unreal Engine 시점 변경 방법

언리얼 실행한 이후 키를 누르면 시점이 바뀐다

F -> 1인칭

/ -> 3인칭 뒷쪽 고정

\ -> 지상고정

B -> 3인칭

- 드론 대회 규칙 프로그램

1) 게이트 통과 측정 프로그램

드론 대회 에서는 gate 를 통과를 해야한다. gate 를 통과하는걸 체크 하기 위해서는 Airsim 내부에서의 GPS 값을 사용한다. (Mavros 내부의 GPS 값도 있으나 reset 기능을 사용할때 Mavros 가 꺼지는 현상이 있기때문에 안전한 Airsim 을 사용한다)

Gate 위치를 Param 폴더 내부의 gate.yaml 파일에서 관리한다.

게이트의 크기를 고려하여 게이트의 중심과 드론의 중심의 거리가 0.8m 이하(거리값은 변경 가능) 이면 통과 했다고 표시한다.

 

2) reset 프로그램

초반 위치로 돌아가는 기능은 Airsim 을 사용하여 드론을 teleport 하는 방식으로 사용한다.

- airsim 에서 pose 값을 사용하여 원하는 위치로 변경 가능하다. 이 기능을 사용해서 초반 위치로 이동하게 만든다

- PX4 에서는 EKF2 가 돌아가고 있으므로 airsim을 사용하여 위치를 강제로 이동시키면 EKF2 에서 에러가 발생한다. 따라서 PX4 를 종료하고 위치를 고정 시킨 이후 다시 PX4 를 실행하여 EKF2 를 initialize 해주어야 한다. 자동으로 reset 을 사용하려면 terminal 에서 강제 종료(ctrl + c) 를 사용하고 다시 명령어를 사용하도록 Python 에서의 os 패키지를 사용해야한다.

- Unreal Engine 설정 방법

언리얼을 사용하려면 그래픽 카드는 필수 이다

use less cpu 설정을 꺼야 한다. 그래야 속도가 나온다. 다만 전력을 많이 먹고 발열이 심하다.

 

시점 이동 하는 방법 (카메라 속도 바꾸면 이동하는 속도 바뀜)

->우클릭 마우스 이동은 시점 이동

-> 좌클릭 누르고 마우스 이동은 높이를 바꾸지 않고 이동

-> 우클릭 누르고 wasd 누르면 이동함  

-> q 는 아래로 내려감 e 는 위로 올라감

-> alt 와 좌클릭 하면 한 시점을 중심으로 회전

 

->마우스 클릭하고 f 누르면 초점 맞춰짐

 

 

레벨을 구성하는 모든 것 =  엑터

 

 

박스를 만들고 brush setting 에서 x y z 값을 바꾸면 박스 길이가 바뀜

 

박스와 같은 요소들을 brush 라고 부름

 

언리얼 에서는 단위가 cm

 

밑에다가 지오메트리 붙일려면 end 키 누르면 바로 붙음

 

라벨에다가 F2 누르면 이름 변경 가능

 

Player start 의 위치가 플레이어가 시작하는 위치이다.

 

지오메트리로는 지형을 만드는 거라서 움직일 수 없음

 

움직이려면 무버블로 지정해야함, 위치는 고정이지만 스케일 바꿀려면 스테이셔너리, 안움직이려면 스태틱으로

 

 

빌드 = 그림자 미리 계산

(그림자 다시 하려면 빌드 하면됨)

 

Blueprint 에서 alt 키 누르고 클릭하면 줄 끊김

 

아래와 같이 blueprint 에서 변수 설정해서 object 이동설정 가능 + 변수 설정으로 한번만 이동하는 기능 가능

 

 

- 자율주행을 사용하여 Gate 통과 영상

https://youtu.be/X35JXpNsjWo

 

 

-Reference & Code

https://github.com/rladntjd/sunrise_simulation.git

 

https://github.com/rladntjd/Drone_Competition_Joystick.git

 

https://github.com/rladntjd/Airsim_collision.git