상세 컨텐츠

본문 제목

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

만들기/드론

by kwangpil 2021. 5. 1. 22:16

본문

 

이전 글...

 

드론 만들기

  

   하드웨어

      기본부품

         비행 제어기(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 사용방법 3/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

            Gazebo 사용하기 2/4

            Gazebo 사용하기 3/4

            Gazebo 사용하기 4/4

 

   비행

      쿼드콥터(Quadcopter) 비행 원리      

 

   문제해결

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

 

   기타

      비행금지구역

      비행 시 주의 사항   

      멀티콥터 종류

      커넥터(connector)

      용어

 


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

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

참고만 하세요~!

 

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

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

 

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


 

Gazebo 사용하기 1/4에 이어서

 

2.4 시뮬레이션 환경

 

시뮬레이션 환경이란 말 그대로 시뮬레이션할 때 주위의 환경을 말한다.

 

Gazebo는 JMAVSim과 달리 몇 가지의 시뮬레이션 환경 지원하는데 이 시뮬레이션 환경파일은 .world라는 확장자명을 가진다.

 

시뮬레이션 시 시뮬레이션 환경 기본값 empty.world이며 사용자는 아래 "World 불러오기"에서처럼 특정한 시뮬레이션 환경을 직접 설정할 수 있다.

 

<empty.world>

보트, IR beacon(적외선 무선 송신기)이 설치된 기체 같은 몇몇 특수한 모델의 경우에는 물리적 환경 또는 특정 환경에서 시뮬레이션을 해야 하기 때문에 기체 모델과 동일한 이름을 가진 시뮬레이션 환경, 예를 들자면 boat.world, iris_irlock.workd 등을 PX4 툴체인 설치 시 자동으로 생성한다.

 

 

- World 불러오기

 

PX4가 지원하는 전체 Gazebo 시뮬레이션 환경(World) 목록은  PX4 소스코드 디렉터리 아래인 Tools/sitl-gazebo/worlds에 저장되어 있다.

 

터미널 창에서 PX 소스코드 디렉터리로 이동한 후  아래의 명령어를 입력하면 World 목록을 확인할 수 있다.

 

ls Tools/sitl_gazebo/worlds

 

<Tools/sitl-gazebo/worlds 목록>

 

만약 시뮬레이션 실행 시 시뮬레이션 환경을 설정하지 않을 경우에는 기본 설정값empty.world이 적용된다.

 

특정한 시뮬레이션 환경 설정하고자 할 경우 두 가지 방법이 있는데 그중 하나는  make 명령어를 사용하는 것이고 다른 하나는 환경변수를 사용하는 것이다.

 

첫 번째 방법make 명령어 사용은 make 명령어로 시뮬레이션빌드할 때 가장 마지막 옵션에 시뮬레이션 환경을 설정하는 것이다.

(make를 사용한 빌드의 옵션 구조는 아래 참조)

 

예로 기체 형태iris이고 시뮬레이션 환경 warehouse로 빌드하고 싶을 경우, 터미널에서 PX4 소스코드 디렉터리로 이동한 후 아래의 명령어를 사용하면 된다.

 

make px4_sitl gazebo___warehouse

정확한 위의 명령어는 make px4_sitl_default gazebo_iris_none_warehouse이지만 기본 설정값은 생략할 수 있기 때문에 default, iris, none을 생략했다.

 

<make 명령어로 시뮬레이션 환경 설정하기>

 

엔터키를 누르면 시뮬레이션이 빌드된다.

 

<make 명령어로 시뮬레이션 환경 설정>

 

두 번째 방법인  환경변수 사용하기는 export 환경변수시뮬레이션 환경설정해주는 것이다.

 

export PX4_SITL_WORLD

시뮬레이션 환경으로 warehouse.world를 설정하고 싶으면 아래와 같이 PX4 소스코드 디렉터리에서 아래와 같이 명령어를 입력하면 된다.

 

<환경변수로 시뮬레이션 환경 설정하기>

 

기본 설정값인 iris로 Gazebo를 빌드하고 싶을 경우에는 아래와 같이 이어서 빌드 명령어를 입력해주면 된다.

 

<Gazebo 시뮬레이션 빌드>

 

- World 위치 설정

 

기체는 몇몇 모의 GPS 위치에서 시뮬레이션 환경 모델의 원점에 매우 가깝게 생성된다.

 

만약 실제 위치에 재생성된 시뮬레이션 환경을 사용할 경우 시뮬레이션 환경에서 보이는 것과 지상통제소 지도 상에 보이는 것에서 매우 큰 불일치가 일어날 수 있다. 이러한 문제를 해결하기 위해서 시뮬레이션 환경의 원점 위치실제 환경 내에 위치한 GPS 좌표로 설정할 수 있다.

 

시뮬레이션 환경의 위치*.world 파일정의되어 있으며 구좌표계를 사용해서 원점 위치를 표기한다. 따라서 위치를 설정하고자 할 경우 위도, 경도, 고도를 명시해야 한다.

 

아래는 Gazebo가 지원하는 시뮬레이션 환경 중 하나인  sonoma_raceway.world이다.

 

<sonoma_raceway.world>

 

위의 붉은 네모상자에서 보듯이 파일 내에 실제 위치의 구좌표계가 설정되어 있다.

 

PX4 소스코드 디렉터리에서 아래의 명령어로 시뮬레이션 환경을 sonoma_raceway로  적용해서 Gazebo를 빌드하면 아래와 같이 시뮬레이션 환경의 원점 위치가 변경된다.

 

make px4_sitl gazebo___sonoma_raceway

 

sonoma_raceway.world와 함께 Gazebo 빌드

 

(제일 처음 실행 시에는 초기 데이터를 다운로드해야 하기 때문에 완료되는데 수 분이 걸릴 수 있다.)

 

sonoma_raceway.world와 함께 빌드한 Gazebo와 QGC

 

 

2.5 비디오 스트리밍

 

- 모의 측량 카메라

 

Gazebo 측량 카메라지리적 정보를 포함하는 JPEG 이미지를 캡처하고 캡처한 정보를 지상통제소에 보내는 MAVLink 카메라를 시뮬레이션한다.

(MAVLink 카메라는 MAVlink 통신 방법을 사용하는 카메라를 말하는 듯하다...)

 

이 카메라는 비디오 스트리밍도 지원하며, 특히 측량 임무에서 카메라 캡처 기능테스트하는 데 사용할 수 있다.

 

카메라는 사진을 촬영할 때마다 CAMERA_IMAGE_CATPURED 메시지를 보내며 촬영된 사진은 (PX4 소스코드 디렉터리/build/px4_sitl_default/tmp/frames/DSC_n.jpg로 저장된다. 여기서 n은 00000으로 시작하고 캡처가 될 때마다 1씩 증가한다.

 

 

카메라가 있는 드론을 빌드하려면 PX4 소스코드 디렉터리/Tools/sitl_gazebo/models 중에서 카메라가 장착되어 있는 기체 형태, 예를 들자면 fvp_cam, iris_fpv_cam,  plane_cam 등을 빌드하면 된다.

이중 fvp_cam, iris_fpv_cam 등은 ROS를 사용해야 하고 plane_cam은 ROS 없이도 빌드가 가능하다.

 

예로 plane_cam빌드하려면 먼저  PX4 소스코드 디렉터리로 이동한 후 아래의 make 명령어입력한다.

 

make px4_sitl gazebo_plane_cam 

 

<plane_cam 빌드>

 

엔터키를 누르면 Gazebo가 실행된다.

 

<Gazebo_plane_cam>

 

- 비디오 스트리밍

 

기체에 장착된 Gazebo 카메라 센서에서 촬영하는 UDP 비디오 스트리밍을 지원한다.

 

만약 스트리밍이 활성화되어 있을 경우 UDP 포트 5600을 통해서 자동으로 QGC에 스트리밍을 연결하고 스트리밍 되는 영상을 QGC 화면에서 볼 수 있다.

 

아래에서 보듯이 plane_cam을 make 명령어로 빌드한 후 QGC를 실행하면 자동으로 스트리밍이 연결되어 QGC 화면 왼쪽 하단에 영상이 스트리밍 된다.

(Video 설정이 되어있지 않을 경우 QGC 스트리밍 영상이 보이지 않을 수 있다. 설정 방법은 바로 아래 비디오 스트리밍 시작/정지 참조)

 

<plane_cam을 빌드한 Gazebo와 QGC>

 

- 비디오 스트리밍 시작/정지

 

Gazebo가 실행되면 비디오 스트리밍은 자동으로 시작하고 Gazebo가 종료되면 비디오 스트리밍도 정지된다.

 

하지만 Gazebo 카메라 센서를 지원하는 기체 형태인 경우에는 Gazebo UI(User Interface)에서 버튼으로 비디오 스트리밍을 해제/활성화할 수 있으며, 그 예가 Typhoon H480이다.

 

Px4 소스코드 디렉터리에서 다음의 make 명령어로 Typhoon H480를 빌드할 수 있다.

 

make px4_sitl gazebo_typhoon_h480

 

<Typhoon H480 빌드>

 

Gazebo 실행과 동시에 카메라 촬영은 시작된다.

아래 그림이 보듯이 상단에 녹색의 UI 버튼은 Video ON으로 표시되어 있다.

 

<Typhoon H490 Video On>

 

녹색 버튼을 클릭하면 붉은 버튼으로 바뀌며 카메라 촬영/스트리밍은 중지된다.

 

<Typhoon H490 Video Off>

 

카메라가 촬영하는 동영상을 볼 수 있는  방법은 두 가지가 있는데 그중 가장 간단한 방법은 QGC를 이용하거나 또는 Gstreamer Pipeline을 이용하는 것이다. 

(Gstreamer은 툴체인 설치 시 함께 설치되어서 따로 설치할 필요 없는 없다)

 

QGC에서 비디오 스트리밍을 보려면 우선 QGC > 응용프로그램 설정 > 일반 > Video 항목에서 설정을 해주여야 한다.

 

<QGC에서 비디오 설정>

 

비디오 소스를 클릭한 후 UDP h.264 Video Stream을 선택한다.

 

<QGC에서 비디오 소스 설정>

 

자동으로 UDP 포트, 가로세로 비율이 설정되는데 UDP 포트를 5600 입력하면 설정이 완료된다.

(기본값으로 5600이 설정되어 있다)

 

<QGC에서 UDP 포트 설정>

 

설정을 완료한 후 QGC를 실행시키면 화면 왼쪽 아래에 동영상 스트리밍 창이 나타난다.

 

QGC에서 스트리밍 동영상

 

Gstreamer Pipeline을 사용해서 동영상 스트리밍을 보려면 터미널 창에 아래의 명령어를 입력한다.

 

gst-launch-1.0  -v udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink fps-update-interval=1000 sync=false

 

Gstreamer Pipeline으로 동영상을 보기 위한 터미널 창의 명령어

 

엔터키를 누르고 잠시 기다리면 스트리밍 창이 생성된다.

 

Gazebo와 스트르밍 창

 

2.6 상세 로깅(Verbose Logging)

 

SITL은 Gazebo 모델에 어떤 문제가 발생할 경우 갑자기 종료된다. 이런 경우 상세 로깅을 해서 더 상세한 정보를 파악할 수 있다.

 

상세 로깅은 PX4 소스코드 디렉터리에서 아래의 명령어로 할 수 있다.

 

export VERBOSE_SIM=1

make px4_sitl gazebo

또는

 

VERBOSE_SIM=1 make px4_sitl gazebo

 

2.7 확장 및 사용자 정의(customizing)

 

시뮬레이션 인터페이스를 확장하거나 사용자 정의를 위해서 Tools/sitl_gazebo 디렉터리 내의 파일을 편집할 수 있다. 이 코드는 Github의 sitl_gazebo repository에서 사용 가능하다.

 


< 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.

 


 

관련글 더보기

댓글 영역