SkyRover 펌웨어 및 자세제어
조한철(Baram)
2014. 12. 20.
목차
 펌웨어 History
 펌웨어 구조
 자세 및 모터 방향
 비행모드
 자세제어
펌웨어 History – Flexbot
Multiwii 2.3
Arduino
AVR
Flexbot+
FlexBot 통신
I/F
<Flexbot App><History>
 Flexbot 펌웨어
• AVR을 사용한 Arduino개발환경을 사용하는 Multiwii 2.3기반으로 Flexbot App으로 조종을 위
한 통신 I/F 추가함
• AVR에 Arduino기반으로 구현되어 있어서 ARM용으로 포팅하기에는 어려움
펌웨어 History – SkyRover Nano
Multiwii 2.3
Arduino
AVR
SkyRover
Nano
+
Flexbot 통신
I/F
Afroflight32
GCC
STM32F103 부트로더 추가
+ +
FreeRTOS 적용
USB 통신
+
LCD Lib
(u8glib)
+
 SkyRover Nano 펌웨어
• Multiwii를 ARM용으로 포팅한 Afroflight32 코드를 기반으로 Flexbot app을 사용하기 위한 통
신 I/F를 추가하여 성능은 높이면서 기존의 플랫폼을 그대로 사용함
펌웨어 History – 개발과정
 [나노콥터] 펌웨어 포팅 계획 : http://cafe.naver.com/openrt/4371
 [나노콥터] AfroFlight32 펌웨어를 스마트로봇 보드로 시험 : http://cafe.naver.com/openrt/4401
 [나노콥터] PWM 동작 시험 : http://cafe.naver.com/openrt/4443
 [나노콥터] 센서 방향 및 모터 위치 : http://cafe.naver.com/openrt/4467
 [나노콥터] 펌웨어 시험용 기체 만들기 : http://cafe.naver.com/openrt/4472
 [나노콥터] 펌웨어 개발환경 및 부트로더 : http://cafe.naver.com/openrt/4483
 [나노콥터] HexAirBot 통신 인터페이스 추가 : http://cafe.naver.com/openrt/4490
 [나노콥터] 모터 시험 : http://cafe.naver.com/openrt/4491
 [나노콥터] 블루투스 통신 시험 : http://cafe.naver.com/openrt/4518
 [나노콥터] 멀티위콘피그 프로그램 : http://cafe.naver.com/openrt/4605
 [나노콥터] SkyRover 조립 및 구동 시험 : http://cafe.naver.com/openrt/4726
 [나노콥터] Hex 콥터 변경 펌웨어 : http://cafe.naver.com/openrt/5107
 SkyRover nano Hex 비행영상 : http://cafe.naver.com/openrt/5158
 SkyRover 펌웨어 계획 : http://cafe.naver.com/openrt/5383
 SkyRover 펌웨어에 FreeRTOS 적용 : http://cafe.naver.com/openrt/5455
 SkyRover 부트로더/펌웨어 USB통신 추가 : http://cafe.naver.com/openrt/5548
 SkyRover 윈도우용 GUI 다운로더(STM32LD_GUI) : http://cafe.naver.com/openrt/5943
 SkyRover Nano PCB 첫 비행 : http://cafe.naver.com/openrt/6651
 SkyRover Nano 최종 PCB 버전 비행 시험 : http://cafe.naver.com/openrt/6744
 SkyRover Nano OLED 시험 : http://cafe.naver.com/openrt/6760
 SkyRover Nano Cup(컵) 버전 시험 비행 : http://cafe.naver.com/openrt/6844
펌웨어 History – Open Source
SkyRover
Nano
Multiwii
Afroflight32
Flexbot
FreeRTOS
STM32LD
u8glib
 Why?
• 기술 진입 장벽 낮아짐
• 플랫폼 다양화
• 정보 공유를 통한 발전
• 열린 커뮤니티 활성화
펌웨어 History – Open Source
구 분 설 명 링크
Mulitiwii 멀티콥터 오픈소스 https://code.google.com/p/multiwii/
Afroflight32 Mulitiwii를 STM32F103용으로 포팅한 버전 https://github.com/multiwii/baseflight
HexAirBot Mulitiwii에 Flexbot app을 이용한 제어가 가능하도록 변경함 https://github.com/HexAirbot
FreeRTOS 멀티태스킹을 위한 리얼타임 OS http://www.freertos.org/
STM32Cube ST사에서 STM32시리즈 활용을 위한 펌웨어 라이브러리 http://www.st.com/stm32cube-pr
stm32ld
STM32의 시리얼 부트로더 프로토콜을 사용한 Flash 다운로
드
https://github.com/jsnyder/stm32ld
https://github.com/chcbaram/stm32ld
https://github.com/chcbaram/stm32ld_gu
i
u8glib 그래픽 LCD 라이브러리 https://code.google.com/p/u8glib/
 Open Source List
펌웨어 구조
펌웨어
부트로더
0x08000000
0x08003000
설정 저장
12KB
114KB
2KB
0x0801F800
0x08020000
 Memory 구조
• 부트로더는 전원 On/Reset시 처음 실행됨
• STM32F103은 EEPROM이 없기때문에 마지막 2KB영역을
저장용 메모리로 사용
• 펌웨어 다운로드시 설정값은 유지됨
펌웨어 구조
 부트로더
• 기능
 통신으로 펌웨어를 MCU의 플래시 메모리에 Write하고 펌웨어를 실행
• 통신 프로토콜
 STM32의 내장 부트로더 통신 프로토콜
• 다운로드 Tool
 오픈소스인 stm32ld를 수정하여 사용하고 윈도우용으로 포팅(stm32ld_gui)
• 통신 포트
 Uart1 시리얼 포트
 USB의 Virtual 시리얼 포트
• 소스코드
 https://github.com/oroca/SkyRover_Nano_Boot
펌웨어 구조
 펌웨어 Thread
• FreeRTOS를 적용하여 총 3개의 Thread를 구동함
• 각 스레드는 독립적으로 동시에 실행되기에 멀티콥터 기능을 수행하면서 LCD표시나 메뉴를 통
한 모니터링등이 가능함
• 멀티콥터 제어 Loop는 RTOS가 고려되지 않고 작성되었기 때문에 Thread의 우선순위를 동일
하게 설정함
• 향후 RTOS를 고려하여 멀티콥터 제어 Loop를 다시 작성 필요(RTOS의 효율적 사용)
thread_mw() thread_menu() thread_lcd()
• 멀티콥터 제어 Loop
• 통신/모터/센서 관리
• USB통신을 이용한 메뉴 기
능
• 블루투스 설정
• 센서 모니터링
• 기능 설정
• U8glib를 사용한 LCD 표시
펌웨어 구조
 멀티콥터 제어 Loop
rcReady = hexairbotFrameComplete();
computeRC();
• 블루투스로 조종 데이터가 수신되었는지 검사
• 수신된 조종값(롤,피치,요,스로틀,AUX1,AUX2,AUX3,AUX4)을 rcData[] 배
열에 저장
50Hz
computeIMU(); • 가속도/자이로/지자계 센서로 부터 자세값 계산
annexCode(); • 수신된 조종값 rcData[]의 범위는 1000~2000이며(중립은 1500), 제어범위
값 rcCommand[]에 0~500 값으로 변환
pid_controller();
mixTable();
writeServos();
writeMotors();
• rcCommnad[]값을 기준으로 PID제어에 따른 제어량값 계산
• 기체 종류에 따라 PID제어를 통해 나온 제어량은 모터 PWM으로 변환
• PWM값에 따른 모터 구동
280Hz
자세 - Roll
 Roll
• 멀티콥터가 좌/우로 회전하는 방향
(-)방
향
(+)방
향
<뒤에서 본모
습>
0도 -90
도
+90
도
+180
도
자세 - Pitch
 Pitch
• 멀티콥터가 상/하로 회전하는 방향
(-)방
향
(+)방
향
<옆에서 본모
습>
0도 -90
도
+90
도
자세 - Yaw
 Yaw
• 멀티콥터의 수평 움직임으로 우측으로 회전시 +방향만 있음
• 지자계 센서가 활성화 되어 있으면 북쪽이 0도이고 그렇지 않은경우 가속도 센서의 X축방향이
0도
0도
<위에서 본모
습>
북
동
남
서
360도
모터 방향 - Hex
 Hex 구성
• 6개의 모터로 구성되며 모터의 방향은 기체의 타입에 따라 결정됨
• SkyRover Nano는 Multiwii에서 사용되는 모터 방향이 사용됨
<Hex 모터 구 <SkyRover
Nano>
모터 방향 - QuadX
 QuadX 구성
• 4개의 모터가 크로스 형태로 구성됨
• 대표적인 쿼드콥터 형태
<Hex 모터 구 <SkyRover
Nano>
비행모드
Mode 자이로 센서 가속도 센서 기압 센서 지자계 센서
Acro/Gyro ●
Angle/Stable ● ●
Horizon ● ●
HeadFree ● ● ●
Altitude Hold ● ● ●
 비행 모드별 사용 센서
비행모드 – Acro/Gyro
<조종기> <멀티콥터> <조종기> <멀티콥터>
 Roll/Pitch/Yaw 축에 자이로 센서로만 자세제어
비행모드 – Angle/Stable
<조종기> <멀티콥터> <조종기> <멀티콥터>
 SkyRover Nano의 비행 모드
 Roll/Pitch는 가속도/자이로에서 구해진 각도값으로 자세제어
 Yaw는 자이로 센서값으로만 제어
자세제어
멀티콥터는 어떻게 수평을 유지할까?
자세제어
 멀티콥터 움직임
• Roll/Pitch/Yaw/상하 움직임의 전체 합 방향으로 이동
• 각 이동방향에 대해 제어가 되면 원하는 방향으로 기체 이동이 가
능
+ + +
<Roll> <Pitch> <Yaw> <상/하>
자세제어
 6개의 모터 구동으로 Roll/Pitch/Yaw/상하 이동
Roll
Pitch
Yaw
상/하
모터속도 빠르게
모터속도 느리게
자세제어
 멀티콥터의 움직임에 대한 모터 영향
(-)방
향
(+)방
향
모터속
도 느리
게
모터속
도 빠르
게
모터속
도 빠르
게
모터속
도 느리
게<Roll 움직임>
자세제어
모터
Roll Pitch Yaw 상/하
(+) (-) (+) (-) (+) (-) (+) (-)
FRONT_L + - - + - + + -
REAR_L + - + - + - + -
FRONT_R - + - + - + + -
REAR_R - + + - + - + -
FRONT 0 0 - + + - + -
REAR 0 0 + - - + + -
 움직임 방향 vs 모터속도 방향
자세제어
 모터 제어속도 구성요소
PWM1 = FRONT_L = 제어량xRoll방향 + 제어량xPitch방향 + 제어량xYaw방향 + 제어량x상/하방향
Roll, Pitch, Yaw, 상/하
PWM1
PWM2
PWM3
PWM4
PWM5
PWM6
=
Roll
Pitch
Yaw
상/하
제어량 방향 모터속도
Mixer
자세제어
THROTTLE
ROLL
PITCH
YAW
ROLL측정값
PITCH측정값
YAW측정값
ROLL 오차값
PITCH 오차값
YAW 오차값
PID 제어기
PID 제어기
PID 제어기
ROLL 제어량
PITCH 제어량
YAW 제어량
Mixer
PWM1
PWM2
PWM3
PWM4
PWM5
PWM6
목표치 입력 제어기 출력
computeRC( )
annexCode( ) computeIMU( )
pidMultiWii( )
mixTable( ) writeMotors( )
자세제어
 Feedback 제어
Roll
Pitch
Yaw
상/하
모터속도 빠르게
모터속도 느리게
자세측정
-+
오차
제어기
목표값

More Related Content

PDF
[드론] 펌웨어 분석 [2015.5.23]
PPTX
Skyrover project
PDF
아두이노와 Fpga를 이용한 로봇제작
PDF
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
PDF
강좌 01 ARM 프로세서 개요
PDF
강좌 07 ARM 프로세서용 아두이노
PDF
OpenCR 아두이노 펌웨어개발
PDF
강좌 06 부트로더
[드론] 펌웨어 분석 [2015.5.23]
Skyrover project
아두이노와 Fpga를 이용한 로봇제작
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
강좌 01 ARM 프로세서 개요
강좌 07 ARM 프로세서용 아두이노
OpenCR 아두이노 펌웨어개발
강좌 06 부트로더

What's hot (20)

PDF
강좌 02 ARM 펌웨어 개발 환경 개요
PPTX
Smart rover 통신 분석
PDF
라즈베리파이 와 스카이로버 나노에 만남
PDF
강좌 05 통신용 PC 프로그래밍
PDF
강좌 04 펌웨어 구조 설계
PDF
강좌 03 개발환경 구축
PDF
강좌 개요
PDF
OROCABOY3 제작기
PPTX
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
PDF
망고100(s5 pc100),망고64(s3c6410) 구입멤버대상 안드로이드포팅강좌
PDF
망고100 보드로 놀아보자 17
PDF
(망고210& Gingerbread) u-boot 컴파일 및 다운로드
PDF
망고100 메뉴얼 환경부터포팅까지-2011-0324
PDF
가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714
PDF
CentOS 5.3에 Cubrid 설치 방법
PPTX
망고100 보드로 놀아보자 6
PDF
사물인터넷 노트4_라즈베리파이기본
PPTX
MarsBoard RK3066 Linux 설치
PPTX
Ubuntu Host AP Setting
PDF
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
강좌 02 ARM 펌웨어 개발 환경 개요
Smart rover 통신 분석
라즈베리파이 와 스카이로버 나노에 만남
강좌 05 통신용 PC 프로그래밍
강좌 04 펌웨어 구조 설계
강좌 03 개발환경 구축
강좌 개요
OROCABOY3 제작기
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
망고100(s5 pc100),망고64(s3c6410) 구입멤버대상 안드로이드포팅강좌
망고100 보드로 놀아보자 17
(망고210& Gingerbread) u-boot 컴파일 및 다운로드
망고100 메뉴얼 환경부터포팅까지-2011-0324
가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 20150714
CentOS 5.3에 Cubrid 설치 방법
망고100 보드로 놀아보자 6
사물인터넷 노트4_라즈베리파이기본
MarsBoard RK3066 Linux 설치
Ubuntu Host AP Setting
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
Ad

Viewers also liked (20)

PPTX
FreeRTOS
PPTX
[E3]deview 2012 스마트폰 내장 센서를 이용한 체감형 게임제작
PDF
안드로이드 와 디바이스 드라이버 적용 기법
PDF
Android ndk jni 설치및 연동
PDF
Qt on Real Time Operating Systems
PPTX
Ffmpeg for android
PDF
Titanium 소개 - 당신이 알고 있는 타이타늄 rev.201310
PPTX
Free rtos seminar
PDF
Native vs. Web vs. Hybrid: Mobile Development Choices
PPTX
영화정보기술
PDF
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
PDF
S블로거가 본 스마트tv
PPT
제안서N School(영상교육영상회의)[1]
PDF
HTML5를 활용한 하이브리드 앱개발하기
PDF
RAD Studio XE8을 소개합니다.
PDF
비즈니스 Application 솔루션 구조 기술 진화 모델 ②
PDF
하이브리드앱 아키텍쳐 및 개발 사례
PDF
리눅스 보안 모듈을 이용한 안드로이드 장치 제어
PDF
Smart TV UX
PPTX
스마트폰 팁 #3: 스마트폰 해제패턴 풀기!
FreeRTOS
[E3]deview 2012 스마트폰 내장 센서를 이용한 체감형 게임제작
안드로이드 와 디바이스 드라이버 적용 기법
Android ndk jni 설치및 연동
Qt on Real Time Operating Systems
Ffmpeg for android
Titanium 소개 - 당신이 알고 있는 타이타늄 rev.201310
Free rtos seminar
Native vs. Web vs. Hybrid: Mobile Development Choices
영화정보기술
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
S블로거가 본 스마트tv
제안서N School(영상교육영상회의)[1]
HTML5를 활용한 하이브리드 앱개발하기
RAD Studio XE8을 소개합니다.
비즈니스 Application 솔루션 구조 기술 진화 모델 ②
하이브리드앱 아키텍쳐 및 개발 사례
리눅스 보안 모듈을 이용한 안드로이드 장치 제어
Smart TV UX
스마트폰 팁 #3: 스마트폰 해제패턴 풀기!
Ad

Similar to SkyRover Firmware (20)

PPTX
DBlab_project_Ver20150720[3]
PDF
드론 분야의 기술 트렌드 및 발전 방향 - 김태호 실장
PPTX
3D 프린터와 아두이노
PPTX
소형 무인 비행기 1장-소개
PDF
라즈베리파이입문 - 연세대 특강
PPTX
임베디드
PPTX
임베디드 프젝트
PDF
Intuitive Understanding of Arduino for IoT
PDF
원준갓의 IoT 수업
PDF
Hardware
PPTX
Oroca ROV firmware
PPTX
DIY의 끝판왕 3D 프린터
PDF
라즈베리파이 Circulus API 가이드
PPTX
3D 프린터 동작원리와 조립
PDF
OSS SW Basics Lecture 14: Open source hardware
PPTX
AI 드론 프로그래밍
PPTX
스마트 어항 도우미 최종 ppt.pptx
PDF
ICT DIY 2014 Conference - Demo & Exhibition
PPTX
Resting_Drone_창의종합설계경진대회_발표영상_팀_Moonshot.pptx
PPT
Arduino Basic Programming
DBlab_project_Ver20150720[3]
드론 분야의 기술 트렌드 및 발전 방향 - 김태호 실장
3D 프린터와 아두이노
소형 무인 비행기 1장-소개
라즈베리파이입문 - 연세대 특강
임베디드
임베디드 프젝트
Intuitive Understanding of Arduino for IoT
원준갓의 IoT 수업
Hardware
Oroca ROV firmware
DIY의 끝판왕 3D 프린터
라즈베리파이 Circulus API 가이드
3D 프린터 동작원리와 조립
OSS SW Basics Lecture 14: Open source hardware
AI 드론 프로그래밍
스마트 어항 도우미 최종 ppt.pptx
ICT DIY 2014 Conference - Demo & Exhibition
Resting_Drone_창의종합설계경진대회_발표영상_팀_Moonshot.pptx
Arduino Basic Programming

SkyRover Firmware

  • 1. SkyRover 펌웨어 및 자세제어 조한철(Baram) 2014. 12. 20.
  • 2. 목차  펌웨어 History  펌웨어 구조  자세 및 모터 방향  비행모드  자세제어
  • 3. 펌웨어 History – Flexbot Multiwii 2.3 Arduino AVR Flexbot+ FlexBot 통신 I/F <Flexbot App><History>  Flexbot 펌웨어 • AVR을 사용한 Arduino개발환경을 사용하는 Multiwii 2.3기반으로 Flexbot App으로 조종을 위 한 통신 I/F 추가함 • AVR에 Arduino기반으로 구현되어 있어서 ARM용으로 포팅하기에는 어려움
  • 4. 펌웨어 History – SkyRover Nano Multiwii 2.3 Arduino AVR SkyRover Nano + Flexbot 통신 I/F Afroflight32 GCC STM32F103 부트로더 추가 + + FreeRTOS 적용 USB 통신 + LCD Lib (u8glib) +  SkyRover Nano 펌웨어 • Multiwii를 ARM용으로 포팅한 Afroflight32 코드를 기반으로 Flexbot app을 사용하기 위한 통 신 I/F를 추가하여 성능은 높이면서 기존의 플랫폼을 그대로 사용함
  • 5. 펌웨어 History – 개발과정  [나노콥터] 펌웨어 포팅 계획 : http://cafe.naver.com/openrt/4371  [나노콥터] AfroFlight32 펌웨어를 스마트로봇 보드로 시험 : http://cafe.naver.com/openrt/4401  [나노콥터] PWM 동작 시험 : http://cafe.naver.com/openrt/4443  [나노콥터] 센서 방향 및 모터 위치 : http://cafe.naver.com/openrt/4467  [나노콥터] 펌웨어 시험용 기체 만들기 : http://cafe.naver.com/openrt/4472  [나노콥터] 펌웨어 개발환경 및 부트로더 : http://cafe.naver.com/openrt/4483  [나노콥터] HexAirBot 통신 인터페이스 추가 : http://cafe.naver.com/openrt/4490  [나노콥터] 모터 시험 : http://cafe.naver.com/openrt/4491  [나노콥터] 블루투스 통신 시험 : http://cafe.naver.com/openrt/4518  [나노콥터] 멀티위콘피그 프로그램 : http://cafe.naver.com/openrt/4605  [나노콥터] SkyRover 조립 및 구동 시험 : http://cafe.naver.com/openrt/4726  [나노콥터] Hex 콥터 변경 펌웨어 : http://cafe.naver.com/openrt/5107  SkyRover nano Hex 비행영상 : http://cafe.naver.com/openrt/5158  SkyRover 펌웨어 계획 : http://cafe.naver.com/openrt/5383  SkyRover 펌웨어에 FreeRTOS 적용 : http://cafe.naver.com/openrt/5455  SkyRover 부트로더/펌웨어 USB통신 추가 : http://cafe.naver.com/openrt/5548  SkyRover 윈도우용 GUI 다운로더(STM32LD_GUI) : http://cafe.naver.com/openrt/5943  SkyRover Nano PCB 첫 비행 : http://cafe.naver.com/openrt/6651  SkyRover Nano 최종 PCB 버전 비행 시험 : http://cafe.naver.com/openrt/6744  SkyRover Nano OLED 시험 : http://cafe.naver.com/openrt/6760  SkyRover Nano Cup(컵) 버전 시험 비행 : http://cafe.naver.com/openrt/6844
  • 6. 펌웨어 History – Open Source SkyRover Nano Multiwii Afroflight32 Flexbot FreeRTOS STM32LD u8glib  Why? • 기술 진입 장벽 낮아짐 • 플랫폼 다양화 • 정보 공유를 통한 발전 • 열린 커뮤니티 활성화
  • 7. 펌웨어 History – Open Source 구 분 설 명 링크 Mulitiwii 멀티콥터 오픈소스 https://code.google.com/p/multiwii/ Afroflight32 Mulitiwii를 STM32F103용으로 포팅한 버전 https://github.com/multiwii/baseflight HexAirBot Mulitiwii에 Flexbot app을 이용한 제어가 가능하도록 변경함 https://github.com/HexAirbot FreeRTOS 멀티태스킹을 위한 리얼타임 OS http://www.freertos.org/ STM32Cube ST사에서 STM32시리즈 활용을 위한 펌웨어 라이브러리 http://www.st.com/stm32cube-pr stm32ld STM32의 시리얼 부트로더 프로토콜을 사용한 Flash 다운로 드 https://github.com/jsnyder/stm32ld https://github.com/chcbaram/stm32ld https://github.com/chcbaram/stm32ld_gu i u8glib 그래픽 LCD 라이브러리 https://code.google.com/p/u8glib/  Open Source List
  • 8. 펌웨어 구조 펌웨어 부트로더 0x08000000 0x08003000 설정 저장 12KB 114KB 2KB 0x0801F800 0x08020000  Memory 구조 • 부트로더는 전원 On/Reset시 처음 실행됨 • STM32F103은 EEPROM이 없기때문에 마지막 2KB영역을 저장용 메모리로 사용 • 펌웨어 다운로드시 설정값은 유지됨
  • 9. 펌웨어 구조  부트로더 • 기능  통신으로 펌웨어를 MCU의 플래시 메모리에 Write하고 펌웨어를 실행 • 통신 프로토콜  STM32의 내장 부트로더 통신 프로토콜 • 다운로드 Tool  오픈소스인 stm32ld를 수정하여 사용하고 윈도우용으로 포팅(stm32ld_gui) • 통신 포트  Uart1 시리얼 포트  USB의 Virtual 시리얼 포트 • 소스코드  https://github.com/oroca/SkyRover_Nano_Boot
  • 10. 펌웨어 구조  펌웨어 Thread • FreeRTOS를 적용하여 총 3개의 Thread를 구동함 • 각 스레드는 독립적으로 동시에 실행되기에 멀티콥터 기능을 수행하면서 LCD표시나 메뉴를 통 한 모니터링등이 가능함 • 멀티콥터 제어 Loop는 RTOS가 고려되지 않고 작성되었기 때문에 Thread의 우선순위를 동일 하게 설정함 • 향후 RTOS를 고려하여 멀티콥터 제어 Loop를 다시 작성 필요(RTOS의 효율적 사용) thread_mw() thread_menu() thread_lcd() • 멀티콥터 제어 Loop • 통신/모터/센서 관리 • USB통신을 이용한 메뉴 기 능 • 블루투스 설정 • 센서 모니터링 • 기능 설정 • U8glib를 사용한 LCD 표시
  • 11. 펌웨어 구조  멀티콥터 제어 Loop rcReady = hexairbotFrameComplete(); computeRC(); • 블루투스로 조종 데이터가 수신되었는지 검사 • 수신된 조종값(롤,피치,요,스로틀,AUX1,AUX2,AUX3,AUX4)을 rcData[] 배 열에 저장 50Hz computeIMU(); • 가속도/자이로/지자계 센서로 부터 자세값 계산 annexCode(); • 수신된 조종값 rcData[]의 범위는 1000~2000이며(중립은 1500), 제어범위 값 rcCommand[]에 0~500 값으로 변환 pid_controller(); mixTable(); writeServos(); writeMotors(); • rcCommnad[]값을 기준으로 PID제어에 따른 제어량값 계산 • 기체 종류에 따라 PID제어를 통해 나온 제어량은 모터 PWM으로 변환 • PWM값에 따른 모터 구동 280Hz
  • 12. 자세 - Roll  Roll • 멀티콥터가 좌/우로 회전하는 방향 (-)방 향 (+)방 향 <뒤에서 본모 습> 0도 -90 도 +90 도 +180 도
  • 13. 자세 - Pitch  Pitch • 멀티콥터가 상/하로 회전하는 방향 (-)방 향 (+)방 향 <옆에서 본모 습> 0도 -90 도 +90 도
  • 14. 자세 - Yaw  Yaw • 멀티콥터의 수평 움직임으로 우측으로 회전시 +방향만 있음 • 지자계 센서가 활성화 되어 있으면 북쪽이 0도이고 그렇지 않은경우 가속도 센서의 X축방향이 0도 0도 <위에서 본모 습> 북 동 남 서 360도
  • 15. 모터 방향 - Hex  Hex 구성 • 6개의 모터로 구성되며 모터의 방향은 기체의 타입에 따라 결정됨 • SkyRover Nano는 Multiwii에서 사용되는 모터 방향이 사용됨 <Hex 모터 구 <SkyRover Nano>
  • 16. 모터 방향 - QuadX  QuadX 구성 • 4개의 모터가 크로스 형태로 구성됨 • 대표적인 쿼드콥터 형태 <Hex 모터 구 <SkyRover Nano>
  • 17. 비행모드 Mode 자이로 센서 가속도 센서 기압 센서 지자계 센서 Acro/Gyro ● Angle/Stable ● ● Horizon ● ● HeadFree ● ● ● Altitude Hold ● ● ●  비행 모드별 사용 센서
  • 18. 비행모드 – Acro/Gyro <조종기> <멀티콥터> <조종기> <멀티콥터>  Roll/Pitch/Yaw 축에 자이로 센서로만 자세제어
  • 19. 비행모드 – Angle/Stable <조종기> <멀티콥터> <조종기> <멀티콥터>  SkyRover Nano의 비행 모드  Roll/Pitch는 가속도/자이로에서 구해진 각도값으로 자세제어  Yaw는 자이로 센서값으로만 제어
  • 21. 자세제어  멀티콥터 움직임 • Roll/Pitch/Yaw/상하 움직임의 전체 합 방향으로 이동 • 각 이동방향에 대해 제어가 되면 원하는 방향으로 기체 이동이 가 능 + + + <Roll> <Pitch> <Yaw> <상/하>
  • 22. 자세제어  6개의 모터 구동으로 Roll/Pitch/Yaw/상하 이동 Roll Pitch Yaw 상/하 모터속도 빠르게 모터속도 느리게
  • 23. 자세제어  멀티콥터의 움직임에 대한 모터 영향 (-)방 향 (+)방 향 모터속 도 느리 게 모터속 도 빠르 게 모터속 도 빠르 게 모터속 도 느리 게<Roll 움직임>
  • 24. 자세제어 모터 Roll Pitch Yaw 상/하 (+) (-) (+) (-) (+) (-) (+) (-) FRONT_L + - - + - + + - REAR_L + - + - + - + - FRONT_R - + - + - + + - REAR_R - + + - + - + - FRONT 0 0 - + + - + - REAR 0 0 + - - + + -  움직임 방향 vs 모터속도 방향
  • 25. 자세제어  모터 제어속도 구성요소 PWM1 = FRONT_L = 제어량xRoll방향 + 제어량xPitch방향 + 제어량xYaw방향 + 제어량x상/하방향 Roll, Pitch, Yaw, 상/하 PWM1 PWM2 PWM3 PWM4 PWM5 PWM6 = Roll Pitch Yaw 상/하 제어량 방향 모터속도 Mixer
  • 26. 자세제어 THROTTLE ROLL PITCH YAW ROLL측정값 PITCH측정값 YAW측정값 ROLL 오차값 PITCH 오차값 YAW 오차값 PID 제어기 PID 제어기 PID 제어기 ROLL 제어량 PITCH 제어량 YAW 제어량 Mixer PWM1 PWM2 PWM3 PWM4 PWM5 PWM6 목표치 입력 제어기 출력 computeRC( ) annexCode( ) computeIMU( ) pidMultiWii( ) mixTable( ) writeMotors( )
  • 27. 자세제어  Feedback 제어 Roll Pitch Yaw 상/하 모터속도 빠르게 모터속도 느리게 자세측정 -+ 오차 제어기 목표값