본문 바로가기
정보공유

[드론] 펌웨어 분석

by 날고싶은커피향 2018. 12. 5.

[드론] 펌웨어 분석


[드론] 펌웨어 분석 [2015.5.23]
1. 드론 펌웨어 분석 조한철(Baram) 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
11. 드론 프로젝트 11/30
12. 드론 펌웨어 구조 왜 드론 펌웨어를 분석하는가? 1. 궁금해서.. 2. 드론이 어떻게 움직이는지 알고 싶다. 3. 드론에 새로운 기능을 넣고 싶다. 4. 드론 프로그래밍을 하고 싶다. 5. 졸업 프로젝트.. 6. 기타.. 12/30
13. 드론 펌웨어 구조 컴퓨터공학 제어공학 메카트로닉스 인공지능 드론 드론은 다양한 기술들의 결합물 13/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
30. 감사합니다. 30/30


반응형