Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ドローンのフライトコントローラをPythonで制御してみた話

5,001 views

Published on

PyCon JP 2017でのトークセッションで発表。PythonとドローンとRaspberry Piを組み合わせてみました。実際のトークではドローンのローター回転の実演しました。今後のIoTの先駆けになっていきたい。

Published in: Technology
  • Be the first to comment

ドローンのフライトコントローラをPythonで制御してみた話

  1. 1. ドローンのフライトコントローラを Pythonで 制御してみた話 @se_lina08 Lina Katayose PyCon JP 2017, 9/8
  2. 2. Ajenda 1.自己紹介 2.ドローンについて 3.目的 4.PythonとドローンとRaspberry Pi 5.フライトコントローラ 6.実践 7.まとめ
  3. 3. Hello! I am Lina Katayose I am Scientist Engineer. I love Flying Gadgets. Have fun my presentation. You can find me at @se_lina08 (Twitter) Facebook is lina.katayose
  4. 4. I reviewed this book. More info on how to buy this book at Amazon. I think this book is very useful.
  5. 5. 2. ドローンとは What is the Drone?
  6. 6. これです.
  7. 7. ドローンとは ■ ドローンはもともと無人航空機と言う意味。 ■ 遠隔操作できるマルチコプター(multicopter)が 普及し、それ自体がドローンと呼ばれることとなった。 ■ マルチコプターとは、3つ以上のローターを搭載した回転翼機。
  8. 8. 世界のドローンメーカー 中国(深圳) DJI 主な機体 Phantom, Inspire アメリカ 3DRobotics 主な機体 solo,IRIS フランス Parrot 主な機体 AR.Drone, Bebop Drone
  9. 9. 世界のドローンメーカー 世界3大メーカーが市場の8割を占める。
  10. 10. 滑走路を必要としない。 1ローターヘリコプターより 安定性がある。 構造がシンプル ドローンのメリット、デメリット(性能面) 下降時に不安定になる。 移動時に傾く (ブレードが固定角) ローター数が多いため 電力が必要になる。 メリット デメリット
  11. 11. 3. 目的 The purpose
  12. 12. 背景 ■ フライトコントローラはブラックボックス。 ■ ドローンはまだ発展途上であるガジェット。 ■ Python×ドローンの開発挑戦。 ■ 開発で苦労した内容を共有する。
  13. 13. 将来の目標 ■Pythonを使った飛行ロボットをつくること。 ■Pythonを使って ・救助ドローンを作る。 ・農業ドローンを作る。 ・攻殻機動隊みたいな義体を作る。
  14. 14. 目的の補足 ■農業用 (GoogleMAPなどと連携。指定した場所に農薬をまく) ■緊急時以外にプロポは使わない。
  15. 15. 4. PythonとドローンとRaspberry Pi Python, Drone, Raspberry pi
  16. 16. PythonとドローンとRaspberry pi ■ Pythonを選んだ経緯 ・科学系のプログラミング言語の選定。 ・MATLABもあるが有料でかなり高い。 ・Pythonであれば無料。 ・Pythonの名前響きが好き。 ・画像認識やディープラーニングなど応用して、 救助や生活に役立つドローン開発ができそう。
  17. 17. PythonとドローンとRaspberry Pi ■ Raspberry Pi選んだ経緯 Pythonが使える。 GPIOがついてる。 General-Purpose Input/Outputは、汎用入出力。 つまり、 慣性計測装置(IMU:Inertial Measurement Unit)が使える。
  18. 18. PythonとドローンとRaspberry Pi ■ Raspberry Pi選んだ経緯 GPIO ■ Pythonを使ってGPIOから信号を入出力ができる!
  19. 19. PythonとドローンとRaspberry Pi ■ ここのピンから信号を入出力させます。 ピンの配置
  20. 20. 5. フライトコントローラ Flight controller
  21. 21. フライトコントローラ ■ フライトコントローラとは プロポ(リモコン)からの信号を受信する受信機とつなげ、 ドローンを安定化させるもの
  22. 22. フライトコントローラ ■ どうしてフライトコントローラに注目したのか。 →ドローンを制御しようと調べていたら、 フライトコントローラーに行き着いた。 ■ Pythonとフライトコントローラ →Raspberry PiでPythonプログラミングすれば、 フライトコントローラーが作れるのでは? フライト コントローラ
  23. 23. フライトコントローラ ■ すでに発売されているフライトコントローラ。 Acro 6TAROT CC3D OPENPILOT 小川精機 OGY-661 ・自作ドローンでよく使われる。 ・安価だが海外製。 ・不良品もある。 ・PCなしで設定可能。 ・日本製。 ・生産終了。
  24. 24. フライトコントローラ ■ フライトコントローラに指示を出すには? 通常、ラジコンでサーボを制御するには PWM(Palse Width Moduration)が必要。
  25. 25. PWM (Palse Width Moduration) とは ■ 半導体を使った電力を制御する方式の1つ。 ■ ONとOFFの繰り返しスイッチングを行う信号。 ON OFF ■ PWM制御のオンの時間幅(デューティ)を周期的に 変化させることにより、LEDの明るさやロボットなどに 使われるサーボモータ駆動をコントロールできる。
  26. 26. フライトコントローラ ドローン フライト コントローラ 受信機 PWMでの制御していると 仮定し実験を進めたが、 わからない →要解析! ■ 通常のラジコンではこのような流れを持っている
  27. 27. フライトコントローラ ■ フライトコントローラをRaspberry Piに置き換える。 ドローン ブラシレス モーター フライト コントローラ PWMでモータを制御し 飛行させる。
  28. 28. フライトコントローラ ■ ブラシレスモータとは? ブラシレスモータ ブラシありモータ (従来のモーター)
  29. 29. フライトコントローラ ■ ブラシレスモーターを動かすには、 デューティー比を理解する。 デューティー比とは、ロボットやラジコンなどに使うサーボモータの角度制御に PWM制御をする際に、重要になる概念です。 通常、多くのサーボは50Hz(20ms)のPWM信号を受け取り、 その中のデューティー比が何%かによって角度を決めている。 デューティー比の式と図は次です。
  30. 30. フライトコントローラ ■ デューティー比
  31. 31. フライトコントローラ ■ デューティー比を使ったPythonのプログラムを 書いてみるよ。 import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(7,GPIO.OUT) p = GPIO.PWM(7,50) p.start(7.5) try: while True: p.ChangeDutyCycle(7.5) time.sleep(1)
  32. 32. import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(7,GPIO.OUT) p = GPIO.PWM(7,50) p.start(7.5) try: while True: p.ChangeDutyCycle(7.5) time.sleep(1) p.ChangeDutyCycle(12.5) time.sleep(1) p.ChangeDutyCycle(2.5) time.sleep(1) except KeyboardInterrupt: p.stop() GPIO.cleanup() Python code start.py このコードで モーターを回す 準備をさせます。 プロポで言う、 スロットルの 最大値、最小値の 信号を出します。
  33. 33. import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(7,GPIO.OUT) p = GPIO.PWM(7,50) p.start(7.5) try: while True: p.ChangeDutyCycle(10.5) time.sleep(1) print “go up” except KeyboardInterrupt: p.stop() GPIO.cleanup() Python code goup.py このコードで モーターを回します。
  34. 34. 6. 実践 Try
  35. 35. 実践 ■ この実験機のローターをPythonコードで回します。
  36. 36. 7. まとめ Result and summary
  37. 37. 実験の結果the result of the experiment
  38. 38. まとめ(結果) ■PythonとRaspberry Piを使い ブラシレスモーターを回せた! ■ブラックボックスであるフライトコントローラを 使わずに、飛ばせる可能性が見えた! ■Raspberry Piに期待が持てた!
  39. 39. まとめ(結果) ■モーター4つを各々で回せなかった。 ■フライトコントローラ解析に至らず。 本来では飛ばしたかった。 しかし失敗・苦労はしたが、様々な問題点がわかり、 それを次へ活かし進むことができました。 今回はPythonとドローン、そしてRaspberry Piを用いて どこまで発展ができるかを報告しました。 しかし、
  40. 40. まとめ <改善すべきこと> ■ モーターは動いたが、プログラムの精度を上げる必要。 ■ 各モーターを制御できるプログラムを作る。 ■ まずは安定して飛行できるようにすること。 ■ 安定化のため、各センサーの情報を取り入れる必要。 各センサー:角加速度、加速度、GPSなど
  41. 41. まとめ ドローン フライトコントローラ Python 人間
  42. 42. Thanks! Any questions? You can find me at @se_lina08 (Twitter) Facebook is lina.katayose E-mail is lina.katayose@gmail.com
  43. 43. https://youtu.be/ZiXm8yhDWxA Drone Movie (おまけ) 2月にドローンで撮影した映像です。

×