Tech Story/QuadCopter ROS

Offboard Control - (3) Mavros

슈퍼맨짱 2020. 12. 19. 20:17

Offboard Control - (3) Mavros

 

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

 

Offboard Control - (1) Pixhawk h/w

Offboard Control - (2) Raspberry Pi

Offborad Control - (3) MarvROS

Offboard Control - (4) Test Flight

 

 

 

1. 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 ~/ros_catkin_ws/src
# git clone https://github.com/Jaeyoung-Lim/modudculab_ros.git
(https://github.com/Jaeyoung-Lim/modudculab_ros)
# cd ~/catkin_ws/ or cd ~ros_cakin_ws
# catkin build modudculab_ros
#
catkin_make modudculab_ros
# cd /home/pi/ros_catkin_ws/build
# make cmake_check_build_system
# make modudculab_ros -j4 -l4


# make install

 

 

 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. Pixhawk와 Raspberry Pi의 연결

 

1) 여러가지 방법이 있지만 ardupilot.org에서 제시한 GPIO 연결방법

    (http://ardupilot.org/dev/docs/raspberry-pi-via-mavlink.html)

 

 

 

2) USB to TTL 연결방법

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. Mavros Test

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

 

(1) Pixhawk와 Rpi간 통신 연결 테스트
픽스호크와 Rpi를 연결하고 Rpi에서

# roscore 

ros 실행화면

# roslaunch modudculab_ros ctrl_traj_test.launch 

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

실행화면 1
실행화면 2

 

만약 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) QGroundControl 설정

메뉴 중에서 Parameters로 들어가서 System으로 들어갑니다. 밑의 그림에서 SYS_COMPANION이 companion컴퓨터와의 연결을 설정하는 것입니다. 저 부분을 눌러서 Companion Link(921600 baudrate 8N1)을 선택해줍니다. GPIO핀에 연결한 경우에는 이 baudrate를 사용할 수 없습니다. 

 

 

 

4. 구성 환경 설정 및 테스트

 

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 실행결과

 

 

mavlink test : http://ardupilot.org/dev/docs/raspberry-pi-via-mavlink.html

 

 

5. 사전 Test

 

RPI와 연결하여 자동으로 20m 상공 비행하고 착륙하기 https://www.youtube.com/watch?v=ELa6w6Z6mws

 

 

 

 

End of Posting