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