[DRONE] Gazebo 시물레이터와 ROS 인터페이스 연결하기

드론 비행을 위해서는 여러가지 방법들이 있다. 드론의 비행 제어 알고리즘, 센서 제어 등 모든 것을 직접 프로그래밍 하는 방법이 있고, 비행은 비행 제어 알고리즘이 내장된 HW을 이용하고, 센서 또는 비전 처리를 통해 더 효율적인 비행을 할 수 있는 방법도 있다.

다양한 하드웨어 및 소프트웨어 드론 프로젝트 중에 리눅스 재단이 공식 지원하는 Dronecode 프로젝트가 있는데, 다양한 기업들이 이 프로젝트에 참여하고 있다. Dronecode 프로젝트 기반으로 만든 레퍼런스 보드들 중 유명한 것이 Pixhawk이다. 그리고 드론의 펌웨어와 미들웨어를 개발하는 프로젝트가 PX4 프로젝트이다.

PX4는 MAVLink 프로토콜을 사용하여 제어할 수 있는데, 만일 ROS을 사용하여 PX4을 제어한다면 MAVROS을 사용하면 된다. 하지만 드론을 직접 만들어 비행 시험을 하기에는 장소와 안전 문제가 중요한 문제로 대두된다. 따라서 충분한 시물레이션 시험이 필요한데, 이 때 사용할 수 있는 3D 시물레이터 중 하나가 Gazebo이다. Gazebo를 사용하는 이유는 ROS와 연동이 보다 쉽다. 따라서 ROS와 MAVROS을 사용하여 PX4 미들웨어을 사용한다면 Gazebo을 사용하여 시물레이션이 가능하다.

PX4을 이용한 드론의 개발 가이드는 다음 주소를 참고한다.

1. Gazebo7 설치 및 실행

Gazebo7은 PX4 Development Guide을 참고하여(Gazebo Simulation) 설치한다. 하지만 ROS와 연동된 드론을 시물레이터와 연동하기 위해서는 PX4 Firmware을 GitHub에서 Clone 또는 다운로드 받아 설치 후 Firmware을 실행하여 Gazebo 시물레이터와 연동을 시켜야 한다. 

실행 방법은 다음과 같다. (Running the Simulation)
$ cd ~/src/Firmware
$ make posix_sitl_default gazebo

만일 Optical Flow을 탑재한 Drone으로 시험하려면 make 옵션으로 posix_sitl_default 대신에 posix gazebo_iris_opt_flow 으로 설정한다.
$ cd ~/src/Firmware
$ make posix gazebo_iris_opt_flow

하지만 이렇게 실행시키면 ROS와 연동이 안되어 Gazebo에서 다양한 센서들을 시험할 수 없다.

2. Gazebo7과 ROS 인터페이스 연결

다음과 같이 PX4 Firmware을 실행할 때는 'no_sim=1' 옵션과 함께 make 명령을 주면 Gazebo는 실행하지 않고, Firmware만 실행된다. 이후 'roslaunch'을 사용하여 'gazebo_ros'을 실행하면 ros topic을 사용하여 Gazebo 시물레이터 내의 개체들(센서 또는 물체들)에 대한 속성들에 대한 접근이 가능하다. 두 개의 터미널을 만들어 각각 다음과 같이 명령을 입력한다.

[터미널 #1]
$ cd ~/src/Firmware
$ no_sim=1 make posix_sitl_default gazebo
Optical Flow을 탑재한 Drone으로 시작하려면 다음 make 옵션을 변경한다.
$ cd ~/src/Firmware
$ no_sim=1 make posix gazebo_iris_opt_flow

'no_sim=1 make posix_sitl_default_default gazebo' 명령을 주면 Gazebo에서 Iris 드론 객체을 만들 때 까지 대기한다.

[터미널 #2]
$ roslaunch gazebo_ros empty_world.launch

'roslaunch gazebo_ros empty_world.launch' 를 실행하면 Gazebo가 실행되고, Iris 드론을 추가하면 터미널 #1에서 이 드론을 제어할 수 있는 command line 프롬프트가 표시된다. 만일 Iris 모델이 보이지 않는다면 다음과 같이 모델을 빌드하고 환경 설정한다.

$ cd ~/src/Firmware/Tools/sitl_gazebo/
$ mkdir build
$ cd build
$ cmake ..
$ sudo make install

그리고 ~/.baserc 파일에 다음 내용을 추가한다. 단, Firmware 는 ~/src/Firmware 에 위치한다고 가정한다.

$ cd ~
$ vi .baserc

# Set the plugin path so Gazebo finds our model and sim
export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:~/src/Firmware/Tools/sitl_gazebo/build
# Set the model path so Gazebo finds the airframes
export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}:~/src/Firmware/Tools/sitl_gazebo/models

수정을 종료하고, 다시 환경변수를 업데이트 한다.

$ source .baserc

그리고 위에 '터미널1'과 '터미널2'에 설명된 명령들을 각각 'no_sim=1 make posix_sitl_default_default gazebo'와 'roslaunch gazebo_ros empty_world.launch'  다시 실행한다.

댓글

  1. 에러 없이 진행하였는데 iris모델이 보이지 않을땐 어떻게 해야하나요 ??

    아래 빌드 부분과 bashrc 파일 수정하는 부분도 잘 진행하였습니다.

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

C++로 프로그래밍할 때 인자 또는 리턴 값으로 std::vector 등 STL 데이터 타입 처리하는 좋은 방법

macOS가 갑자기 부팅이 되지 않을 경우 데이터 복구 또는 백업 방법

Git 저장소를 병합하는 방법(How to merge repositories in Git)