# Gazebo 시뮬레이션

Gazebo (opens new window)는 물체 회피 및 컴퓨터 비전 테스트에 적합한 자율 로봇을 위한 강력한 3D 시뮬레이션 환경입니다. 이 페이지에서는 SITL과 단일 차량과 함께 사용하는 방법을 설명합니다. Gazebo는 HITL다중 차량 시뮬레이션과 함께 사용할 수 있습니다.

지원 차량: 쿼드(Iris솔로, Hex(Typhoon H480), 일반 쿼드 델타 VTOL, 테일시터, 비행기, 로버, 잠수함/UUV.

WARNING

Gazebo는 차량제어 자동화를 위한 툴킷/오프보드 API인 ROS와 함께 자주 사용됩니다. ROS와 함께 PX4를 사용하려면, ROS 지침을 따라 ROS와 Gazebo를 모두 설치하여야 합니다(따라서 설치 충돌을 피해야 함).

@유투브 (opens new window)

인어 그래프: Gazebo 플러그인 (opens new window)

Note

시뮬레이터, 시뮬레이션 환경 및 시뮬레이션 설정(예: 지원 차량)에 대한 일반 정보는 시뮬레이션을 참고하십시오.

# 설치

Gazebo 9 설정은 표준빌드방법에 포함되어 있습니다.

추가 설치 방법은 gazebosim.org (opens new window)을 참고하십시오.

# 시뮬레이션 실행

로드할 기체 환경에서 PX4 SITL 및 Gazebo를 시작하여 시뮬레이션을 실행합니다(멀티콥터, 비행기, VTOL, 광학 흐름 및 다중 차량 시뮬레이션 지원).

가장 편리한 방법은 PX4 PX4-Autopilot 저장소의 루트 디렉토리에서 터미널을 열고 원하는 대상에 대해 make를 호출하는 것입니다. 예를 들어 쿼드로터 시뮬레이션을 시작하려면(기본값):

cd /path/to/PX4-Autopilot
make px4_sitl gazebo

지원되는 차량 및 make 명령은 아래에 나열되어 있습니다. 차량 이미지를 보려면 링크를 클릭하십시오.

Note

빌드 대상의 전체 목록을 보려면 make px4_sitl list_vmd_make_targets를 실행하십시오(그리고 gazebo_로 시작하는 대상에서 필터링).

차량 명령어
쿼드콥터 make px4_sitl gazebo
광류센서 장착 쿼드콥터 make px4_sitl gazebo_iris_opt_flow
3DR Solo (쿼드콥터) make px4_sitl gazebo_solo
Typhoon H480(헥스로터)(동영상 스트리밍 지원) make px4_sitl gazebo_typhoon_h480
표준 항공기 make px4_sitl gazebo_plane
표준 비행기 (투석기 발사 포함) make px4_sitl gazebo_plane_catapult
표준 VTOL make px4_sitl gazebo_standard_vtol
테일시터 VTOL make px4_sitl gazebo_tailsitter
Ackerman 차량 (UGV/Rover) make px4_sitl gazebo_rover
HippoCampus TUHH (UUV: 무인 수중 차량) make px4_sitl gazebo_uuv_hippocampus
보트 (USV: 무인 수상 차량) make px4_sitl gazebo_boat
클라우드쉽 (비행선) make px4_sitl gazebo_cloudship

Note

파일 및 코드 설치 가이드는 빌드 오류가 있는 경우 참고하십시오.

위의 명령은 전체 UI로 단일 차량을 시작합니다. 기타 옵션은 다음과 같습니다.

  • PX4와 Gazebo를 별도로 시작하여 Gazebo를 계속 실행하고, 필요하면 PX4를 다시 시작할 수 있습니다(둘 다 다시 시작하는 것보다 빠름).
  • Gazebo UI를 시작하지 않는 헤드리스 모드에서 시뮬레이션을 실행합니다(이는 적은 리소스를 사용하고 훨씬 빠름).

# 하늘로 띄우기

위의 make 명령은 먼저 PX4를 빌드한 다음, Gazebo 시뮬레이터를 실행합니다.

PX4가 시작되면 아래와 같은 PX4 셸이 시작됩니다.

______  __   __    ___ 
| ___ \ \ \ / /   /   |
| |_/ /  \ V /   / /| |
|  __/   /   \  / /_| |
| |     / /^\ \ \___  |
\_|     \/   \/     |_/

px4 starting.

INFO  [px4] Calling startup script: /bin/sh etc/init.d-posix/rcS 0
INFO  [param] selected parameter default file eeprom/parameters_10016
[param] Loaded: eeprom/parameters_10016
INFO  [dataman] Unknown restart, data manager file './dataman' size is 11798680 bytes
INFO  [simulator] Waiting for simulator to connect on TCP port 4560
Gazebo multi-robot simulator, version 9.0.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
...
INFO  [ecl/EKF] 5188000: commencing GPS fusion

콘솔은 PX4가 기체 고유의 초기화 및 매개변수 파일을 로드하고, 시뮬레이터가 실행되기를 기다리며(연결할 때) 상태를 출력합니다. [ecl/EKF]가 GPS 융합을 시작한다는 정보가 인쇄되면 차량은 시동 준비가 된 것입니다.

Note

쿼드로터 모델을 마우스 오른쪽 버튼으로 클릭하면, 컨텍스트 메뉴에서 팔로우 모드를 활성화할 수 있어 보기에 편리합니다.

Gazebo UI

다음을 입력하여 공중에 띄울 수 있습니다.

pxh> commander takeoff

# 사용법/설정 옵션

모든 시뮬레이터에 적용되는 옵션은 최상위 시뮬레이션에서 설명합니다(일부는 아래에서 중복될 수 있음).

# 센서/하드웨어 오류 시뮬레이션

안전장치 시뮬레이션에서는 GPS 오류와 배터리 소모와 같은 안전 비상안전장치를 트리거하는 방법을 설명합니다.

# 헤드리스 모드

Gazebo는 Gazebo UI가 실행되지 않는 headless 모드에서 실행될 수 있습니다. 헤드리스 모드는 시작이 빠르고 시스템 리소스를 적게 사용합니다(즉, 시뮬레이션을 실행하는 데 더 "가벼운" 방법입니다).

다음과 같이 일반 make 명령에 HEADLESS=1 접두어를 붙이면 됩니다.

HEADLESS=1 make px4_sitl gazebo_plane

# 사용자 지정 이륙 위치 설정

SITL Gazebo의 이륙 위치는 환경 변수를 사용하여 설정합니다. 기본 이륙 위치와 세계에 대해 설정된 값이 모두 재정의됩니다.

설정할 변수는 PX4_HOME_LAT, PX4_HOME_LONPX4_HOME_ALT입니다.

예:

export PX4_HOME_LAT=28.452386
export PX4_HOME_LON=-13.867138
export PX4_HOME_ALT=28.5
make px4_sitl gazebo

# 시뮬레이션 속도 변경

시뮬레이션 속도는 환경 변수 PX4_SIM_SPEED_FACTOR를 사용하여 실시간으로 증가 또는 감소할 수 있습니다.

export PX4_SIM_SPEED_FACTOR=2
make px4_sitl_default gazebo

자세한 내용은 시뮬레이션 > 실시간보다 빠른 시뮬레이션 실행편을 참고하십시오.

# 풍속 변경

풍속을 시뮬레이션하려면, 아래 플러그인을 월드 파일에 추가하고 SET_YOUR_WIND_SPEED를 원하는 속도로 변경하십시오.

  <plugin name='wind_plugin' filename='libgazebo_wind_plugin.so'>
      <frameId>base_link</frameId>
      <robotNamespace/>
      <xyzOffset>1 0 0</xyzOffset>
      <windDirectionMean>0 1 0</windDirectionMean>
      <windVelocityMean>SET_YOUR_WIND_SPEED</windVelocityMean>
      <windGustDirection>0 0 0</windGustDirection>
      <windGustDuration>0</windGustDuration>
      <windGustStart>0</windGustStart>
      <windGustVelocityMean>0</windGustVelocityMean>
      <windPubTopic>world_wind</windPubTopic>
    </plugin>

PX4/PX4-SITL_gazebo/worlds/windy.world (opens new window)에서 어떻게 실행되는지 볼 수 있습니다.

# 조이스틱 사용법

조이스틱과 썸 조이스틱 지원은 QGroundControl에서 지원됩니다(설정 방법 참고).

# 거리 센서 성능 향상

현재 기본 세계는 고도 맵을 지면으로 사용하는 PX4/sitl_gazebo/worlds/iris.world (opens new window))입니다.

이는 거리 센서를 사용할 때 문제가 발생할 수 있습니다. 예상치 못한 결과가 발생하면, iris.model의 모델을 uneven_ground에서 asphalt_plane으로 변경하십시오.

# GPS 노이즈 시뮬레이션

Gazebo는 실제 시스템에서 일반적으로 발견되는 것과 유사한 GPS 잡음을 시뮬레이션할 수 있습니다(그렇지 않으면 보고된 GPS 값은 잡음이 없고 완벽한 것입니다). 이것은 GPS 노이즈의 영향을 받을 수 있는 응용 프로그램(예: 정밀 포지셔닝)에서 작업할 때 유용합니다.

대상 차량의 SDF 파일에 gpsNoise 요소 값이 포함된 경우(즉, <gpsNoise>true</gpsNoise> 행이 있음) GPS 노이즈가 활성화됩니다. 많은 차량 SDF 파일에서 기본적으로 활성화되어 있습니다: solo.sdf, iris.sdf, standard_vtol.sdf, **delta_wing.sdf **, plane.sdf, typhoon_h480, tailsitter.sdf.

GPS 노이즈를 활성화/비활성화하려면:

  1. SDF 파일(모든 차량용)을 생성하기 위해 가제보 대상을 구축합니다. 예:
    make px4_sitl gazebo_iris
    

SDF

파일은 후속 빌드에서 덮어 쓰지 않습니다.

  1. 대상 차량에 대한 SDF 파일을 엽니다(예: ./Tools/sitl_gazebo/models/iris/iris.sdf).
  2. gpsNoise 요소를 검색합니다.
    <plugin name='gps_plugin' filename='libgazebo_gps_plugin.so'>
      <robotNamespace/>
      <gpsNoise>true</gpsNoise>
    </plugin>
    
    • GPS가 있으면, GPS가 활성화된 것입니다. <gpsNoise>true</gpsNoise> 줄을 삭제하여 비활성화 됩니다.
    • 사전 설정되어 있지 않으면, GPS가 비활성화됩니다. 위의 그림과 같이, gps_plugin 섹션에 gpsNoise 요소를 추가하여 활성화할 수 있습니다.

다음에 Gazebo를 빌드/재시작하면 새로운 GPS 노이즈 설정이 사용됩니다.

# 특정 세계 로드

PX4는 PX4/sitl_gazebo/worlds (opens new window)에 저장된 다수의 Gazebo Worlds를 지원합니다. 기본적으로 Gazebo는 empty.world (opens new window)에 정의된 것처럼 평평한 특징 없는 평면을 표시합니다.

PX4 구성 대상에서 최종 옵션으로 지정하여 모든 세계를 로드할 수 있습니다.

예를 들어, 창고 세계를 로드하려면 다음과 같이 추가할 수 있습니다.

make px4_sitl_default gazebo_plane_cam__warehouse

Note

기본 디버거가 사용됨(없음)을 나타내는 모델(plane_cam) 뒤에 두 개의 밑줄이 있습니다. See Building the Code > PX4 Make Build Targets.

PX4_SITL_WORLD 환경 변수를 사용하여, 로드할 세계의 전체 경로를 지정할 수 있습니다. 이것은 PX4에 아직 포함되지 않은 새로운 세계를 테스트할 때 유용합니다.

TIP

로드된 세계가 지도와 일치하지 않으면 세계 위치를 설정하여야 합니다.

# 세계 위치 설정

차량은 일부 시뮬레이션된 GPS 위치에서 월드 모델의 원점에 매우 가깝게 복제됩니다.

Note

차량은 Gazebo 원점(0,0,0)에서 정확히 생성되지 않지만, 약간의 오프셋을 사용하여 여러 일반적인 코딩 문제를 강조할 수 있습니다.

실제 위치(예: 특정 공항)를 재현하는 세계를 사용하는 경우에는 시뮬레이션된 세계에 표시되는 것과 지상국 지도에 표시되는 것에 불일치가 발생할 수 있습니다. 이 문제를 극복하기 위해 세계 원점의 위치를 "실제" GPS 좌표로 설정할 수 있습니다.

Note

동일한 작업을 수행하는 맞춤 이륙 위치를 설정할 수 있습니다. 그러나, 지도에 위치를 추가하는 것이 더 편리합니다(필요한 경우 사용자 지정 위치를 설정할 수 있음).

세계의 위치는 spherical_coordinates 태그를 사용하여, 원점의 위치를 지정하여 .world 파일에 정의합니다. 위도, 경도, 고도가 모두 지정되어야 합니다(이것이 유효하려면).

예제는 sonoma_raceway.world (opens new window)를 참고하십시오.

    <spherical_coordinates>
      <surface_model>EARTH_WGS84</surface_model>
      <latitude_deg>38.161479</latitude_deg>
      <longitude_deg>-122.454630</longitude_deg>
      <elevation>488.0</elevation>
    </spherical_coordinates>

다음 make 명령을 사용하여 Sonoma Raceway World에서 로버를 생성하여 테스트할 수 있습니다. 모델 데이터베이스에서 다운로드하므로 최초 생성 시간이 오래 걸립니다.

make px4_sitl gazebo_rover__sonoma_raceway

아래 비디오는 환경의 위치가 전망대 세계와 일치함을 보여줍니다.

@유투브 (opens new window)

# Gazebo와 PX4를 각각 시작

확장된 개발 세션의 경우 Gazebo와 PX4를 별도로 시작하거나, IDE 내에서 시작하는 것이 더 편리할 수 있습니다.

올바른 모델을 로드하기 위하여 px4에 대한 매개변수와 함께 sitl_run.sh를 실행하는 기존 cmake 대상 외에도 원래 sitl px4 앱과 유사한 얇은 래퍼인 px4_<mode>이라는 실행기 대상을 생성합니다. 이 얇은 래퍼는 현재 작업 디렉터리 및 모델 파일 경로와 같은 앱 인수를 포함합니다.

Gazebo와 PX4를 별도로 시작하려면:

  • _ide 변형을 지정하는 터미널을 통해 가제보(또는 다른 시뮬레이션) 서버 및 클라이언트 뷰어를 실행합니다.
    make px4_sitl gazebo___ide
    
    또는
    make px4_sitl gazebo_iris_ide
    
  • IDE에서 디버그할 대상 px4_<mode>을 선택합니다(예: px4_iris).
  • IDE에서 직접 디버그 세션을 시작합니다.

이 접근 방식은 시뮬레이터(예: Gazebo)가 항상 백그라운드에서 실행되고 매우 가벼운 px4 프로세스만 다시 실행하기 때문에 디버그 주기 시간을 크게 줄여줍니다.

# 모의 측량 카메라

Gazebo 측량 카메라는 위치 태그가 지정된 JPEG 이미지를 캡처하고 카메라 캡처 정보를 지상국으로 전송하는 MAVLink 카메라 (opens new window)를 시뮬레이션합니다. 카메라는 비디오 스트리밍을 지원합니다. 특히 조사 임무에서 카메라 캡처를 테스트할 수 있습니다.

카메라는 이미지가 캡처될 때마다 CAMERA_IMAGE_CAPTURED (opens new window) 메시지를 전송합니다. The captured images are saved to: PX4-Autopilot/build/px4_sitle_default/tmp/frames/DSC_n_.jpg (where n starts as 00000 and is iterated by one on each capture).

카메라로 비행기를 시뮬레이션하려면:

make px4_sitl_default gazebo_plane_cam

Note

시뮬레이션 카메라는 PX4/PX4-SITL_gazebo/master/src/gazebo_camera_manager_plugin.cpp (opens new window)에서 구현됩니다.

# 낙하산/비행 종료 시뮬레이션

Gazebo비행 종료 동안 낙하산 전개를 시뮬레이션할 수 있습니다. 비행 종료는 Gazebo에서 시뮬레이션된 PWM 명령에 의해 트리거됩니다.

if750a 대상에는 낙하산이 차량에 부착되어 있습니다. 차량을 시뮬레이션하려면 다음 명령어를 실행하십시오.

make px4_sitl gazebo_if750a

차량을 비행 종료 상태로 전환하기 위하여, 비상 안전 조치로 비행 종료가 설정된 안전 확인을 강제로 실패하도록 할 수 있습니다. 예를 들어 강제로 지오펜스 위반을 수행하여 이를 실행할 수 있습니다.

자세한 정보는 다음을 참고하십시오.

# 동영상 스트리밍

Gazebo용 PX4 SITL은 차량 모델에 부착된 Gazebo 카메라 센서에서 UDP 비디오 스트리밍을 지원합니다. 스트리밍이 활성화되면, 실제 카메라와 같이 QGroundControl(UDP 포트 5600에서)에서 이 스트림에 연결하고 시뮬레이션된 차량의 Gazebo 비디오를 조회할 수 있습니다. 동영상은 gstreamer 파이프라인을 사용하여 스트리밍되며, Gazebo UI의 버튼을 사용하여 활성화/비활성화할 수 있습니다.

Gazebo 카메라 센서는 다음 프레임에서 지원/활성화됩니다.

# 준비 사항

동영상 스트리밍을 위해서는 Gstreamer 1.0이 필요합니다. 필수 종속 항목은 이미 Gazebo를 설정시에 설치되어야 합니다(MacOS 및 Ubuntu Linux용 표준 PX4 설치 스크립트/지침에 포함되어 있음).

Note

참고로 종속 항목에는 gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, libgstreamer-plugins-base1.0-dev가 포함됩니다.

# 동영상 스트리밍 시작/중지

대상 차량이 지원하는 경우에는, 비디오 스트리밍이 자동으로 시작됩니다. Typhoon H480에서 비디오 스트리밍을 시작하려면 다음 명령어를 입력하십시오.

make px4_sitl gazebo_typhoon_h480

스트리밍은 Gazebo UI 동영상 ON/OFF 버튼을 사용하여 일시 중지/다시 시작할 수 있습니다.

비디오 ON/OFF 버튼

# 가제보 동영상 조회 방법

SITL/Gazebo 카메라 비디오 스트림을 보는 가장 편리한 방법은 QGroundControl을 사용하는 것입니다. 애플리케이션 설정 > 일반비디오 소스UDP h.264 비디오 스트림으로 설정하고 UDP 포트5600으로 설정합니다.

Gazebo에 대한 QGC 비디오 스트리밍 설정

그러면 Gazebo의 비디오가 실제 카메라에서와 같이 QGroundControl에 표시됩니다.

QGC 비디오 스트리밍 Gazebo 예

Note

Typhoon 세계는 그다지 흥미롭지 않습니다.

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

# 상세 로깅

SITL은 Gazebo 모델에 문제가 있는 경우 조용히 실패/종료합니다. 다음과 같이 VERBOSE_SIM을 사용하여 더 자세한 로깅을 활성화할 수 있습니다.

export VERBOSE_SIM=1
make px4_sitl gazebo

또는

VERBOSE_SIM=1 make px4_sitl gazebo

# 확장 및 사용자 정의

시뮬레이션 인터페이스를 확장하거나 사용자 정의하려면 Tools/sitl_gazebo 폴더에서 파일을 편집하십시오. 코드는 Github의 sitl_gazebo 저장소 (opens new window)에서 사용할 수 있습니다.

Note

빌드 시스템은 시뮬레이터를 포함하여 올바른 GIT 하위 모듈을 적용합니다. 디렉토리에 있는 파일의 변경 사항을 덮어쓰지 않습니다.

# 추가 정보