02.1 Gazebo로 드론 날리기 - pineland/px4 GitHub Wiki

1. 환경 구축

2. docker 기반 px4 개발환경 설정을 참고하여 ROS가 포함된 docker 이미지를 가져와 환경을 구축한다.

$docker pull px4io/px4-dev-ros-melodic

-> 개발환경 설정을 통해 그래픽 드라이버가 upgrade된 px4io/px4-dev-ros-melodic-shao 이미지를 만든다.

2. docker container 내 환경 설정

아래와 같이 실행하여 docker container 내 진입한다.

$ xhost +        # gazebo와 같은 그래픽 라이브러리를 실행할 경우 추가
$ docker run -it --privileged --env=LOCAL_USER_ID="$(id -u)" \
  -v /home/pineland/src:/src:rw -v /tmp/.X11-unix:/tmp/.X11-unix:ro \
  -e DISPLAY=:0 -p 14556:14556/udp --name=px4io/px4-dev-ros-melodic-shao \
  px4io/px4-dev-ros-melodic:shao /bin/bash
  • root로 진입하고자 할 경우 : --env=LOCAL_USER_ID="$(id -u)"를 -u 0 으로 바꿔준다.

2.1 ros 환경 설정 : 여기를 참고

2.1.1 ros package 환경 설정

vi ~/.bashrc에 아래의 명령어를 추가한다.

source /opt/ros/melodic/setup.bash

2.1.2 catkin 작업공간 구성 및 환경 설정

$ mkdir -p ~/catkin_ws/src && cd ~/catkin_ws/src
$ catkin_init_workspace                                    # src폴더 안에 CMakeLists.txt 생성
$ cd ~/catkin_ws/ && catkin_make                           # 'build'와 'devel'폴더 생성
$ echo source ~/catkin_ws/devel/setup.bash >> ~/.bashrc    # 환경 설정

2.2 Gazebo 환경 설정

아래의 내용을 ~/.bashrc에 추가하면, gazebo 상에서 플러그인과 나타날 수 있는 드론 모델이 많아진다.

# 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

3. PX4 firmware download 및 컴파일

이 부분은 호스트 컴퓨터에서 해도 되고 docker container 내에서 해도 된다. 대신, 호스트에서 할 경우 docker 실행 시 -v 옵션으로 연결해줘야 한다. 아래는 docker container 내에서 수행하는 것을 기준으로 작성했다.

$ mkdir ~/src; cd ~/src   
$ git clone https://github.com/PX4/Firmware.git  
$ cd Firmware  
$ make px4_sitl_default gazebo     # gazebo가 실행되면서 iris 드론이 나타난다.

4. modudculab_ros 다운로드 & 빌드

$ cd ~/catkin_ws/src  
$ git clone https://github.com/Jaeyoung-Lim/modudculab_ros.git  
$ vi ./modudculab_ros/launch/ctrl_pos_gazebo.launch
  * 수정내용
    - before : <arg name="fcu_url" default= "/dev/ttyUSB0:921600" />
    - after : <arg name="fcu_url" default= "udp://:[email protected]:14557"/>
$ cd ~/catkin_ws/ && catkin_make

5. sitl 실행

아래의 명령을 통해 실행중인 한 컨테이너에 중복 로그인해서 들어간다.

$ docker exec -it -u user px4-dev-ros-melodic-shao /bin/bash

아래와 같은 순서로 실행한다.

* A terminal : roscore  
* B terminal : cd ~/src/Firmware && make px4_sitl_default gazebo  
* C terminal : roslaunch modudculab_ros ctrl_pos_gazebo.launch
* D terminal : rosrun mavros mavsafety arm && rosrun mavros mavsys mode -c OFFBOARD