SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
드론 펌웨어 분석
조한철(Baram)
2015. 5. 23.
목차
 드론 오픈소스
 드론 프로젝트
 드론 펌웨어 구조
2/30
드론 오픈소스
 MultiWii
 홈페이지 : http://www.multiwii.com/
 소스코드 : https://code.google.com/p/multiwii/
 ArduPilot/APM
 홈페이지 : http://ardupilot.com/
 소스코드 : https://github.com/diydrones/ardupilot
 AeroQuad
 홈페이지 : http://aeroquad.com/
 소스코드 : https://github.com/AeroQuad/AeroQuad/
 PX4
 홈페이지 : https://pixhawk.org
 소스코드 : https://github.com/PX4/Firmware
 Crazyfile
 홈페이지 : https://www.bitcraze.io
 소스코드 : https://github.com/bitcraze
3/30
드론 프로젝트
 Flexbot
• AVR/멀티위 기반으로 기체는 3D프린팅으로 제작하여 스마트폰으로 블루투스통한 조정기능 제공
• SkyRover Nano V1.0의 기본 컨셉 모델
4/30
드론 프로젝트
 Crazyfile 2.0
• STM32F405의 빠른 MCU사용하고 소형 쿼드콥터에 최적화된 독자 펌웨어 사용
• NRF51822 RF+블루투스 통합칩을 사용하여 RF통신과 스마트폰을 통한 블루투스 제어 동시 지원
• RF통신을 사용하여 PS3/4 리모트 조종기를 지원
• 확장 포트를 통해서 다양한 주변장치 추가 가능
• SkyRover Nano V2.0의 기본 컨셉 모델
5/30
드론 프로젝트
 ERLE-COPTER
• Beaglebone black 보드에 리눅스 커널 패치 및 Ardupilot/APM 적용
• ROS 지원
• Linux 베이스의 App을 통한 기능 추가 및 변경
6/30
드론 프로젝트
 Phenox2
• Xilinx의 ARM+FPGA구성의 SOC인 Zynq를 사용
• ARM 듀얼코어 중 1개는 Linux사용하고, 나머지 1개는 Realtime 제어용으로 사용
• FPGA를 활용하여 하드웨어 구성이 용이하고, Linux를 통한 고급 기능 추가 가능
7/30
드론 프로젝트
 SkyRover Nano V1.0
• Multiwii를 STM32로 포팅한 Afroflight32 펌웨어 기반
• Flexbot 프로젝트에서 사용한 App의 프로토콜 적용으로 스마트폰으로 조정
• FreeRTOS적용하여 기능 추가
Multiwii 2.3
Arduino
AVR
SkyRover
Nano
+
Flexbot 통신
I/F
Afroflight32
GCC
STM32F103 부트로더 추가
+ +
FreeRTOS 적용
USB 통신
+
LCD Lib
(u8glib)
+
8/30
드론 프로젝트
 SkyRover Nano V2.0
• H/W, F/W는 Crazyfile 2.0에 기반
• Flexbot 통신 I/F를 추가하여 기존 SkyRover App에서도 동작하도록 변경
• 향후 SkyRover 1.0펌웨어를 포팅하여 Multiwii 기반으로도 테스트 가능하도록 변경 예정
SkyRover Nano V2.0+
Flexbot 통신
I/F
Crazyfile 2.0
+
V2.0 보드에 포팅
SkyRover 1.0 SkyRover Nano V2.2
9/30
드론 프로젝트
1. 드론 오픈소스 프로젝트 증가
2. 추구하는 방향성도 다양함
3. 성능/기능 발전
4. 커뮤니티 활성화
국내는?
10/30
드론 프로젝트
11/30
드론 펌웨어 구조
왜 드론 펌웨어를 분석하는가?
1. 궁금해서..
2. 드론이 어떻게 움직이는지 알고 싶다.
3. 드론에 새로운 기능을 넣고 싶다.
4. 드론 프로그래밍을 하고 싶다.
5. 졸업 프로젝트..
6. 기타..
12/30
드론 펌웨어 구조
컴퓨터공학
제어공학
메카트로닉스
인공지능
드론
드론은 다양한 기술들의 결합물
13/30
드론 펌웨어 구조 - V1.0
 SkyRover Nano V1.0 호출 구조
• FreeRTOS를 사용
• 기존의 멀티위 제어 함수를 하나의 스레드로 구현하고 menu/lcd등 추가 스레드로 기능 추가
main()
thread_main()
thread_mw()
thread_menu()
thread_lcd()
- 멀티위 제어 기능 수행
- USB를 통한 메뉴 기능 수행
- I2C방식의 LCD 출력 기능 수행
14/30
드론 펌웨어 구조 - V1.0
 SkyRover Nano V1.0 제어구조
• Multiwii 스레드에서 하나의 loop함수에 기능 구현
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
15/30
드론 펌웨어 구조 - V2.0
 SkyRover Nano V2.0 시스템 구성
• NRF51822 RF/블루투스 통합칩을 사용하여 RF/BLE 동시 지원
• NRF51822칩과는 UART로 시리얼통신
• PC와는 USB 통신
• Main 프로세서로 STM32F405사용
STM32F405
NRF51822
(Cortex-M0)
UART
RF통신 블루투스 4.0 BLE
PC
USB
I2C
UART
SPI
MPU9250
(IMU)
LPS25H
I2C
16/30
드론 펌웨어 구조 - V2.0
 NRF51822
• RF 2.4Ghz통신과 블루투스 BLE 지원
• Cortex-M0 MCU를 내장하고 다양한 주변장치로 구성됨
• 프로그래밍을 통하여 다양한 기능 추가/변경 가능
• 블루투스는 소프트웨어 스택으로 제공
17/30
드론 펌웨어 구조 - V2.0
 NRF51822 메모리 맵
• 펌웨어는 MBS/부트로더/펌웨어/Softdevice 4개로 구성됨
• 부트순서 : MBR -> MBS -> 부트로더 -> 펌웨어
MBR
0x00000000
0x00016000
부트로더
88KB
23KB
4KB
0x0001F000
0x00020000
Softdevice
(BLE지원)
펌웨어
MBS
13KB
0x0001BC00
128KB
전원 버튼관리 및 부트로더/펌웨어 실행 분기
STM32F405부트로더 실행 및 통신데이터 송/수신
통신 기능
전원관리
확장보드 메모리 관리
블루투스 BLE 스택
18/30
드론 펌웨어 구조 - V2.0
 STM32F405 메모리 맵
• 부트로더/펌웨어로 구성
• 부트로더를 통해서 펌웨어 다운로드 가능
0x80000000
16KB
1008KB
0x80100000
펌웨어
1024KB
부트로더
0x80004000
19/30
드론 펌웨어 구조 - V2.0
 부팅 순서
• NRF51822가 전원 관리 및 부팅순서를 제어함
펌웨어
STM32F405
부트로더
MBR
부트로더
Softdevice
(BLE지원)
펌웨어
MBS
NRF51822
시작
Reset
20/30
드론 펌웨어 구조 - V2.0
 호출 구조
main()
platformInit()
systemLaunch()
systemTask()
ledInit()
uartInit()
systemInit()
commInit()
commanderInit()
stabilizerInit()
expbrdInit()
memInit()
pass &= systemTest()
pass &= commTest()
pass &= stabilizerTest()
초기화
기능 테스트
workerLoop() 작업 스레드
21/30
드론 펌웨어 구조 - V2.0
 스레드 구성
• 기능별 스레드로 구성하고 IPC를 통해 스레드간 동기화 및 데이터 전달
adcTask()
crtpTxTask()
crtpRxTask()
systemTask()
easylinkTask()
infoTask()
logTask()
memTask()
paramTask()
pidCrtlTask()
pmTask() stabilizerTask()
syslinkTask()
usblinkTask()
센서/제어시스템 관리정보
Queue
Semaphore
Mutex
22/30
통신
드론 펌웨어 구조 - V2.0
 통신
• 기본 통신방식은 CRTP(CrazyRealtimeTransferProtocol)을 사용하고 CRTP 패킷을 UART/USB로 송/수신
STM32F405
NRF51822
(Cortex-M0)
syslinkTask()
crtpTxTask()
crtpRxTask()
PC
usblinkTask()
23/30
드론 펌웨어 구조 - V2.0
 제어 스레드
• stabilizerTask()
• MPU9250 IMU센서에서 데이터 읽기imu9Read(&gyro, &acc, &mag)
commanderGetRPY()
500Hz
sensfusion6UpdateQ()
sensfusion6GetEulerRPY()
sensfusion6GetAccZWithoutGravity()
controllerCorrectAttitudePID()
250Hz
distributePower()500Hz
• RF/BLE로 부터 Roll/Pitch/Yaw/스로틀 값 읽기
• IMU센서로 부터 Roll/Pitch/Yaw 자세값 계산
• 목표자세값과 현재 자세값과의 차이를 PID 제어량값 계산
• PID제어량으로 부터 계산된값으로 모터 출력 변경
24/30
드론 펌웨어 구조 - V2.0
 파라메터
• PARAM_GROUP_START/PARAM_GROUP_STOP으로 그룹 지정
• PARAM_ADD로 파라메터 항목 추가
• 두개의 매크로를 사용하여 하나의 구조체를 생성하고 생성된 구조체를 참조
• 파라메터 그룹을 추가하면 PC 클라이언트 프로그램에 표시가 되고 값 수정이 가능
PARAM_GROUP_START(ring)
PARAM_ADD(PARAM_UINT8, effect, &effect)
PARAM_ADD(PARAM_UINT32 | PARAM_RONLY, neffect, &neffect)
PARAM_ADD(PARAM_UINT8, solidRed, &solidRed)
PARAM_ADD(PARAM_UINT8, solidGreen, &solidGreen)
PARAM_ADD(PARAM_UINT8, solidBlue, &solidBlue)
PARAM_ADD(PARAM_UINT8, headlightEnable, &headlightEnable)
PARAM_ADD(PARAM_FLOAT, glowstep, &glowstep)
PARAM_ADD(PARAM_FLOAT, emptyCharge, &emptyCharge)
PARAM_ADD(PARAM_FLOAT, fullCharge, &fullCharge)
PARAM_GROUP_STOP(ring)
25/30
드론 펌웨어 구조 - V2.0
 로그
• LOG_GROUP_START/LOG_GROUP_STOP으로 그룹 지정
• LOG_ADD로 파라메터 항목 추가
LOG_GROUP_START(mag_raw)
LOG_ADD(LOG_INT16, x, &mag.x)
LOG_ADD(LOG_INT16, y, &mag.y)
LOG_ADD(LOG_INT16, z, &mag.z)
LOG_GROUP_STOP(mag_raw)
26/30
드론 펌웨어 구조 - V2.0
 로그
• 로그 항목은 PC 클라이언트에서 실시간으로 값을 보거나 파일로 저장이 가능
실시간 모니터링 로그 파일로 저장
27/30
드론 펌웨어 구조 - V2.0
 조종 방법
블루투스 4.0 BLE스마트폰
• 스마트폰 터치 + 블루투스 통신
블루투스 4.0 BLE스마트폰
• 스마트폰 + OTG + PS4 리모트 컨트롤러
PS4
컨트롤러
OTG
RF스마트폰
• 스마트폰 + OTG + USB RF + PS4 리모트 컨트롤러
PS4
컨트롤러
OTG
USB RF
RF
PC
• PC + USB RF + PS4 리모트 컨트롤러
PS4
컨트롤러
USB
USB RF
OTG
RF
PC
• PC + USB RF + Open API(파이썬/C++) + 자동조종
USB RF
28/30
드론 펌웨어 구조 - V2.0
 응용
• OpenCV와 카메라를 이용한 호버링
• https://youtu.be/gsH1JjfWzX0
• 사운드를 활용한 댄싱
• https://youtu.be/kZfJgUAIzUo
• Crazyfile Hover Control using SLAM
• https://youtu.be/PYuhrNMYlfk
• Crazyfile Position Control
• https://youtu.be/kC0z7a7aisg
• Flying the Crazyfile with Leap Motion
• https://youtu.be/xdm1qp1BYyo
29/30
감사합니다.
30/30

Mais conteúdo relacionado

Mais procurados

dm-writeboost-kernelvm
dm-writeboost-kernelvmdm-writeboost-kernelvm
dm-writeboost-kernelvmAkira Hayakawa
 
TDL3 Rootkit Background
TDL3 Rootkit BackgroundTDL3 Rootkit Background
TDL3 Rootkit BackgroundDavid Sweigert
 
UEFI Firmware Rootkits: Myths and Reality
UEFI Firmware Rootkits: Myths and RealityUEFI Firmware Rootkits: Myths and Reality
UEFI Firmware Rootkits: Myths and RealitySally Feller
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門ryos36
 
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own datasetYOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own datasetmoto2g
 
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細 (様々なメモリの利用)
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細 (様々なメモリの利用) 智啓 出川
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くTetsuyuki Kobayashi
 
AllwinnerタブレットのOSを作ってみる(中編)
AllwinnerタブレットのOSを作ってみる(中編)AllwinnerタブレットのOSを作ってみる(中編)
AllwinnerタブレットのOSを作ってみる(中編)shimadah
 
QEMU - Binary Translation
QEMU - Binary Translation QEMU - Binary Translation
QEMU - Binary Translation Jiann-Fuh Liaw
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編Fixstars Corporation
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
2018 Genivi Xen Overview Nov Update
2018 Genivi Xen Overview Nov Update2018 Genivi Xen Overview Nov Update
2018 Genivi Xen Overview Nov UpdateThe Linux Foundation
 
Secureboot Survival Guide
Secureboot Survival GuideSecureboot Survival Guide
Secureboot Survival Guidelcplcp1
 
05.2 virtio introduction
05.2 virtio introduction05.2 virtio introduction
05.2 virtio introductionzenixls2
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectYen-Chin Lee
 
Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?Samsung Open Source Group
 

Mais procurados (20)

dm-writeboost-kernelvm
dm-writeboost-kernelvmdm-writeboost-kernelvm
dm-writeboost-kernelvm
 
TDL3 Rootkit Background
TDL3 Rootkit BackgroundTDL3 Rootkit Background
TDL3 Rootkit Background
 
UEFI Firmware Rootkits: Myths and Reality
UEFI Firmware Rootkits: Myths and RealityUEFI Firmware Rootkits: Myths and Reality
UEFI Firmware Rootkits: Myths and Reality
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
Embedded Operating System - Linux
Embedded Operating System - LinuxEmbedded Operating System - Linux
Embedded Operating System - Linux
 
What is Bootloader???
What is Bootloader???What is Bootloader???
What is Bootloader???
 
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own datasetYOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
 
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細 (様々なメモリの利用)
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細 (様々なメモリの利用)
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
AllwinnerタブレットのOSを作ってみる(中編)
AllwinnerタブレットのOSを作ってみる(中編)AllwinnerタブレットのOSを作ってみる(中編)
AllwinnerタブレットのOSを作ってみる(中編)
 
QEMU - Binary Translation
QEMU - Binary Translation QEMU - Binary Translation
QEMU - Binary Translation
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
OS入門
OS入門OS入門
OS入門
 
Unix v6 Internals
Unix v6 InternalsUnix v6 Internals
Unix v6 Internals
 
2018 Genivi Xen Overview Nov Update
2018 Genivi Xen Overview Nov Update2018 Genivi Xen Overview Nov Update
2018 Genivi Xen Overview Nov Update
 
Secureboot Survival Guide
Secureboot Survival GuideSecureboot Survival Guide
Secureboot Survival Guide
 
05.2 virtio introduction
05.2 virtio introduction05.2 virtio introduction
05.2 virtio introduction
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto project
 
Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?Reconnaissance of Virtio: What’s new and how it’s all connected?
Reconnaissance of Virtio: What’s new and how it’s all connected?
 

Semelhante a [드론] 펌웨어 분석 [2015.5.23]

컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.chcbaram
 
오픈소스 기반 비행제어컴퓨터 PX4 소개
오픈소스 기반 비행제어컴퓨터 PX4 소개오픈소스 기반 비행제어컴퓨터 PX4 소개
오픈소스 기반 비행제어컴퓨터 PX4 소개SungTae Moon
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
SkyRover Firmware
SkyRover FirmwareSkyRover Firmware
SkyRover Firmwarechcbaram
 
Cortex M3에서 Wi-Fi 사용하기
Cortex M3에서 Wi-Fi 사용하기Cortex M3에서 Wi-Fi 사용하기
Cortex M3에서 Wi-Fi 사용하기동은 곽
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoMario Cho
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340Samsung Electronics
 
Python on Android
Python on AndroidPython on Android
Python on Android용 최
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Steve Shim
 
웹기반원격감시제어 2010 CPD
웹기반원격감시제어 2010 CPD웹기반원격감시제어 2010 CPD
웹기반원격감시제어 2010 CPD활 김
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집Daegwon Kim
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324종인 전
 
망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9종인 전
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신WooSangHwang
 
Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)wonyong hwang
 

Semelhante a [드론] 펌웨어 분석 [2015.5.23] (20)

컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
컵드론 멀티콥터 펌웨어 분석 2015. 3.28.
 
오픈소스 기반 비행제어컴퓨터 PX4 소개
오픈소스 기반 비행제어컴퓨터 PX4 소개오픈소스 기반 비행제어컴퓨터 PX4 소개
오픈소스 기반 비행제어컴퓨터 PX4 소개
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
SkyRover Firmware
SkyRover FirmwareSkyRover Firmware
SkyRover Firmware
 
Cortex M3에서 Wi-Fi 사용하기
Cortex M3에서 Wi-Fi 사용하기Cortex M3에서 Wi-Fi 사용하기
Cortex M3에서 Wi-Fi 사용하기
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
Python on Android
Python on AndroidPython on Android
Python on Android
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
 
Maker 오해와 진실
Maker 오해와 진실Maker 오해와 진실
Maker 오해와 진실
 
웹기반원격감시제어 2010 CPD
웹기반원격감시제어 2010 CPD웹기반원격감시제어 2010 CPD
웹기반원격감시제어 2010 CPD
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324
 
망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
 
Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)
 

Mais de chcbaram

OROCABOY3 제작기
OROCABOY3 제작기OROCABOY3 제작기
OROCABOY3 제작기chcbaram
 
강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노chcbaram
 
강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍chcbaram
 
OpenCR tutorial_icra2017
OpenCR tutorial_icra2017 OpenCR tutorial_icra2017
OpenCR tutorial_icra2017 chcbaram
 
OpenCR 아두이노 펌웨어개발
OpenCR 아두이노 펌웨어개발OpenCR 아두이노 펌웨어개발
OpenCR 아두이노 펌웨어개발chcbaram
 
아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작chcbaram
 

Mais de chcbaram (6)

OROCABOY3 제작기
OROCABOY3 제작기OROCABOY3 제작기
OROCABOY3 제작기
 
강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노
 
강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍
 
OpenCR tutorial_icra2017
OpenCR tutorial_icra2017 OpenCR tutorial_icra2017
OpenCR tutorial_icra2017
 
OpenCR 아두이노 펌웨어개발
OpenCR 아두이노 펌웨어개발OpenCR 아두이노 펌웨어개발
OpenCR 아두이노 펌웨어개발
 
아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작
 

[드론] 펌웨어 분석 [2015.5.23]

  • 2. 목차  드론 오픈소스  드론 프로젝트  드론 펌웨어 구조 2/30
  • 3. 드론 오픈소스  MultiWii  홈페이지 : http://www.multiwii.com/  소스코드 : https://code.google.com/p/multiwii/  ArduPilot/APM  홈페이지 : http://ardupilot.com/  소스코드 : https://github.com/diydrones/ardupilot  AeroQuad  홈페이지 : http://aeroquad.com/  소스코드 : https://github.com/AeroQuad/AeroQuad/  PX4  홈페이지 : https://pixhawk.org  소스코드 : https://github.com/PX4/Firmware  Crazyfile  홈페이지 : https://www.bitcraze.io  소스코드 : https://github.com/bitcraze 3/30
  • 4. 드론 프로젝트  Flexbot • AVR/멀티위 기반으로 기체는 3D프린팅으로 제작하여 스마트폰으로 블루투스통한 조정기능 제공 • SkyRover Nano V1.0의 기본 컨셉 모델 4/30
  • 5. 드론 프로젝트  Crazyfile 2.0 • STM32F405의 빠른 MCU사용하고 소형 쿼드콥터에 최적화된 독자 펌웨어 사용 • NRF51822 RF+블루투스 통합칩을 사용하여 RF통신과 스마트폰을 통한 블루투스 제어 동시 지원 • RF통신을 사용하여 PS3/4 리모트 조종기를 지원 • 확장 포트를 통해서 다양한 주변장치 추가 가능 • SkyRover Nano V2.0의 기본 컨셉 모델 5/30
  • 6. 드론 프로젝트  ERLE-COPTER • Beaglebone black 보드에 리눅스 커널 패치 및 Ardupilot/APM 적용 • ROS 지원 • Linux 베이스의 App을 통한 기능 추가 및 변경 6/30
  • 7. 드론 프로젝트  Phenox2 • Xilinx의 ARM+FPGA구성의 SOC인 Zynq를 사용 • ARM 듀얼코어 중 1개는 Linux사용하고, 나머지 1개는 Realtime 제어용으로 사용 • FPGA를 활용하여 하드웨어 구성이 용이하고, Linux를 통한 고급 기능 추가 가능 7/30
  • 8. 드론 프로젝트  SkyRover Nano V1.0 • Multiwii를 STM32로 포팅한 Afroflight32 펌웨어 기반 • Flexbot 프로젝트에서 사용한 App의 프로토콜 적용으로 스마트폰으로 조정 • FreeRTOS적용하여 기능 추가 Multiwii 2.3 Arduino AVR SkyRover Nano + Flexbot 통신 I/F Afroflight32 GCC STM32F103 부트로더 추가 + + FreeRTOS 적용 USB 통신 + LCD Lib (u8glib) + 8/30
  • 9. 드론 프로젝트  SkyRover Nano V2.0 • H/W, F/W는 Crazyfile 2.0에 기반 • Flexbot 통신 I/F를 추가하여 기존 SkyRover App에서도 동작하도록 변경 • 향후 SkyRover 1.0펌웨어를 포팅하여 Multiwii 기반으로도 테스트 가능하도록 변경 예정 SkyRover Nano V2.0+ Flexbot 통신 I/F Crazyfile 2.0 + V2.0 보드에 포팅 SkyRover 1.0 SkyRover Nano V2.2 9/30
  • 10. 드론 프로젝트 1. 드론 오픈소스 프로젝트 증가 2. 추구하는 방향성도 다양함 3. 성능/기능 발전 4. 커뮤니티 활성화 국내는? 10/30
  • 12. 드론 펌웨어 구조 왜 드론 펌웨어를 분석하는가? 1. 궁금해서.. 2. 드론이 어떻게 움직이는지 알고 싶다. 3. 드론에 새로운 기능을 넣고 싶다. 4. 드론 프로그래밍을 하고 싶다. 5. 졸업 프로젝트.. 6. 기타.. 12/30
  • 14. 드론 펌웨어 구조 - V1.0  SkyRover Nano V1.0 호출 구조 • FreeRTOS를 사용 • 기존의 멀티위 제어 함수를 하나의 스레드로 구현하고 menu/lcd등 추가 스레드로 기능 추가 main() thread_main() thread_mw() thread_menu() thread_lcd() - 멀티위 제어 기능 수행 - USB를 통한 메뉴 기능 수행 - I2C방식의 LCD 출력 기능 수행 14/30
  • 15. 드론 펌웨어 구조 - V1.0  SkyRover Nano V1.0 제어구조 • Multiwii 스레드에서 하나의 loop함수에 기능 구현 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 15/30
  • 16. 드론 펌웨어 구조 - V2.0  SkyRover Nano V2.0 시스템 구성 • NRF51822 RF/블루투스 통합칩을 사용하여 RF/BLE 동시 지원 • NRF51822칩과는 UART로 시리얼통신 • PC와는 USB 통신 • Main 프로세서로 STM32F405사용 STM32F405 NRF51822 (Cortex-M0) UART RF통신 블루투스 4.0 BLE PC USB I2C UART SPI MPU9250 (IMU) LPS25H I2C 16/30
  • 17. 드론 펌웨어 구조 - V2.0  NRF51822 • RF 2.4Ghz통신과 블루투스 BLE 지원 • Cortex-M0 MCU를 내장하고 다양한 주변장치로 구성됨 • 프로그래밍을 통하여 다양한 기능 추가/변경 가능 • 블루투스는 소프트웨어 스택으로 제공 17/30
  • 18. 드론 펌웨어 구조 - V2.0  NRF51822 메모리 맵 • 펌웨어는 MBS/부트로더/펌웨어/Softdevice 4개로 구성됨 • 부트순서 : MBR -> MBS -> 부트로더 -> 펌웨어 MBR 0x00000000 0x00016000 부트로더 88KB 23KB 4KB 0x0001F000 0x00020000 Softdevice (BLE지원) 펌웨어 MBS 13KB 0x0001BC00 128KB 전원 버튼관리 및 부트로더/펌웨어 실행 분기 STM32F405부트로더 실행 및 통신데이터 송/수신 통신 기능 전원관리 확장보드 메모리 관리 블루투스 BLE 스택 18/30
  • 19. 드론 펌웨어 구조 - V2.0  STM32F405 메모리 맵 • 부트로더/펌웨어로 구성 • 부트로더를 통해서 펌웨어 다운로드 가능 0x80000000 16KB 1008KB 0x80100000 펌웨어 1024KB 부트로더 0x80004000 19/30
  • 20. 드론 펌웨어 구조 - V2.0  부팅 순서 • NRF51822가 전원 관리 및 부팅순서를 제어함 펌웨어 STM32F405 부트로더 MBR 부트로더 Softdevice (BLE지원) 펌웨어 MBS NRF51822 시작 Reset 20/30
  • 21. 드론 펌웨어 구조 - V2.0  호출 구조 main() platformInit() systemLaunch() systemTask() ledInit() uartInit() systemInit() commInit() commanderInit() stabilizerInit() expbrdInit() memInit() pass &= systemTest() pass &= commTest() pass &= stabilizerTest() 초기화 기능 테스트 workerLoop() 작업 스레드 21/30
  • 22. 드론 펌웨어 구조 - V2.0  스레드 구성 • 기능별 스레드로 구성하고 IPC를 통해 스레드간 동기화 및 데이터 전달 adcTask() crtpTxTask() crtpRxTask() systemTask() easylinkTask() infoTask() logTask() memTask() paramTask() pidCrtlTask() pmTask() stabilizerTask() syslinkTask() usblinkTask() 센서/제어시스템 관리정보 Queue Semaphore Mutex 22/30 통신
  • 23. 드론 펌웨어 구조 - V2.0  통신 • 기본 통신방식은 CRTP(CrazyRealtimeTransferProtocol)을 사용하고 CRTP 패킷을 UART/USB로 송/수신 STM32F405 NRF51822 (Cortex-M0) syslinkTask() crtpTxTask() crtpRxTask() PC usblinkTask() 23/30
  • 24. 드론 펌웨어 구조 - V2.0  제어 스레드 • stabilizerTask() • MPU9250 IMU센서에서 데이터 읽기imu9Read(&gyro, &acc, &mag) commanderGetRPY() 500Hz sensfusion6UpdateQ() sensfusion6GetEulerRPY() sensfusion6GetAccZWithoutGravity() controllerCorrectAttitudePID() 250Hz distributePower()500Hz • RF/BLE로 부터 Roll/Pitch/Yaw/스로틀 값 읽기 • IMU센서로 부터 Roll/Pitch/Yaw 자세값 계산 • 목표자세값과 현재 자세값과의 차이를 PID 제어량값 계산 • PID제어량으로 부터 계산된값으로 모터 출력 변경 24/30
  • 25. 드론 펌웨어 구조 - V2.0  파라메터 • PARAM_GROUP_START/PARAM_GROUP_STOP으로 그룹 지정 • PARAM_ADD로 파라메터 항목 추가 • 두개의 매크로를 사용하여 하나의 구조체를 생성하고 생성된 구조체를 참조 • 파라메터 그룹을 추가하면 PC 클라이언트 프로그램에 표시가 되고 값 수정이 가능 PARAM_GROUP_START(ring) PARAM_ADD(PARAM_UINT8, effect, &effect) PARAM_ADD(PARAM_UINT32 | PARAM_RONLY, neffect, &neffect) PARAM_ADD(PARAM_UINT8, solidRed, &solidRed) PARAM_ADD(PARAM_UINT8, solidGreen, &solidGreen) PARAM_ADD(PARAM_UINT8, solidBlue, &solidBlue) PARAM_ADD(PARAM_UINT8, headlightEnable, &headlightEnable) PARAM_ADD(PARAM_FLOAT, glowstep, &glowstep) PARAM_ADD(PARAM_FLOAT, emptyCharge, &emptyCharge) PARAM_ADD(PARAM_FLOAT, fullCharge, &fullCharge) PARAM_GROUP_STOP(ring) 25/30
  • 26. 드론 펌웨어 구조 - V2.0  로그 • LOG_GROUP_START/LOG_GROUP_STOP으로 그룹 지정 • LOG_ADD로 파라메터 항목 추가 LOG_GROUP_START(mag_raw) LOG_ADD(LOG_INT16, x, &mag.x) LOG_ADD(LOG_INT16, y, &mag.y) LOG_ADD(LOG_INT16, z, &mag.z) LOG_GROUP_STOP(mag_raw) 26/30
  • 27. 드론 펌웨어 구조 - V2.0  로그 • 로그 항목은 PC 클라이언트에서 실시간으로 값을 보거나 파일로 저장이 가능 실시간 모니터링 로그 파일로 저장 27/30
  • 28. 드론 펌웨어 구조 - V2.0  조종 방법 블루투스 4.0 BLE스마트폰 • 스마트폰 터치 + 블루투스 통신 블루투스 4.0 BLE스마트폰 • 스마트폰 + OTG + PS4 리모트 컨트롤러 PS4 컨트롤러 OTG RF스마트폰 • 스마트폰 + OTG + USB RF + PS4 리모트 컨트롤러 PS4 컨트롤러 OTG USB RF RF PC • PC + USB RF + PS4 리모트 컨트롤러 PS4 컨트롤러 USB USB RF OTG RF PC • PC + USB RF + Open API(파이썬/C++) + 자동조종 USB RF 28/30
  • 29. 드론 펌웨어 구조 - V2.0  응용 • OpenCV와 카메라를 이용한 호버링 • https://youtu.be/gsH1JjfWzX0 • 사운드를 활용한 댄싱 • https://youtu.be/kZfJgUAIzUo • Crazyfile Hover Control using SLAM • https://youtu.be/PYuhrNMYlfk • Crazyfile Position Control • https://youtu.be/kC0z7a7aisg • Flying the Crazyfile with Leap Motion • https://youtu.be/xdm1qp1BYyo 29/30