SITL을 이용한 시뮬레이션 - whdlgp/look_into_pixhawk_with_apm GitHub Wiki

시뮬레이션 환경의 필요성

당연하지만 드론을 실내에서 바로 날리는 것은 꽤나 무섭다.
코드를 작성하고 빌드해서 업로드 후에 어떤식으로 동작하는지 확인할 필요가 있는데, 그때마다 드론을 가지고 나가 날려보기엔 다소 무리가 있을 것으로 판단하여 시뮬레이션 환경을 구성하기로 하였다.

Ardupilot 문서에는 SITL이라는 시뮬레이터를 소개하는데, 대충 다음과 같이 동작한다.

  • Ardupilot vehicle중 하나를 골라 SITL 용으로 빌드한다.
  • SITL용으로 빌드된 결과물은 하나의 프로그램으로 동작하고, 서버가 된다(즉, 별도 하드웨어가 필요없다).
  • mavproxy등의 GCS를 이용하여 SITL로 구현된 서버로 TCP를 통해 연결한다.
  • SITL프로그램은 가상의 센서값, 그에따른 결과값 등을 만들어 GCS로 보낸다.

SITL 프로그램에서 보내주는 데이터를 받아 map과 console 등을 통해 가상의 드론의 데이터를 받을수도 있으며, waypoint 등의 명령어 또한 보내어 실시간으로 결과를 확인할 수도 있다.

설치

필자의 경우 mavproxy를 이미 설치했기 때문에 mavproxy 관련 설치는 다루지 않을 것이다.
(다른 레포지터리 중에 초기 개발환경 세팅을 다룬 문서가 있을텐데, 거기서 mavproxy를 다루고있다.)

일단 SITL을 돌리기 이전에, 기본적으로 python 관련 패키지를 설치해야 한다. 일단 다운받아두자. 이미 mavproxy를 설치했었다면 이미 설치가 되어있을 것이므로 다음 과정으로 넘어가도 될 것이다.

sudo apt-get install python-matplotlib python-serial python-wxgtk2.8 python-wxtools python-lxml
sudo apt-get install python-scipy python-opencv ccache gawk git python-pip python-pexpect

위 패키지중 만약 python-wxgtk2.8 패키지가 설치가 안된다면, 대신 python-wxgtk3.0 을 설치해도 된다.

그 후 각종 시뮬레이션 관련 스크립트/툴이 있는 경로를 path에 추가해준다. (보통 ~/.bashrc에 추가하고, zsh를 쓰는 사용자들은 ~/.zshrc에 추가해주면 된다.)

export PATH=$PATH:$HOME/ardupilot/Tools/autotest

그 후 ArduCopter 또는 ArduPlane 등 본인이 시뮬레이션 할 Vehicle 폴더로 들어가 다음을 쳐준다.

sim_vehicle.py -w

sim_vehicle.py는 시뮬레이터를 알아서 순서에 맞게 실행해주기 위한 스크립트이며, -w 옵션은 처음 실행할 때만 사용한다. parameter를 다 불러왔다면 ctrl+C를 눌러 빠져나온다.

이후 시뮬레이션은 다음과 같이 하면 된다.

sim_vehicle.py --console --map --aircraft test

실행 및 몇가지 사용법

이후 시뮬레이션은 mavproxy에서 사용하는 명령어를 사용하면 된다.

몇가지 명령어를 적어두자면,

  • mode guided
    guided로 모드를 변경한다. 기본적인 takeoff 동작등을 하기 위한 작업이다.
  • arm throttle
    시동걸기
  • takeoff 40
    40미터 높이로 비행을 시작하겠다는 의미이며, 뒤의 40은 변경 가능하다.
  • mode auto
    auto 모드로 변경하며, 지정된 waypoint로 자동으로 비행한다.

그리고 waypoint를 불러오는 기능도 있지만, 직접 waypoint를 만들수 있는데, 만약 mavproxy를 사용하면 map 창에서 바로 마우스를 이용해 만들 수 있으므로 편리하다.

SITL 내에서 Optical Flow 센서 사용법

optical flow 용 가상의 데이터를 만들기 위해서는 별도로 파라미터를 수정해줘야 한다.

우선 관련 파라미터를 살펴보도록 하자.

  • SIM_FLOW_ENABLE
    STIL 시뮬레이터를 통해 센서값을 가상으로 만들기 위한 파라미터다. 시뮬레이터를 이용해 테스트 할 것이므로 1로 변경한다.
  • FLOW_ENABLE
    실제로 이 파라미터가 1이 되어야 센서값 읽기 동작이 수행된다.

파라미터는 mavproxy에서 쉽게 확인할 수 있으며 다음과 같은 명령어로 확인 가능하다.

param show SIM_FLOW_ENABLE
param show FLOW_ENABLE

세팅은 다음과 같이 하면 된다.

param set SIM_FLOW_ENABLE 1
param set FLOW_ENABLE 1

그 후 시뮬레이터상으로 다음과 같은 명령어를 통해 센서값을 확인할 수 있다는데, 본인은 직접 센서값 테스트용 테스크를 만들어 확인했기 때문에 실제로 사용해보진 않았다.

module load graph
graph OPTICAL_FLOW.flow_x OPTICAL_FLOW.flow_y

아무래도 graph를 통해 센서값을 plot 하는 기능으로 보인다.