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

Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_mapslcplcp1
 
Kernel Recipes 2017: Using Linux perf at Netflix
Kernel Recipes 2017: Using Linux perf at NetflixKernel Recipes 2017: Using Linux perf at Netflix
Kernel Recipes 2017: Using Linux perf at NetflixBrendan Gregg
 
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce RichardsonThe 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardsonharryvanhaaren
 
Decompressed vmlinux: linux kernel initialization from page table configurati...
Decompressed vmlinux: linux kernel initialization from page table configurati...Decompressed vmlinux: linux kernel initialization from page table configurati...
Decompressed vmlinux: linux kernel initialization from page table configurati...Adrian Huang
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot) Omkar Rane
 
Arm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based MultiprocessingArm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based MultiprocessingArm
 
Arm device tree and linux device drivers
Arm device tree and linux device driversArm device tree and linux device drivers
Arm device tree and linux device driversHoucheng Lin
 
Run Qt on Linux embedded systems using Yocto
Run Qt on Linux embedded systems using YoctoRun Qt on Linux embedded systems using Yocto
Run Qt on Linux embedded systems using YoctoMarco Cavallini
 
Capturing NIC and Kernel TX and RX Timestamps for Packets in Go
Capturing NIC and Kernel TX and RX Timestamps for Packets in GoCapturing NIC and Kernel TX and RX Timestamps for Packets in Go
Capturing NIC and Kernel TX and RX Timestamps for Packets in GoScyllaDB
 
Embedded_Linux_Booting
Embedded_Linux_BootingEmbedded_Linux_Booting
Embedded_Linux_BootingRashila Rr
 
14 gsm bss network kpi (call setup time) optimization manual[1].doc
14 gsm bss network kpi (call setup time) optimization manual[1].doc14 gsm bss network kpi (call setup time) optimization manual[1].doc
14 gsm bss network kpi (call setup time) optimization manual[1].doctharinduwije
 
RxNetty vs Tomcat Performance Results
RxNetty vs Tomcat Performance ResultsRxNetty vs Tomcat Performance Results
RxNetty vs Tomcat Performance ResultsBrendan Gregg
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal BootloaderSatpal Parmar
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersChang W. Doh
 
Linux Networking Explained
Linux Networking ExplainedLinux Networking Explained
Linux Networking ExplainedThomas Graf
 
Nemo outdoor 6_training_aug2011 [compatibility mode]
Nemo outdoor 6_training_aug2011 [compatibility mode]Nemo outdoor 6_training_aug2011 [compatibility mode]
Nemo outdoor 6_training_aug2011 [compatibility mode]Doduor
 
Arm v8 instruction overview android 64 bit briefing
Arm v8 instruction overview android 64 bit briefingArm v8 instruction overview android 64 bit briefing
Arm v8 instruction overview android 64 bit briefingMerck Hung
 

Tendances (20)

Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_maps
 
Kernel Recipes 2017: Using Linux perf at Netflix
Kernel Recipes 2017: Using Linux perf at NetflixKernel Recipes 2017: Using Linux perf at Netflix
Kernel Recipes 2017: Using Linux perf at Netflix
 
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce RichardsonThe 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
 
Decompressed vmlinux: linux kernel initialization from page table configurati...
Decompressed vmlinux: linux kernel initialization from page table configurati...Decompressed vmlinux: linux kernel initialization from page table configurati...
Decompressed vmlinux: linux kernel initialization from page table configurati...
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot)
 
Arm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based MultiprocessingArm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
Arm DynamIQ: Intelligent Solutions Using Cluster Based Multiprocessing
 
DPDK In Depth
DPDK In DepthDPDK In Depth
DPDK In Depth
 
Arm device tree and linux device drivers
Arm device tree and linux device driversArm device tree and linux device drivers
Arm device tree and linux device drivers
 
Run Qt on Linux embedded systems using Yocto
Run Qt on Linux embedded systems using YoctoRun Qt on Linux embedded systems using Yocto
Run Qt on Linux embedded systems using Yocto
 
Capturing NIC and Kernel TX and RX Timestamps for Packets in Go
Capturing NIC and Kernel TX and RX Timestamps for Packets in GoCapturing NIC and Kernel TX and RX Timestamps for Packets in Go
Capturing NIC and Kernel TX and RX Timestamps for Packets in Go
 
Embedded_Linux_Booting
Embedded_Linux_BootingEmbedded_Linux_Booting
Embedded_Linux_Booting
 
14 gsm bss network kpi (call setup time) optimization manual[1].doc
14 gsm bss network kpi (call setup time) optimization manual[1].doc14 gsm bss network kpi (call setup time) optimization manual[1].doc
14 gsm bss network kpi (call setup time) optimization manual[1].doc
 
RxNetty vs Tomcat Performance Results
RxNetty vs Tomcat Performance ResultsRxNetty vs Tomcat Performance Results
RxNetty vs Tomcat Performance Results
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal Bootloader
 
Memory model
Memory modelMemory model
Memory model
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for Beginners
 
Linux Networking Explained
Linux Networking ExplainedLinux Networking Explained
Linux Networking Explained
 
Nemo outdoor 6_training_aug2011 [compatibility mode]
Nemo outdoor 6_training_aug2011 [compatibility mode]Nemo outdoor 6_training_aug2011 [compatibility mode]
Nemo outdoor 6_training_aug2011 [compatibility mode]
 
Advanced C
Advanced C Advanced C
Advanced C
 
Arm v8 instruction overview android 64 bit briefing
Arm v8 instruction overview android 64 bit briefingArm v8 instruction overview android 64 bit briefing
Arm v8 instruction overview android 64 bit briefing
 

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)
 

Plus de chcbaram

OROCABOY3 제작기
OROCABOY3 제작기OROCABOY3 제작기
OROCABOY3 제작기chcbaram
 
강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노chcbaram
 
강좌 06 부트로더
강좌 06 부트로더강좌 06 부트로더
강좌 06 부트로더chcbaram
 
강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍chcbaram
 
강좌 03 개발환경 구축
강좌 03 개발환경 구축강좌 03 개발환경 구축
강좌 03 개발환경 구축chcbaram
 
강좌 개요
강좌 개요강좌 개요
강좌 개요chcbaram
 
OpenCR tutorial_icra2017
OpenCR tutorial_icra2017 OpenCR tutorial_icra2017
OpenCR tutorial_icra2017 chcbaram
 
OpenCR 아두이노 펌웨어개발
OpenCR 아두이노 펌웨어개발OpenCR 아두이노 펌웨어개발
OpenCR 아두이노 펌웨어개발chcbaram
 
아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작아두이노와 Fpga를 이용한 로봇제작
아두이노와 Fpga를 이용한 로봇제작chcbaram
 

Plus de chcbaram (9)

OROCABOY3 제작기
OROCABOY3 제작기OROCABOY3 제작기
OROCABOY3 제작기
 
강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노강좌 07 ARM 프로세서용 아두이노
강좌 07 ARM 프로세서용 아두이노
 
강좌 06 부트로더
강좌 06 부트로더강좌 06 부트로더
강좌 06 부트로더
 
강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍
 
강좌 03 개발환경 구축
강좌 03 개발환경 구축강좌 03 개발환경 구축
강좌 03 개발환경 구축
 
강좌 개요
강좌 개요강좌 개요
강좌 개요
 
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