Tech Story/QuadCopter ROS

Pixhawk와 ROS를 이용한 자율주행 드론(수정중)

슈퍼맨짱 2018. 4. 4. 13:55
Pixhawk보드와 ROS를 이용한 자율드론

DJI F50기반 쿼드콥터 하드웨어를 기반으로 Pixhawk와 Raspberry Pi(ROS)를 이용하여 자율비행 드론 구현

1. DJI F450기반 쿼드콥터 제작 ◀ 쿼드콥터 H/W 제작(조립) 참조
2. 자율비행을 위한 SW/HW구성

(1) ROS Melodic(Ubuntu 1X.04)설치 

(2) Gazebo 설치(Optional) 

(3) MAVROS와 RX4 설치 

(4) GCS(Ground Control System) 설치 및 환경설정 

(5) 환경 테스트 

3. Test Flight

(1) Pixhawk와 Raspberry Pi 연결

(2) Raspberry Pi 전원

(3) Raspberry Pi Wifi연결

(4) Pixhawk의 flight mode 설정

(5) Trajectory node

(6) Test Flight




2.1 ROS Melodic(Ubuntu 1x.04) 설치

ROS설치는 ROS Wiki 사이트(http://wiki.ros.org/ROS/Installation)에서 참조하여 설치하면 되는데, 현재는 3가지 버전을 제공하고 있습니다. ROS Kinetic Kame, ROS Lunar Loggerhead, ROS Melodic Morenia 이중에서 우분투 OS 버전에 맞는 ROS를 확인하고 설치를 진행하면 됩니다.


여기서는 라즈베리파이 Ubuntu 16.04 Mate OS에 맞는 ROS 버전을 설치하는 방법을 제시합니다.

(Ubuntu OS버전에 따라 ROS 설치 버전이 다를 수 있으니 꼭 버전을 확인해야 합니다)


(1) 순서대로 설치 진행

#

Instruction

Command

1

Setup your sources.list

# sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2

Setup your keys

# sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116



3

Installation

# sudo apt-get update
# sudo apt-get upgrade
# sudo apt-get install ros-melodic-desktop-full (18.04)  

   or sudo apt-get install ros-kinetic-desktop-full (16.04)

http://wiki.ros.org/ROS/Installation 사이트에서 우분투 OS에 맞게 "melodic" or ' kinetic" 선택

※ 우분투 15.10, 16.04 : kinetic,   17.10, 18.04 : melodic

ros 패키지 설치 확인> 

# apt-cache search ros-melodic (18.04)  or  apt-cache search ros-kinetic (16.04)



4

Initialize rosdep

# sudo rosdep init
# rosdep update



5

Environment setup

# echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc  (18.04)   

   or  echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc  (16.04)
# source ~/.bashrc

직접환경설정> 

# source /opt/ros/melodic/setup.bash  or  source /opt/ros/kinetic/setup.bash



6

패키지 설치

# sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

7

Workspace 만들기

# mkdir -p ~/catkin_ws/src
# cd ~/catkin_ws/src
# catkin_init_workspace

8

Catkin 만들기

# cd ~/catkin_ws/
# catkin_make







(2) 환경설정 
~/.bashrc 파일에 아래의 # 3가지 항목을 설정합니다
ROS_MASTER_URI와 ROS_HOSTNAME에 본 라즈베리파이 IP 주소를 입력합니다
※ 라즈베리파이가 공유기를 통하여 IP를 할당 받을 경우 구동할 때마다 해당 IP를 재설정해줘야 합니다.

※ 로컬환경에서 구동하는 경우에는 127.0.0.1로 셋팅해서 변경없이 계속 사용해도 무방합니다.

# vi ~/.bashrc

# set ROS Melodic/Kinetic
source /opt/ros/melodic/setup.bash (18.04)

source /opt/ros/kinetic/setup.bash (16.04)
source ~/catkin_ws/devel/setup.bash
# set ROS Network
export ROS_MASTER_URI=http://172.31.46.23:11311
export ROS_HOSTNAME=172.31.46.23
# set ROS alias command
a cw='cd ~/catkin_ws'
a cs='cd ~/catkin_ws/src'
a cm='cd ~/catkin_ws && catkin_make'



(3) QtCreator 설치(Optional)

ROS에서 node파일 등을 edit하고 생성할 때 사용할 수 있도록 아래의 패키지를 설치해줍니다

#

Instruction

Command

1

qtcreator 설치

# sudo apt-get install qtcreator

2

실행

# qtcreator


qtcreator 실행화면



(4) ROS Melodic 동작 테스트
터미널창에서 # roscore 실행




(5) turtlesim 예제 실행

ROS 설치후 제대로 작동되는지 테스트 하기 위해서 간단한 예제 노드를 실행하여 확인을 하고자 합니다.

예제는 turtlesim 이라는 패캐지(노드의 묶음)로 ROS의 심볼인 거북이 모양을 한 로봇이 화면에 나타나고 키보드로 로봇의 이동을 간단히 조종해 보는 노드(프로그램)입니다. (출처:http://cafe.naver.com/openrt/2382)


roscore가 돌아가는 터미널 창은 놔두고 새로운 터미널 창을 열어주고 밑의 코드를 입력하면 됩니다.
rosrun turtlesim turtlesim_node


turtlesim 예제 실행시 정상작동 화면



(6) turtle_teleop_key 실행
새로운 터미널 창을 열어줘서 밑의 코드를 실행시키면 위의 turtle을 키보드로 조종할 수 있습니다.
rosrun turtlesim turtle_teleop_key



turtle_teleop_key 실행시 정상작동 화면


※ turtle예제가 성공적으로 실행이 된다면 ROS설치가 정상적으로 설치된것입니다.

※ 주의할 점은 해당 터미널창에 커서가 있는 상태에서 키보드 화살표키가 동작 됩니다


여기까지 ROS 개발환경 구축 및 간단한 예제까지 완료했습니다.








2.2 Gazebo9 설치(Optional)

가제보(http://gazebosim.org)는 로봇 개발에 필요한 3차원 시뮬레이션으로 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터라고 소개하고 있습니다.(http://cafe.naver.com/openrt)  로봇을 위한 2/3차원 시뮬레이션은 많지만 최근에 나온 오픈 진영 시뮬레이터중에서는 가장 좋은 평가를 받고 있다고 합니다. 또한  ROS의 시뮬레이션 툴로서 사용하려하는 것이기 때문에 원래 ROS의 프로젝트였던 gazebo를 사용하는 것이 가장 좋다고 합니다.



설치 방법은 http://gazebosim.org/tutorials?tut=install_ubuntu&cat=install 를 참고하시기 바랍니다.

※ 기본적으로 ROS kinetic 버전을 설치하게 되면 gazebo7이 default로 설치되기 때문에 이를 그대로 사용해도 무방합니다.


▶Gazebo9 순차적으로 설치하는데 잘 설치가 안되서 기존 default 7 버전을 사용하는게 좋습니다.(참고용 '18.8.1기준)

#

Instruction Command

1

Setup software packages# sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

2

Setup Keys

# wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

3

Installation# sudo apt-get update
...
Hit http://ppa.launchpad.net xenial/main Translation-en
Ign http://us.archive.ubuntu.com xenial/main Translation-en_US
Ign http://us.archive.ubuntu.com xenial/multiverse Translation-en_US
Ign http://us.archive.ubuntu.com xenial/restricted Translation-en_US
Ign http://us.archive.ubuntu.com xenial/universe Translation-en_US
Reading package lists... Done

이전 gazebo가 설치되어 있으면 설치되지 않기 때문에 기존 버전을 제거해줘야 합니다.

또한, 가제보9은 우분투 14.04에서는 지원을 하지 않기 때문에 OS버전과 맞는 가제보 설치가 필요합니다.


sudo apt-get remove .*gazebo.* && sudo apt-get update


# sudo apt-get install gazebo9

# sudo apt-get install libgazebo9-dev


4

실행# gazebo

▶한방에 설치하기

# curl -ssL http://get.gazebosim.org | sh




※ 가제보를 실행했을 떄 아래와 같은 메세지가 나오는 경우가 있을 떄 ignition-math 버전이 낮아서 발생하는 경우가 있습니다.

이럴 땐 해당 패키지를 업그레이드하고 실행하면 됩니다.

# sudo apt upgrade libignition-math2




gazebo9 실행화면


◆ 가제보 사양 (http://gazebosim.org/tutorials?cat=guided_b&tut=guided_b1)
Gazebo is currently best used on Ubuntu, a flavor of Linux. You will need a computer that has: 
· A dedicated GPU, Nvidia cards tend to work well in Ubuntu 
· A CPU that is at least an Intel I5, or equivalent, 
· At least 500MB of free disk space, 
· Ubuntu Trusty or later installed.








2.3 MAVROS와 RX4 설치


MAVROS - RaspberryPi - PX4 구성도



(1) Mavros설치

#

Instruction

Command

1

RaspberryPi에 Mavros설치

# sudo apt-get update
# sudo apt-get install ros-melodic-mavros ros-melodic-mavros-extras (18.04)
or 
sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras (16.04)

2

modudculab_ros 설치

# sudo apt-get install python-catkin-tools
(http://answers.ros.org/question/207433/catkin-build-gives-command-not-found)

# cd ~/catkin_ws/src
# git clone https://github.com/Jaeyoung-Lim/modudculab_ros.git
(https://github.com/Jaeyoung-Lim/modudculab_ros)
# cd ~/catkin_ws/
# catkin build modudculab_ros



 Build 중 아래와 같은 오류가 발생됐을 때 해결방법


 

catkin_ws/src/modudculab_ros/src/pub_setpoints_traj.cpp 파일의 success 멤버 변수에 오류발생

이 변수를 mode_sent 로 변경후 재 빌드


while(ros::ok()){

        if( current_state.mode != "OFFBOARD" &&

            (ros::Time::now() - last_request > ros::Duration(5.0))){

            if( set_mode_client.call(offb_set_mode) &&

                offb_set_mode.response.mode_sent){           <== 원본: offb_set_mode.response.success

                ROS_INFO("Offboard enabled");

            }

            last_request = ros::Time::now();

        } else {

            if( !current_state.armed &&

                (ros::Time::now() - last_request > ros::Duration(5.0))){

                if( arming_client.call(arm_cmd) &&

                    arm_cmd.response.success){    <==유지

                    ROS_INFO("Vehicle armed");

                }

                last_request = ros::Time::now();

            }

        } 


※ 참조문서 : https://answers.ros.org/question/280894/catkin_make-invoking-make-j4-l4-failed-due-error-in-cpp-file/




(2) MAVROS Test

Mavros를 돌려보고 픽스호크로부터 토픽을 받아오는 것을 실행함으로서 라즈베리파이와 픽스호크의 연결을 테스트합니다.


픽스호크와 Rpi를 연결하고 Rpi에서

# roscore 

# roslaunch modudculab_ros ctrl_traj_test.launch 

명령어를 실행했을 때 픽스호크쪽에서 사운드가 나오면서 반응하면 정상


만약 roslaunch를 실행시 아래와 같은 메세지([FATAL] [1534818147.911303867]: UAS: GeographicLib exception: File not readable /usr/share/GeographicLib/geoids/egm96-5.pgm | Run install_geographiclib_dataset.sh script in order to install Geoid Model dataset!)가 나오면 패키지를 추가 설치(#sudo geographiclib-get-geoids egm96-5 ) 하면 됩니다.









2.4 GCS 설치 및 환경설정


(1) PX4 Flight stack(QGroundControl) 설치

QGroundControl을 실행후 USB로 Pixhawk와 연결후 Firmware부분으로 들어가면 USB 포트를 뺏다가 다시 꽂으라는데로 시행하고 PX4 Flight stack을 선택하면 Firmware가 최신으로 설치됩니다.


[노트북에 아래의 링크로 접속하여 해당 SW 사전설치]
QGroundControl 
 https://docs.qgroundcontrol.com/en/getting_started/download_and_install.html

(QGroundControl 사용자 메뉴얼 -> qgroundcontrol-user-guide-kr.pdf

사이트 : https://legacy.gitbook.com/book/donlakeflyer/qgroundcontrol-user-guide/details/kr

Mission Planner ▶ http://firmware.ardupilot.org/Tools/MissionPlanner/

노트북과 Pixhawk를 연결(USB to TTL)하여 기본적인 셋팅과 인식에 문제가 없는지 점검합니다.

※ 각종 GCS(Ground Control Stations)에 대한 설명 http://ardupilot.org


 라즈베리파이(Ubuntu 16.04 MATE)에 QGroundControl 설치가 안됩니다.

※ 사전에  ROS, Gazebo등이 설치되어 있어야 합니다.

QGround사이트에서 다운받은 해당 파일이 64비트용으로 되어 있어 아래와 같은 메세지가 나오면서 설치가 안됨('18.1.1기준).

- QtCreator를 이용하여 QGroundControl 소스(https://github.com/mavlink/qgroundcontro)를 다운받아 빌드도 안됨 

※ Qt5 최신버전(https://www.qt.io/download-thank-you?os=linux32)은 Rpi 16.04에서는 컴파일(https://wiki.qt.io/Native_Build_of_Qt5_on_a_Raspberry_Pi) 됨(상당시간이 소요됨 거의 8시간 이상)

- Qt5설치후 QtCreator 빌드(https://www.skydronex.com/compiling-qgroundcontrol-raspberry-pi-raspbian)했으나 실패



(2) 프레임선택

우리가 적용한 프레임은 quadcopter X이고 그 중에서 450mm 프레임을 선택하면 얼추 맞기 때문에 DJI Flame Wheel F450을 선택하면 됩니다.




(3) Radio 설정

현재 리시버와 트랜스미터를 연결한 상황에서 트랜스미터(조종기)를 캘리브레이션해주는 단계입니다. 친절하게 설명이 계속 나오므로 그 설명대로 해주시면 됩니다. 여기서는 DEVO7으로 진행하였습니다.(문제없이 칼리브레이션 됩니다.)




(4) Sensors 칼리브레이션

Compass, Gyroscope, Accelerometer, Level Horizon 네 개를 calibrate 해줘야하고 하나씩 클릭해서 진행하시면 됩니다




(5) Flight Mode 설정


http://www.moses-modellbau.de/mediafiles/Anleitungen/DEVO/Manual%20of%20DEVO-7.pdf
보통 조종기에서는 조종기 위쪽 버튼을 통해서 여러가지 mode들을 선택할 수 있습니다. 예를 들면, auto takeoff, landing, return to home등의 기능들입니다. 여기서는 Gear button을 사용해서 ROS로 드론을 컨트롤 하는 모드와 손으로 조종하는 모드를 왔다갔다 하려고 합니다



GEAR가 channel 5이고(radio test할 때 그렇게 나옵니다) 따라서 Flight mode channel에 channel 5를 사용하고 Flight Mode 1에는 Stabilized를 선택하고 Flight Mode 2에는 offboard를 선택해줍니다. 그리고 오른쪽 "Switch Settings"에서는 세 번째 offboard switch channel에서 Channel 5를 선택해주면 Gear버튼을 위로 올리고 내리는 것에 따라서 손으로 조종하다가도 off board모드로 들어가서 라즈베리 파이에 있는 명령들로 쿼드콥터를 자율주행 시킬 수 있습니다.




(6) ESC 칼리브레이션

Qgroundcontrol에서 ESC 칼리브레이션은 상당히 간단합니다. 왼쪽의 Power탭으로 들어가서 Calibrate를 눌러주면 battery를 연결해주라는 지침이 나옵니다. 그러면 끝입니다.



(7) QGroundControl 최신버전(v3.3.2 '18.8.15)을 이용하여 셋팅이 완료된 상태





Tip] QGroundControl 설정중 preflight fail: mag sensors inconsistent라는 메세지가 나오면

-> Parameter 검색후 CAL_MAG1_EN enable을 disabled로 변경, CAL_MAG1_ROT Internal mag로 변경

-> Sensors쪽에서 Compass만 calibration을 다시 해주면 됩니다.


(8) Arming

이제 모든 셋팅은 완료됐고, 기본적인 드론의 동작이 되는지 테스트만 남은 상태입니다. 쿼드콥터에서는 시동을 거는 것이 바로 Arming이라고 합니다. 보통은 조종기에서 Throttle 스틱을 오른쪽 밑으로 해주면 Arming이 되도록 설정되어있는데 Firmware마다 다를수가 있습니다. PX4가 업로드 되어있는 Pixhawk에 배터리를 연결하고 컴퓨터와는 연결된 Micro USB는 제거한 상태에서 safety switch를 몇 초간 눌러주고, 그 다음에 조종기에서 throttle stick을 오른쪽 밑으로 유지하면 arming이 되면서 네 개의 모터가 돌게 됩니다. 이때 모터가 돌지 않으면 정상적인 셋팅상황이 아니라고 할 수 있습니다.(모터가 돌지 않으면 arming이 되었는지 알 수 없기 때문에 쿼드콥터가 뜨지 않을 정도만 돌게 해주는 것입니다.)


 

※ 주의사항 : 최초 모터동작시 프로펠러는 제거한 상태에서 진행하시기 바랍니다.

(아무리 arming상태에서 모터 동작이기는 하지만 잘못된 셋팅으로 과도한 프로펠러 힘으로 쿼드콥터가 뜨는 현상도 발생할 수 있습니다.)

※ 일반적인 arming 및 쿼드콥터 fly 조종 테스트 순서

1) 모터가 동작된걸 확인(프로펠러 없이)

2) 드론 자체 공중으로 뜨지 않도록 하단을 고정한 상태에서 프로펠러를 고정하여 조종기로 스로틀과 좌우 조정했을 때 정상적인 기울기로 드론이 동작되는지 확인

3) 지하주차장(바람이 없는 곳)에서 실제 드론을 조종하여 비행하는데 이상 없는지 확인

※ 상세한 드론 비행연습은 인터넷이사 유투브에서 찾아보면 다양하게 있으니 충분한 비행연습이 필요합니다

그 이후에 Rpi와 연결된 자율비행 단계로 넘어가는게 좋습니다.






2.5 환경 테스트


https://dnddnjs.gitbooks.io/drone-autonomous-flight/content/off-board_control_3_mavros.html\

▶ RPi 설정
· 퍼미션 설정
  - 픽스호크와 연결되어 있는 USB포트 확인 (# ls -al /dev/ttyUSB* )
  - 퍼미션 설정 (
sudo chmod 666 /dev/ttyUSB0 )


# ls -al /dev/ttyUSB*
crw--w---- 1 root tty 4, 0 Feb  9 04:14 /dev/ttyUSB0
sudo chmod 666 /dev/ttyUSB0
# ls -al /dev/ttyUSB0
crw-rw-rw 1 root tty 4, 0 Feb  9 04:55 /dev/ttyUSB0


· Master 실행

   # roscore

 
· Mavros 실행

   # rosrun mavros mavros_node _fcu_url:="/dev/ttyUSB0:921600" 


SCREEN SHOT 실행결과



▶ 노드 그래프 실행. mavros 노드 하나만 있는 것을 볼 수 있습니다.
# rqt_graph 


▶ Mavros를 통해 받아온 픽스호크의 데이터 확인. 

     topic monitor에서 각각의 토픽을 통해서 데이터가 오는 것을 확인 할 수 있습니다.

# rqt 




◆ modudculab_ros package test

modudculab_ros 패키지 안에서 Position control로 테스트


# cd ~/catkin_ws/src/modudculab_ros/launch/
# vi ctrl_pos_gazebo.launch 

   --->아래 3번째 줄처럼 /dev/ttyUSB0:921600 으로 변경하고 저장합니다

<launch>

<!-- arg name="fcu_url" default= "udp://:14540@127.0.0.1:14557"-->
<arg name="fcu_url" default= "/dev/ttyUSB0:921600" />
<arg name="gcs_url" default="" />
<arg name="tgt_system" default="1" />
<arg name="tgt_component" default="1" />


<node name="mavros" pkg="mavros" type="mavros_node" output="screen">
        <param name="fcu_url" value="$(arg fcu_url)" />
        <param name="gcs_url" value="$(arg gcs_url)" />
        <param name="target_system_id" value="$(arg tgt_system)" />
        <param name="target_component_id" value="$(arg tgt_component)" />

        <!--rosparam command="load" file="$(find mavros)/launch/px4_blacklist.yaml"-->

roslaunch modudculab_ros ctrl_pos_gazebo.launch 



아래와 같이 실행 결과를 볼 수 있습니다.




이제 위에서와 마찬가지로 node graph와 topic data들을 확인해줍니다.





위와 같이 실행이 되면 성공한 것입니다. 
노드 2개가 활성화되어 있으며 position의 명령을 주고 있습니다. 
그 명령은 밑의 사진에서 /mavros/setpoint_position/local안에 pose/position z좌표를 보면 1의 명령이 들어가고 있는 것을 볼 수 있습니다.





3.1. Pixhawk와 Raspberry Pi 연결


USB to TTL 연결방법(권장방법, 위에서 설명함)

Pixhawk Telem2와 RPi USB 



 




 


별도로 케이블 제작한 모습


RPi USB연결잭은 인터넷에서 USB to ttl 이라고 해서 나오는 케이블을 구매하면 됩니다. 

구매한 USB to TTL 모듈에 함께 제공된 케이블(보통 4개연결 케이블)과 Pixhawk 모듈 구매시 제공된 케이블(Telem2에 연결할 수 있는 케이블)을 서로 잘라서 해당 선만 연결하여 사용하면 편리합니다.(위의 사진 참조)

픽스호크-라즈베리파이 통신 테스트 : http://ardupilot.org/dev/docs/raspberry-pi-via-mavlink.html

                                                                    (http://dronewe.com/article/pixhawk-개발-ardupilot/2/693)


3.2. Raspberry Pi 전원


픽스호크가 Battery에서 Power Module로 전원을 공급받고 있고, 라즈베리파이도 5V 전원이 필요합니다. 4가지 방법이 있습니다.

(1) Telem2 port의 5V의 전원을 받아와서 라즈베리파이의 Power in micro usb port로 연결하는 방법 

(2) ESC의 BEC에서 5V를 받아와서 라즈베리파이의 Power in으로 전원을 공급하는 방법(비추,잘못하면 라즈베리 과전압ㅇ로 사망할 수 있습니다)

(3) 별도의 보조배터리를 통해서 라즈베리파이에 Power in 포트에 전원을 공급하는 방법(권장)

(4) 라즈베리파이에  GPIO핀에 5V를 공급하는 방법(비추)


제일좋은 방법은 픽스호크와 라즈베리파이가 서로 다른 전원을 사용하는겁니다. 별도의 보조배터리를 이용하여 라즈베리파이의 전원을 공급하는게 좋습니다.(제일 가벼운 보조배터리팩으로 연결-이는 드론의 전체 무게에 영향을 주기 때문입니다.)


(1) Telem2 port의 5V의 전원을 받아와서 라즈베리파이의 Power in micro usb port로 연결하는 방법

아래 왼쪽 사진처럼  micro usb선을 자르면 4개의 선이 나오는 데 전원을 공급하려는 것이기 때문에 검은색과 빨간색 선만 필요합니다. 검은색 선은 GND로서 픽스호크와 라즈베리파이의 통신에 사용되었던 USB to ttl 모듈의 GND에 연결해주었고 빨간색(VCC)선은 Telem2 포트의 5V 핀에 연결해주었습니다. (참조사이트 : http://comterman.tistory.com/1000)



3.3 Raspberry Pi Wifi연결


라즈베리파이에서 roscore와 node(trajectory or position)가 실행되고 있어서 mavros를 통해 픽스호크에 명령을 보내고 있다가 조종기를 통해서 Off board mode에 들어가면 그 명령이 실행되는 형태입니다.

그래서 라즈베리파이에서 roscore와 node를 실행해줘야 하는데, 그 방법이 wifi를 라즈베리파이와 연결하여 원격으로 접속(putty 이용)하여 해당 명령을 실행해주면 됩니다.

※ 라즈베리파이 내장 wifi 통신거리가 짧아서 wifi동글 추천

※ 라즈베리파이 유선네트웍 설정을 통해서 노트북과 다이렉트 UTP 케이블을 연결하여 putty를 이용하여 연결도 가능


Putty를 이용하여 접속하는 방법은 인터넷을 참조

접속 후 roscore 실행

# roscore



3.4 Pixhawk의 flight mode 설정


3가지 형태로 비행테스트 진행 (1) Position hold, (2) Mission mode, (3) Offboard mode 순서

mode가 변경될때마다 qgroundcontrol에서 픽스호크를 설정해줘야 합니다


# 노트북에 Micro USB를 픽스호크와 연결 후  QGroundControl 실행


조종기에서는 gear를 바꾸면서 Flight Mode 1과 5로 왔다갔다 하는데, 따라서 Flight Mode 1을 Stabilized flight mode로 Flight Mode 2를 각 단계마다 position, mission, offboard로 설정하면 됩니다. (위의 QGroundControl 설정방법 확인)



3.5 Trajectory node


offboard mode를 사용할 때 라즈베리파이에서 roscore 를 실행하고 ctrl_traj_test.launch 를 실행해줍니다. 

이 ctrl_traj_test.launch파일을 살펴보시면 아래와 같이 fcu_url을 USB port로 설정해야 합니다. 

# roscore 

roslaunch modudculab_ros ctrl_traj_test.launch 


관련된 내용은 바로 전 글을 참조해 주시기 바랍니다. 

이 launch 파일은 두 개의 node를 실행시키는데 mavrospub_setpoints_traj를 실행시킵니다. 

이 pub_setpoints_traj node에 대해서 두 가지 변수를 설정해줄 수 있는데 반지름과 각속도입니다.



pub_setpoints_traj.cpp파일을 열어보면 지워주셔야 할 부분이 있는데 아래와 같습니다. 

이 부분은 자동으로 offboard 모드로 바꾸고 또 자동으로 arming을 해주는 것입니다.(추락위험)

SITL할 때 편리하기 위해서 넣어놓은 코드인데 실재 비행할 때는 있으면 안되는 부분입니다. 

그 밑에 trajectory식을 보시면 고도 2m에서 원을 도는 trajectory입니다. 

그 원과 관련된 r과 wn을 launch file에서 설정하는 것입니다. 

QGroundControl에서 parameters에서 maximum velocity를 설정할 수 있는데 저의 경우에는 8 m/s로 설정되어 있었습니다. 

설정하기는 r = 5m, wn = 1로 설정하고 날렸습니다. 

그리고 코드에서는 높이를 15m로 바꾸어 주었습니다.




3.6 Test Flight


노트북에 픽스호크를 연결해서 QGroundControl로 sensor calibration을 해주는 것이 좋습니다


(비행전 체크사항)

offboard로 자율주행을 하기 전에 pixhawk만을 사용해서 GPS를 사용해서 position홀드를 해보고 QGroundControl로 mission을 짜서 수행해보아야 합니다. 이 두가지가 정상적으로 실행이 될 때 그 다음에 offboard mode를 실행


(1) Position

pixhawk에 대한 글에서 다루었듯이 픽스호크에 전원을 연결하고 보드에 초록불이 들어오면 GPS가 되는 것입니다. 그 후에 safety switch를 누른 후에 조종기의 throttle bar를 오른쪽 아래로 하면 arming이 됩니다. 처음에는 stabilized flight mode로 띄우고 적당한 거리와 적당한 높이에서 Gear를 바꾸어주면 position mode로 들어가고 GPS를 사용하여 그 때 자신의 위치에 고정되어서 hovering하게 됩니다. 이 때 Throttle은 중간에 놔주어야 합니다.

 Pixhawk Power On ▶  Safety Switch ▶ 조종기 Throttle bar Arming ▶ Stabilized flight mode 

 ▶ Gear변경 ▶ throttle 중간 위치



(2) Mission

미션은 qgroundcontrol에서 다음과 같이 해줄 수 있는데 왼쪽 위의 +모양을 누르면 명령들을 넣을 수 있습니다. 처음에 Takeoff명령을 주고 waypoint들을 준 다음에 land명령을 줘서 하나의 mission을 형성합니다. 

너무 넓게는 설정하기 말고 고도도 설정해줄 수 있고 현재는 25m로 되어있습니다.  바닥에 쿼드콥터를 놓고 배터리를 연결하고 arming을 한 다음에 바닥에서 mode를 바꾸어주면 이 미션을 수행하게 됩니다. 

혹시나 이상이 생겼을 경우에 바로 stabilized flight mode로 바꾸어야 하니까 조종기를 항상 들고 있어야 합니다.

 노트북 QGroundControl 실행 ▶ 위쪽 좌측 노란색 + 클릭 ▶ Takeoff 명령 ▶ waypoint 지정 ▶ Land 명령 완료



3) Offboard

위 까지 성공적으로 수행이 되었다면 이제 offboard로 비행할 차례입니다. 

라즈베리파이에 전원이 들어가는 상태에서 공유기를 통해서 노트북에서 라즈베리파이에 접속합니다. 

그리고 두 개의 명령을 실행해주시면 됩니다.


# roscore 

# roslaunch modudculab_ros ctrl_traj_test.launch 

  

그 후에 조종기로 arming을 해주고 offboard mode로 바꾸어주면 상공 15m에서 5m 반경으로 회전하게 됩니다.

(위에서 언급했듯이 자동으로 offboard모드가 되고 arming이 되는 코드를 안 빼면 잘 못하면 test flight를 해서 추락할 수 있기 때문에 유의하시기 바랍니다.)



4. 전체요약


 Raspberry Pi

Pixhawk 

Notebook (Windows) 

OS 설치(16.04권장)

ROS/Mavros 설치

Gazebo 설치

 

 

 

 USB to TTL 연결(노트북)

 

 

 

 QgroundControl설치 및 환경셋팅

MAVROS Test

    - USB 디바이스 퍼미션 설정

    - ROS, Mavros 실행

    - 노드그래프(rqt_graph), 픽스호크통신확인(rqt)

modudculab_ros package test

    - 환경설정, modudculab_ros런치 및 data 확인

    - data 정상 확인

 

 

 [Flight]

-1 PixhawkRaspberry Pi의 연결

 -2 Raspberry Pi의 전원(Telem2 port 5V or 별도배터리)

 -3 Raspberry PiWifi 연결

- 원격 접속후 ros, node 실행

노트북과 direct 연결후 실행가능

-4 Pixhawkflight mode 설정

(1) position hold (2) mission mode (3) offboard

 Trajectory node

  Flight mode & Auto Mode

- MissionPlanner or QgroundControl





End of Posting

'Tech Story > QuadCopter ROS' 카테고리의 다른 글

Offboard Control - (4) Test Flight  (2) 2018.08.22
Offboard Control - (2) Raspberry Pi  (0) 2018.08.22
Offboard Control - (1) Pixhawk h/w  (0) 2018.08.22
ROS 용어정리  (1) 2018.04.04
ROS(Robot OS)란?  (0) 2018.04.04