SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
드론 펌웨어 분석
조한철(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

Contenu connexe

Tendances

Parallel computing with Gpu
Parallel computing with GpuParallel computing with Gpu
Parallel computing with GpuRohit Khatana
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal BootloaderSatpal Parmar
 
LAS16-200: SCMI - System Management and Control Interface
LAS16-200:  SCMI - System Management and Control InterfaceLAS16-200:  SCMI - System Management and Control Interface
LAS16-200: SCMI - System Management and Control InterfaceLinaro
 
Linux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingLinux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingStephan Cadene
 
Systemd 간략하게 정리하기
Systemd 간략하게 정리하기Systemd 간략하게 정리하기
Systemd 간략하게 정리하기Seungha Son
 
Hardware Abstraction Layer
Hardware Abstraction LayerHardware Abstraction Layer
Hardware Abstraction LayerTeh Kian Cheng
 
Linux Porting to a Custom Board
Linux Porting to a Custom BoardLinux Porting to a Custom Board
Linux Porting to a Custom BoardPatrick Bellasi
 
Rootlinux17: Hypervisors on ARM - Overview and Design Choices by Julien Grall...
Rootlinux17: Hypervisors on ARM - Overview and Design Choices by Julien Grall...Rootlinux17: Hypervisors on ARM - Overview and Design Choices by Julien Grall...
Rootlinux17: Hypervisors on ARM - Overview and Design Choices by Julien Grall...The Linux Foundation
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoCMacpaul Lin
 
LAS16-105: Walkthrough of the EAS kernel adaptation to the Android Common Kernel
LAS16-105: Walkthrough of the EAS kernel adaptation to the Android Common KernelLAS16-105: Walkthrough of the EAS kernel adaptation to the Android Common Kernel
LAS16-105: Walkthrough of the EAS kernel adaptation to the Android Common KernelLinaro
 
Dave Gilbert - KVM and QEMU
Dave Gilbert - KVM and QEMUDave Gilbert - KVM and QEMU
Dave Gilbert - KVM and QEMUDanny Abukalam
 
LCU14-410: How to build an Energy Model for your SoC
LCU14-410: How to build an Energy Model for your SoCLCU14-410: How to build an Energy Model for your SoC
LCU14-410: How to build an Energy Model for your SoCLinaro
 
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)Shinya Takamaeda-Y
 

Tendances (20)

Toolchain
ToolchainToolchain
Toolchain
 
Parallel computing with Gpu
Parallel computing with GpuParallel computing with Gpu
Parallel computing with Gpu
 
Rekursiv
RekursivRekursiv
Rekursiv
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal Bootloader
 
LAS16-200: SCMI - System Management and Control Interface
LAS16-200:  SCMI - System Management and Control InterfaceLAS16-200:  SCMI - System Management and Control Interface
LAS16-200: SCMI - System Management and Control Interface
 
Linux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingLinux Kernel and Driver Development Training
Linux Kernel and Driver Development Training
 
Systemd 간략하게 정리하기
Systemd 간략하게 정리하기Systemd 간략하게 정리하기
Systemd 간략하게 정리하기
 
Hardware Abstraction Layer
Hardware Abstraction LayerHardware Abstraction Layer
Hardware Abstraction Layer
 
Linux Porting to a Custom Board
Linux Porting to a Custom BoardLinux Porting to a Custom Board
Linux Porting to a Custom Board
 
Rootlinux17: Hypervisors on ARM - Overview and Design Choices by Julien Grall...
Rootlinux17: Hypervisors on ARM - Overview and Design Choices by Julien Grall...Rootlinux17: Hypervisors on ARM - Overview and Design Choices by Julien Grall...
Rootlinux17: Hypervisors on ARM - Overview and Design Choices by Julien Grall...
 
U boot porting guide for SoC
U boot porting guide for SoCU boot porting guide for SoC
U boot porting guide for SoC
 
Arm Cortex
Arm CortexArm Cortex
Arm Cortex
 
LAS16-105: Walkthrough of the EAS kernel adaptation to the Android Common Kernel
LAS16-105: Walkthrough of the EAS kernel adaptation to the Android Common KernelLAS16-105: Walkthrough of the EAS kernel adaptation to the Android Common Kernel
LAS16-105: Walkthrough of the EAS kernel adaptation to the Android Common Kernel
 
Linux Kernel Overview
Linux Kernel OverviewLinux Kernel Overview
Linux Kernel Overview
 
Bootloaders
BootloadersBootloaders
Bootloaders
 
U-Boot - An universal bootloader
U-Boot - An universal bootloader U-Boot - An universal bootloader
U-Boot - An universal bootloader
 
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernelEmbedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
 
Dave Gilbert - KVM and QEMU
Dave Gilbert - KVM and QEMUDave Gilbert - KVM and QEMU
Dave Gilbert - KVM and QEMU
 
LCU14-410: How to build an Energy Model for your SoC
LCU14-410: How to build an Energy Model for your SoCLCU14-410: How to build an Energy Model for your SoC
LCU14-410: How to build an Energy Model for your SoC
 
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
 

Similaire à [드론] 펌웨어 분석 [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
 

Similaire à [드론] 펌웨어 분석 [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)
 

[드론] 펌웨어 분석 [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