상세 컨텐츠

본문 제목

[드론 만들기] Gazebo 사용하기 1/4

만들기/드론

by kwangpil 2021. 4. 25. 11:35

본문

 

이전 글...

 

드론 만들기

  

   하드웨어

      기본부품

         비행 제어기(FC)

            Pixhawk 시리즈

               Pixhawk의 GPS

               Pixhawk의 텔레메트리(Telemetry)              

               Pixhawk의 변속기(ESC)

                  QGroundControl에서 변속기(ESC) 교정하기     

               Pixhawk 4의 Power Management Board              

               Pixhawk 4

                  QGroundControl에서 Pixhawk 4 펌웨어 설치

                  QGroundControl에서 Pixhawk 4 설정하기 1/2

                  QGroundControl에서 Pixhawk 4 설정하기 2/2       

         모터

         배터리

            리튬 폴리머 배터리 팩

         변속기 (ESC)

         프로펠러 (Propeller)

         파워 분배기(PDB, Power Distribution Board)

         조종기(Radio Control)          

 

   소프트웨어

      MissionPlanner와 QGroundControl

      QGroundControl 설치

         QGroundControl 사용방법 1/4

         QGroundControl 사용방법 2/4

         QGroundControl에서 Pixhawk 4 펌웨어 설치

         QGroundControl에서 Pixhawk 4 설정하기 1/2

         QGroundControl에서 Pixhawk 4 설정하기 2/2

         QGroundControl에서 Pixhawk 파라미터 변경하기  

      VMware Workstation Pro 설치하기

         VMware Workstation Player에 Virtaul Machine 만들기

         VMware Workstation Player에 Ubuntu 설치하기

            Ubuntu(우분투) 터미널 명령어

            Ubuntu(우분투) 주요 디렉터리

            Ubuntu(우분투) 기초용어

 

   조립

      모터, 변속기에 커넥터 연결하기

      Power Management Board에 커넥터 연결하기

      변속기(ESC)와 Power Management Board 연결하기

      모터와 변속기(ESC) 연결하기

      QGroundControl에서 변속기(ESC) 교정하기

      GPS, Telemetry Pixhawk 4에 연결하기

  

   통신

      MAVLink

         MAVLink 설치하기

         MAVLink 라이브러리 생성하기

 

   개발

      드론 비행 시뮬레이터(Simulator)         

         툴체인(toolchain) 설치하기

            jMAVSim 사용하기 1/2

            jMAVSim 사용하기 2/2

            Gazebo 사용하기 1/4           

 

   비행

      쿼드콥터(Quadcopter) 비행 원리       

 

   문제해결

      Pixhawk와 Emax ESC(변속기) 호환문제 해결방법

 

   기타

      비행금지구역

      비행 시 주의 사항   

      멀티콥터 종류

      커넥터(connector)

      용어


완전 초짜의 드론 만들기 도전! 도전! 도전~!입니다.
맨땅에 헤딩~

인터넷 검색, 관련 사이트를 참고하여 Pixhawk 4(PX4)를 이용한 중/소형 쿼드콥터 드론을 만들려고 하고 있습니다.

참고만 하세요~!

 

※ 아래 내용은 픽스호크 홈페이지 내용을 기반으로 작성한 것으로 틀린 내용을 포함하고 있을 수도 있습니다.

※ 정확한/상세한 내용은 Pixhawk 홈페이지 참조하세요.

 

※ 사용하는 운영체제는 우분투(Ubuntu) 18.04 또는 20.04이며 특별한 언급이 없을 경우 우분투(Ubuntu) 18.04입니다.


 

Pixhawk로 드론을 만들 때 많이 사용하는 또 다른 시뮬레이터는 Gazebo이다.

 

단순한 외관/기능을 가진 jMAVSim과는 달리 Gazebo는 무료 소프트웨어인데도 유료 소프트웨어처럼 사용자 인터페이스도 깔끔할 뿐만 아니라 물체 회피와 컴퓨터 비전 용으로 적합한 탁월한 3D 시물레이션 환경을 제공하며 드론뿐만 아니라 자동 로봇 용 시뮬레이터로도 많이 사용된다.

 

지원하는 기체 형태도 다양하다.

jMAVSim의 경우 쿼드콥터 형태만 지원했지만 Gazebo는 Quad(Iris), Solo, Hex(Typhoon H480), Generic quad delta VTOL, Tailsitter, Plane, Rover, Submarine/UUV을 지원한다.

*iris는 3DR의 쿼드콥터로 Gazebo 시뮬레이터의 기본 설정값이다.

 

사용 가능한 운영체제macOS, Linux이며 Windwos는 지원하지 않는다.

 

GazeboROS와도 함께 사용 가능한데 만약 PX4를 ROS와 함께 사용할 계획이라면 설치 시 충돌을 피하기 위해서 ROS 설명서에 따라 ROS와 가제보를 설치해야 한다.

 

여기서는 ROS 없는 SITL 단일 비행, 다수 비행, HITL 비행을 설명한다.

 

 

1. 설치 

 

Ubuntu에서 Gazebo를 사용하려면 우선 툴체인 설치해야 한다.

 

툴체인 설치는  [드론 만들기] 툴체인(toolchain) 설치하기을 참조하며 Gazebo에 관련한 추가 설치 설명은 Gazebo 홈페이지를 참조한다.

 

 

2. SITL Simulation

 

[드론 만들기] 툴체인(toolchain) 설치하기에서 다운로드한 PX4 소스코드 디렉터리로 이동한 후 make 명령어로 Gazebo SITL 시뮬레이터를 실행할 수 있다.

(* make를 사용한 시뮬레이터 빌드의  옵션 구조는 아래 참조)

 

아래의 명령어는 기본 설정인 쿼드콥터(iris) 용 명령어이다.

make px4_sitl gazebo

 

 

잠시 기다리면  Gazebo가 실행된다.

 

Gazebo 시뮬레이터

 

* Gazebo의 기본 기체 형태는 iris이다.

 

쿼드콥터(iris) 외에 Gazebo가 지원하는 기체 형태의 make 명령어는 아래와 같다. 

 

출처: https://docs.px4.io/

 

Gazebo가 지원하는 기체형태의 전체 목록은 PX4 소스코드 디렉터리에서 아래의 명령어를 입력하면 터미널 창에 출력이 되는데 줄 바꿈이 없어서 알아보기가 쉽지는 않다....

make px4_sitl list_vmd_make_targets

 

Gazebo시뮬레이터 종료하려면 콘솔 창(터미널 창)에서 ctrl + c를 누르면 종료된다.

 

Gazebo 시뮬레이터 종료

 

 

2.1 드론 이륙 및 착륙

 

Gazebo가 실행되고 나면 콘솔 창에 명령어를 입력해서 드론을 이륙/착륙할 수 있으며 명령어는 아래와 같다.

 

이륙:

commander takeoff

착륙:

commander land

 

하지만 이륙 명령어를 콘솔에 입력하면 jMAVSim에서처럼 이륙을 하지 못하는 동일한 에러가 발생한다.

 

jMAVSim에서 언급했듯이 이때 배터리, 통신 등의 에러 발생을 대비하여 안전장치  RTL(Return to Launch)이 활성화되어 있으면 RTL명령어가 실행될 수도 있다. 소스코드에서 안전 설정 변경은 어떻게 하는지 모르겠고, QGroundControl에서 안전장치 설정을 변경해서 RTL 명령어를 해제할 수 있다.  안전장치 설정를 설정하는 방법은 [드론 만들기] QGroundControl에서 Pixhawk 4 설정하기 2/2을  참조)

 

Gazebo 이륙 에러

 

시동이 자동으로 꺼지고 드론이 이륙하지 않는다. 하지만 다시 이륙 명령어를 입력하면 정상적으로 이륙한다.

 

Gazebo 이륙

 

이륙 후 착륙 명령어를 입력하면 드론은 착륙한다.

(즉, 제일 처음 명령어에서만 에러 발생)

 

Gazebo 착륙

 

인터넷에서 해결방법을 찾아보려고 해 봤지만 찾지를 못했다. 어쩌면 단순한 원인으로 손쉽게 해결할 수 있는 문제일 수도 있고 Gazebo 자체 문제일 수도 있지만... 초짜라 알 길이 없다.

어쨌든 시뮬레이터 실행 후 처음 이륙 명령어에서만 이런 에러가 발생했고 지금까지 그 외에 시뮬레이션을 하는데 문제가 발생하지 않아서 일단은 이 문제를 무시하기로 했다. 

 

Gazebo에서 드론 이/착륙 동영상은 아래와 같다.

 

Gazebo 이/착륙

 

 

2.2 QGroundControl과 함께 실행

 

QGroundControl(QGC)를 연결해서 Gazebo와 함께 사용하면 시각적으로 시뮬레이션 효과가 향상될 뿐만 아니라 QGC상에서 이륙, 착륙, 미션 등의 명령도 실행할 수 있어 콘솔 창에서 명령어를 입력하는 번거로움을 피할 수도 있다.

필요시 조이스틱 등도 함께 연결해서 사용할 수도 있지만 조이스틱을 사용하지 않을 예정이기 때문에 여기서는 따로 설명하지는 않는다) 

 

사용방법은 간단하다.

Gazebo를 실행한 후 QGC를 실행시켜거나 또는 반대로 QGC를 실행 후 Gazebo를 실행하면 mavlink로 서로 연결된다.

 

아래 그림은 위의 make 명령어로 Gazebo를 실행한 후 QGC를 실행한 화면이다.

 

Gazebo와 QGC

 

처음 실행 후 콘솔 화면에 이륙 명령어를 입력하면 앞서 발생했던 동일한 에러가 발생한다. 물론 이후에는 Gazebo 시뮬레이션 때처럼 에러 없이 이륙, 착륙이 실행된다(아래 동영상 참조)

 

Gazebo와 QGC 이/착륙 에러

 

하지만 QGC에서 직접 이륙, 착륙 명령을 실행하면 이런 에러가 발생하지 않는다(아래 동영상 참조)

 

Gazebo와 QGC 이/착륙 

 

이 에러는 시뮬레이션하는데 큰 문제가 되지 않기 때문에  일단은 무시하기로 한다. 

 

 

2.3  설정 기능

 

- 홈(Home) 위치 변경

 

환경변수를 사용해서 직접 위도, 경도, 고도를 입력해서 홈 위치를 설정/변경할 수 있으며 각 명령어는 아래와 같다.

 

위도:

export PX4_HOME_LAT

경도:

export PX4_HOME_LON

고도:

export PX4_HOME_ALT

 

예로 QGC의 기본 홈 위치를 서울의 한 곳으로 변경하려면 다음과 같다.

 

먼저 새 홈의 위도, 경도를 찾고 고도를 결정한다.

(설정할 홈 위치: 위도 - 37.418613, 경도 - 126.714935, 고도 - 30)

 

새 홈의 위치가 결정되었으면 터미널에서 PX4 소스코드 디렉터리로 이동한 후 환경변수 명령어를 사용해서 아래처럼 홈 위치의 위도, 경도, 고도 입력한다.

 

홈 위치 변경 환경변수 입력

 

입력이 끝났으면 make 명령어로 Gazebo실행한다.

 

Gazebo 실행

 

QGC와 함께 실행하면 홈 위치가 변경되는 것을 시각적으로 확인할 수 있다.

 

Gazebo에서 홈 위치 변경

 

 

- 시뮬레이션 속도 변경

 

환경변수를 이용해서 실제 시간 대비 시뮬레이션 속도를 증가 또는 감소할 수 있으며 명령어는 아래와 같다.

 

export PX4_SIM_SPEED_FACTOR

 

예로 시뮬레이션 속도를 실제 속도보다 2배 빠르게 설정하는 방법은 아래와 같다.

 

우선  터미널에서 PX4 소스코드 디렉터리로 이동한 후 원하는 속도 배율 인수에 2 입력한다.

 

Gazebo 시뮬레이션 속도 변경

 

이어서 make 명령어를 이용해서 Gazebo를 실행하면 시뮬레이션 속도가 2 배가된다.

 

 

- GUI 없이 Gazebo 실행 (Headless mode)

 

환경변수를 설정해서 그래픽 사용자 인터페이스(GUI) 없이 Gazebo 실행할 수 있으며 명령어는 아래와 같다.

HEADLESS=1 make px4_sitl gazebo

GUI 없는 Gazebo 명령어

 

Headless mode를 사용하면 시뮬레이터가 더 빠르게 시작하고 더 적은 시스템 리소스를 사용하는 장점이 있다.

 

아래의 동영상에서 확인할 수 있듯이 그래픽 화면이 실행되지 않는다.

 

GUI 없는 Gazebo 실행

 

만약 현재 터미널에서 실행되는 모든 SITL GUI 없이 실행하고 싶을 경우에는 export 명령어를 사용하면 된다.

export HEADLESS=1

명령어 입력 후 Gazebo를 실행하면 GUI가 나타나지 않으며 이 설정은 터미널 창이 종료되기 전까지 유지된다.

 

 

- Gazebo와 PX4를 분리해서 실행

** 아래 참조

 

 

- 풍속 변경

 

시뮬레이션 시 바람 속도를 고려해야 할 경우 world 파일바람 속도 설정 플러그인추가해서 속도를 변경할 수 있다.

 

먼저 터미널 상에서 PX4 소스코드 디렉터리 이동 후 아래의 명령어로 windy.world 파일을 불러온다. 

gedit Tools/sitl_gazebo/world/windy.world

* gedit는 우분투에서 기본으로 제공하는 텍스트 편집기 프로그램.

* world 파일은 [드론 만들기] Gazebo 사용하기 2/4 참조

 

터미널 창에서 world 파일 열기

 

또는 윈도처럼 바탕화면 왼쪽의 파일 아이콘을 클릭해서 쉽게 windy.world 파일에 접근할 수 있다.

 

파일 탐색기에서 world 파일 열기

 

터미널에서 엔터를 누르거나 또는 파일을 더블 클릭하면 텍스트 편집기가 실행된다.

 

windy.world 파일

 

위의 그림처럼 wind_plugin 복사한다.

 

Gazebo에서 기본 world 파일empty.world로 windy.world 파일을 불러올 때처럼 터미널에서 PX4 소스 파일 디렉터리에서 아래의 명령어를 입력해서 empty.world 파일을 불러온다.

gedit Tools/sitl_gazebo/world/empty.world

 

터미널 창에서 empty.world 파일 열기

 

또는 윈도처럼 바탕화면 왼쪽의 파일 아이콘을 클릭해서 쉽게 접근할 수 있다.

 

파일 탐색기에서 empty.world 파일 열기

 

터미널에서 엔터를 누르거나 또는 파일을 더블 클릭하면 텍스트 편집기가 실행된다.

 

empty.world 파일

 

</include> 뒤windy.world에서 복사한 부분을 붙여 넣는다.

 

empty.world 파일에 wind_plugin 추가

 

'wind_plugin'에서 windVelocityMean 사이에 원하는 바람 속도를 입력하면 된다.

(기본값 4.0이 입력되어있음)

 

아래의 동영상은 바람 속도가 20m/s일 때 드론이 이, 착륙하는 동영상이다.

 

바람속도가 20m/s에서의 드론 이/착륙

 

 

- GPS 잡음 시뮬레이션

 

Gazebo는 실제 시스템에서 발생하는 GPS 잡음과 유사한 GPS 잡음을 고려시뮬레이션할 수 있다. 이러한 기능은 정밀 위치 결정과 같은 GPS 잡음에 영향을 받는 작업에서 유용하게 사용할 수 있다.

 

GPS 잡음 설정은 시뮬레이션을 할 기체의 SDF 파일gpsNoise의 항목에 어떤 값이 포함되어있다면 활성화되어있는 것으로 많은 기체의 SDF 파일에는 기본 설정으로 GPS 잡음이 활성화되어어있다.

(예 solo.sdf, iris.sdf, standard_vtol.sdf 등등.)

 

GPS 잡음을 활성화/해제하는 방법은 간단하다.

 

먼저 SDF 파일을 활성화하기 위해서 해당하는 기체 형태의 Gazebo(iris)를 빌드한다.

make px4_sitl gazebo

그다음 터미널에서 PX4 소스코드 디렉터리로 이동한 후 아래의 명령어를 입력해서 sdf 파일을 불러온다.

(또는 파일 아이콘을 클릭해서 파일 탐색기로 접근할 수도 있다)

gedit Tools/sitl_gazebo/models/iris/iris.sdf

터미널 창에서 sdf 파일 열기

엔터를 누르면 텍스트 편집기가 실행된다.

 

iris.sdf 파일

 

위를 보면 gpsNoise는 1로 활성화되어있다.

만약 비활성화/해제하고 싶을 경우에는 <gpsNoise>1</gpsNoise>을 삭제하면 된다.

 

만약 gps_plugin에 gpsNoise가 미리 설정되어있지 않다면 비활성화되어있는 것이다. 만약 gpsNoise 항목을  없을 경우에는 gps_plugin에 위의 사진처럼 gpsNoise요소를 추가해서 GPS잡음을 활성화할 수 있다.

 

다시 Gazebo를 빌드하거나 재시작할 때 새롭게 설정한 GPS 잡음 설정이 적용된다.

 

 

 [드론 만들기] Gazebo 사용하기 2/4에서 계속

 


< make를 사용한 빌드의  옵션 구조 >

make [vendor_][model][_variant] [viewer_model_debugger_world]


vendor: px4, intel 등의 제조사 이름이며 픽스호크 시리즈 보드 용 vendor 이름은 px4.
model: sitl, fmu-v2, fmu-v4, fmu-v5 등.
variant: rtps, lpe 등과 같은 세부적인 구성.  대부분은 default이며 생략 가능.
viewer:  gazebo, jmavsim, none.

          예) make px4_sitl none_iris -> PX4는 기체 형태는 iris이지만 시뮬레이터 없이 빌드.
model: rover, iris, tailstter 등의 모델 명
debugger: none(기본 설정), ide, gdb, lldb, ddd 등.
world: Gazebo에만 적용하는 환경설정으로 기본 설정은 empty_world.

 


< Gazebo와 PX4를 분리해서 실행 >

 

Gazebo와 PX4를 분리해서 실행할 수 있으며 또는 IDE에서 실행할 수 있다고 픽스호크 홈페이지에 설명되어 있다.

 

픽스호크 홈페이지에 설명되어 있는 명령어는 아래와 같다.

 

Gazebo 실행:

make px4_sitl gazebo___ide

또는 

make px4_sitl gazebo_iris_ide

 

PX4 실행:

make px4_sitl none

 

Gazebo 실행 명령어의 경우 마지막 끝단의 Debugger가 ide로 설정이 되어 있어서 터미널에서 실행을 하면 에러가 발생한다. (IDE를 사용하지 않기 때문에 사용하지 않음.)

다른 debugger를 설정해서 분리해서 실행하면 각각 따로 실행이 되지만 PX4만 중지 후 재실행하면 서로 통신이 재연결되지 않아 분리 실행이 무용지물이 된다.

 

인터넷에 찾은 해결방법들을 적용해보았지만 여전히 똑같다.

무언가 잘못되었지만... Gazebo 자체 문제인지, 초짜의 능력 부족인지 현재로는 알 수가 없다.


 

관련글 더보기

댓글 영역