이전 글...
드론 만들기
하드웨어
QGroundControl에서 변속기(ESC) 교정하기
Pixhawk 4의 Power Management Board
QGroundControl에서 Pixhawk 4 펌웨어 설치
QGroundControl에서 Pixhawk 4 설정하기 1/2
QGroundControl에서 Pixhawk 4 설정하기 2/2
파워 분배기(PDB, Power Distribution Board)
소프트웨어
MissionPlanner와 QGroundControl
QGroundControl에서 Pixhawk 4 펌웨어 설치
QGroundControl에서 Pixhawk 4 설정하기 1/2
QGroundControl에서 Pixhawk 4 설정하기 2/2
QGroundControl에서 Pixhawk 파라미터 변경하기
VMware Workstation Player에 Virtaul Machine 만들기
VMware Workstation Player에 Ubuntu 설치하기
조립
Power Management Board에 커넥터 연결하기
변속기(ESC)와 Power Management Board 연결하기
QGroundControl에서 변속기(ESC) 교정하기
GPS, Telemetry Pixhawk 4에 연결하기
통신
개발
비행
문제해결
Pixhawk와 Emax ESC(변속기) 호환문제 해결방법
기타
완전 초짜의 드론 만들기 도전! 도전! 도전~!입니다.
맨땅에 헤딩~
인터넷 검색, 관련 사이트를 참고하여 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는 지원하지 않는다.
Gazebo는 ROS와도 함께 사용 가능한데 만약 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의 기본 기체 형태는 iris이다.
쿼드콥터(iris) 외에 Gazebo가 지원하는 기체 형태의 make 명령어는 아래와 같다.
Gazebo가 지원하는 기체형태의 전체 목록은 PX4 소스코드 디렉터리에서 아래의 명령어를 입력하면 터미널 창에 출력이 되는데 줄 바꿈이 없어서 알아보기가 쉽지는 않다....
make px4_sitl list_vmd_make_targets |
Gazebo시뮬레이터를 종료하려면 콘솔 창(터미널 창)에서 ctrl + c를 누르면 종료된다.
2.1 드론 이륙 및 착륙
Gazebo가 실행되고 나면 콘솔 창에 명령어를 입력해서 드론을 이륙/착륙할 수 있으며 명령어는 아래와 같다.
이륙:
commander takeoff |
착륙:
commander land |
하지만 이륙 명령어를 콘솔에 입력하면 jMAVSim에서처럼 이륙을 하지 못하는 동일한 에러가 발생한다.
jMAVSim에서 언급했듯이 이때 배터리, 통신 등의 에러 발생을 대비하여 안전장치 RTL(Return to Launch)이 활성화되어 있으면 RTL명령어가 실행될 수도 있다. 소스코드에서 안전 설정 변경은 어떻게 하는지 모르겠고, QGroundControl에서 안전장치 설정을 변경해서 RTL 명령어를 해제할 수 있다. 안전장치 설정를 설정하는 방법은 [드론 만들기] QGroundControl에서 Pixhawk 4 설정하기 2/2을 참조)
시동이 자동으로 꺼지고 드론이 이륙하지 않는다. 하지만 다시 이륙 명령어를 입력하면 정상적으로 이륙한다.
이륙 후 착륙 명령어를 입력하면 드론은 착륙한다.
(즉, 제일 처음 명령어에서만 에러 발생)
인터넷에서 해결방법을 찾아보려고 해 봤지만 찾지를 못했다. 어쩌면 단순한 원인으로 손쉽게 해결할 수 있는 문제일 수도 있고 Gazebo 자체 문제일 수도 있지만... 초짜라 알 길이 없다.
어쨌든 시뮬레이터 실행 후 처음 이륙 명령어에서만 이런 에러가 발생했고 지금까지 그 외에 시뮬레이션을 하는데 문제가 발생하지 않아서 일단은 이 문제를 무시하기로 했다.
Gazebo에서 드론 이/착륙 동영상은 아래와 같다.
2.2 QGroundControl과 함께 실행
QGroundControl(QGC)를 연결해서 Gazebo와 함께 사용하면 시각적으로 시뮬레이션 효과가 향상될 뿐만 아니라 QGC상에서 이륙, 착륙, 미션 등의 명령도 실행할 수 있어 콘솔 창에서 명령어를 입력하는 번거로움을 피할 수도 있다.
필요시 조이스틱 등도 함께 연결해서 사용할 수도 있지만 조이스틱을 사용하지 않을 예정이기 때문에 여기서는 따로 설명하지는 않는다)
사용방법은 간단하다.
Gazebo를 실행한 후 QGC를 실행시켜거나 또는 반대로 QGC를 실행 후 Gazebo를 실행하면 mavlink로 서로 연결된다.
아래 그림은 위의 make 명령어로 Gazebo를 실행한 후 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를 실행한다.
QGC와 함께 실행하면 홈 위치가 변경되는 것을 시각적으로 확인할 수 있다.
- 시뮬레이션 속도 변경
환경변수를 이용해서 실제 시간 대비 시뮬레이션 속도를 증가 또는 감소할 수 있으며 명령어는 아래와 같다.
export PX4_SIM_SPEED_FACTOR |
예로 시뮬레이션 속도를 실제 속도보다 2배 빠르게 설정하는 방법은 아래와 같다.
우선 터미널에서 PX4 소스코드 디렉터리로 이동한 후 원하는 속도 배율 인수에 2를 입력한다.
이어서 make 명령어를 이용해서 Gazebo를 실행하면 시뮬레이션 속도가 2 배가된다.
- GUI 없이 Gazebo 실행 (Headless mode)
환경변수를 설정해서 그래픽 사용자 인터페이스(GUI) 없이 Gazebo을 실행할 수 있으며 명령어는 아래와 같다.
HEADLESS=1 make px4_sitl gazebo |
Headless mode를 사용하면 시뮬레이터가 더 빠르게 시작하고 더 적은 시스템 리소스를 사용하는 장점이 있다.
아래의 동영상에서 확인할 수 있듯이 그래픽 화면이 실행되지 않는다.
만약 현재 터미널에서 실행되는 모든 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 참조
또는 윈도처럼 바탕화면 왼쪽의 파일 아이콘을 클릭해서 쉽게 windy.world 파일에 접근할 수 있다.
터미널에서 엔터를 누르거나 또는 파일을 더블 클릭하면 텍스트 편집기가 실행된다.
위의 그림처럼 wind_plugin을 복사한다.
Gazebo에서 기본 world 파일은 empty.world로 windy.world 파일을 불러올 때처럼 터미널에서 PX4 소스 파일 디렉터리에서 아래의 명령어를 입력해서 empty.world 파일을 불러온다.
gedit Tools/sitl_gazebo/world/empty.world |
또는 윈도처럼 바탕화면 왼쪽의 파일 아이콘을 클릭해서 쉽게 접근할 수 있다.
터미널에서 엔터를 누르거나 또는 파일을 더블 클릭하면 텍스트 편집기가 실행된다.
</include> 뒤에 windy.world에서 복사한 부분을 붙여 넣는다.
'wind_plugin'에서 windVelocityMean 사이에 원하는 바람 속도를 입력하면 된다.
(기본값 4.0이 입력되어있음)
아래의 동영상은 바람 속도가 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 |
엔터를 누르면 텍스트 편집기가 실행된다.
위를 보면 gpsNoise는 1로 활성화되어있다.
만약 비활성화/해제하고 싶을 경우에는 <gpsNoise>1</gpsNoise>을 삭제하면 된다.
만약 gps_plugin에 gpsNoise가 미리 설정되어있지 않다면 비활성화되어있는 것이다. 만약 gpsNoise 항목을 없을 경우에는 gps_plugin에 위의 사진처럼 gpsNoise요소를 추가해서 GPS잡음을 활성화할 수 있다.
다시 Gazebo를 빌드하거나 재시작할 때 새롭게 설정한 GPS 잡음 설정이 적용된다.
< 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 자체 문제인지, 초짜의 능력 부족인지 현재로는 알 수가 없다.
[드론 만들기] Gazebo 사용하기 2/4 (0) | 2021.05.01 |
---|---|
[드론 만들기] Gazebo 사용하기 4/4 (0) | 2021.04.29 |
[드론 만들기] jMAVSim 사용하기 2/2 (0) | 2021.04.05 |
[드론 만들기] jMAVSim 사용하기 1/2 (0) | 2021.04.03 |
[드론 만들기] 툴 체인(Toolchain) 설치하기 (1) | 2021.03.24 |
댓글 영역