본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/드론

[ PX4 ] HITL ( Hardware In-The Loop Simulation )

by 베니스상인 2024. 10. 10.

 

HITL은 SW가 개발되면 하드웨어에 직접 포팅하여 시뮬레이션 환경에서 그 기능을 검증하는 과정으로 야외 기능시험 이전의 모든 시험을 진행하는 과정이다. 야외에서 수행할 수 없는 환경도 시뮬레이션상에서 진행이 가능하므로 가장 많은 시험이 가능한 단계라고 생각한다. SITL과 다른 점은 SW가 하드웨어에서 직접 운영된다는 것이다. 

 

  • PX4 HITL의 환경은 아래와 같이 구성된다. PX4 HITL은 PX4 Controller가 포함된 펌웨어가 올라가는 하드웨어이다. 본인은 CubeOrange를 사용하기로 하고 여기에 PX4 HITL 펌웨어를 올린다. 다만 펌웨어를 올릴때 HITL 모드로 한다. 일반 펌웨어와 다른 점은 실제 하드웨어 센서와 구동기를 사용하지 않고 시뮬레이션 환경에서 구성된 가상의 센서와 구동기를 사용한다. 
  • 가상의 센서와 구동기는 시뮬레이터에서 제공할 수 있다. 시뮬레이터는 Gazebo 또는 JMAVSim과 같은 PX4와 연동되는 시뮬레이터에서 사용이 가능하다. 이 시뮬레이터들은 아래 구성과 같이 PX4와 Mavlink로 연결된다. CubeOrange에 있는 USB 포트를 통하여 시뮬레이터와 연결하게 되고, 서로 Mavlink로 데이터를 주고 받는다. 
  • 또한 Matlab에서도  Simulink를 이용하여 시뮬레이션 환경을 구성할 수 있다. Matlab에서 제공하는 UAV Dynamics 모델이 있으므로 사용해 볼 것이다. 
  • QGroundControl은 PX4에 제어명령을 전달하기 위해 사용된다. PX4와 바로 연결되지 않고, 시뮬레이터와 UDP를 통해 연결되며, 시뮬레이터의 Mavlink로 전달된다. 제어명령은  RC Transmitter나 조이스틱과 같은 장치로 수동으로 입력을 줄 수도 있고, Mission Planning을 통한 자동미션도 가능하다. 
  • Offboard 또한 제어명령을 전달하기 위해 사용된다. 시뮬레이터와 UDP를 통해 연결되며, 시뮬레이터에 Mavlink로 전달된다. Offboard에서 Trajactory를 생성하여, PX4에 전달하여 다양한 비행경로를 실시간으로 전달할 수 있다. 

 

 

 

 

 

1. 개발환경

  • Ubuntu 20.04
  • Matlab
  • UAV Toobox Suppoer Package for PX4 Autopilot
  • Pixhawk 2.1 Cube OrangeHardware
  • PX4-Autopilot v1.14.0(Firmware )
  • Joystick

 

 

 

 

2. PX4 펌웨어 업로드

 

PX4 펌웨어 다운로드

$ git clone https://github.com/PX4/PX4-Autopilot.git
$ cd PX4-Autopilot/
$ git checkout v1.14.0 -f
$ git log
$ git submodule update --init --recursive

 

 

보드 설정

$ vi boards/cubepilot/cubeorange/default.px4board

 

파일 제일 아래부분에 추가

CONFIG_MODULES_SIMULATION_PWM_OUT_SIM=y

 

 

펌웨어 빌드

$ make cubepilot_cubeorange

 

 

펌웨어 업로드

- QGC에서 custom firmware를 선택하고 make 과정에서 생성된 cubepilot_cubeorange_default.px4 파일을 선택한다.

 

 

 

 

3. QGC 설정

 

QGC에서 HITL 설정은 아래 링크 참고

https://docs.px4.io/main/en/simulation/hitl.html

 

Hardware in the Loop Simulation (HITL) | PX4 Guide (main)

 

docs.px4.io

 

 

 

 

3. Simulation 실행

 

1) JMAVSIM

- 시리얼포트는 dmesg로 사전에 어디로 연결되어 있는지 확인하여 명령어를 입력한다. JMAVSim을 실행하면 아래오 같은 화면이 나타난다.

$ ./Tools/simulation/jmavsim/jmavsim_run.sh -q -s -d /dev/ttyACM0 -b 921600 -r 250

 

터미널에서 명령 수행시 로그 화면

 

JMAVSim 실행 초기 화면

 

- QGroundControl을 실행하면, UDP 포트를 통해, JMAVSim과 자동으로 연결이 된다. 조이스틱을 이용하여 Armming 하고, 스로틀을 올리면 수동으로 비행이 가능하다.

QGroundControl에서 수동비행중인 화면

 

 

2) Gazebo

 

- 가제보 SITL 빌드

$ DONT_RUN=1 make px4_sitl_default gazebo-classic

 

 

- 가제보 환경설정

$ source Tools/simulation/gazebo-classic/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default

 

 

- 가제보 실행

$ gazebo Tools/simulation/gazebo-classic/sitl_gazebo-classic/worlds/hitl_iris.world

 

가제보를 실행하면 아래와 같이 IRIS 모델이 등장한다.

가제보 실행 초기 화면

 

- QGroundControl을 실행하면, UDP 포트를 통해, Gazebo와 연결되고, 조이스틱을 이용하여 Armming 하고, 스로틀을 올리면 수동으로 비행이 가능하다. 또한 Mission Plan에서 미션을 구성하고 업로드하면 자동비행이 가능하다.

QGroundControl에서 Mission Planning하는 화면

 

 

자동 미션 수행중인 화면

 

 

 

 

 

 

 

 

3) MATLAB Simulink UAV Dynamics 모델을 이용

 

- Matlab Command 창에서 예제 실행

>> openExample('px4/PX4StockAutopilotHITLUAVDynamicsExample')

 

 

- PROJECT SHORTCUTS에서 Open UAV Dynamics를 선택하면 아래와 같이 Simulink 모델이 생성된다. Simulink 모델 좌, 우에는 MAVLink Bridge Source/Sink가 있다. Mavlink로 입출력을 받기 위한 포트인데 PX4 하드웨어와는 USB를 통해 Mavlink로 연결되므로 해당 포트를 지정해주어야 한다. Linux에서는 USB CDC 연결이 ACM 포트로 제공되므로 연결된 포트를 dmesg를 통해 확인하여, 입력해준다. 본인의 경우 ACM0에 연결하였다.

 

- UAV Dynamics 모델을 보면 HIL_ACTUATOR를 입력받고, HIL_SENSOR, HIL_GPS, HEARTBEAT를 출력하게 되어 있다.  Dynamics에서 만들 가상의 센서 출력을 PX4 하드웨어로 전달하고, PX4가 만들어낸  ACTUATOR값을 Dynamics 모델이 입력받아서 가상환경에서 드론을 제어하는 것이다.

 

- 상단 메뉴중 Run을 실행하면 컴파일을 수행하고 완료되면 자동으로 Mavlink 데이터를 전송하여 QGC에 연결된다.

 

- Gazebo에서 수행한 것과 동일한 미션을 업로드하고 자동 비행을 수행하였다. Gazebo보다 훨씬 동작이 불안정하다. Controller는 PX4를 사용하기 때문에 제어가 차이가 나는 것은 아니고, UAV Dynamics 모델에서 주는 센서값의 Drift가 훨씬 심하다고 판단된다. 

 

 

UAV Dynamics에서 IMU 모델링 부분

 

 

수정된 Accelerometer의 노이즈 random work

 

 

수정된 Gyroscope의 노이즈 random work

 

 

수정된 Magnetometer의 노이즈 파워

 

 

값을 수정한 후 노이즈 편차도 확실히 감소한 것을 확인했다. 

 

 

그리고 자동 미션 수행이나 수동 비행에서도 떨림없이 부드럽게 비행하는 것을 확인하였다.

 

 

Simulink에서 시뮬레이션 모델을 구성한다는 것은 큰 장점이 있다. 확인이 필요한 값들은 Simulink 상에서 모니터링이 가능하고 또 필요한 모델들을 수정해서 환경을 구성할 수 있기 때문에 Siumulink를 활용하여 다양한 환경을 구성할 수 있다. 

 

 

 

 

728x90

댓글