Slide 1

Slide 1 text

驢車 (Donkey Car) - 基於 Raspberry Pi 與機器學習 的自走車專案介紹 台灣樹莓派 2019/09/20 @PyCon2019

Slide 2

Slide 2 text

姓名標示 — 非商業性 — 相同方式分享 CC (Creative Commons) 姓名標示 — 你必須給予 適當表彰、提供指向本授權 條款的連結,以及 指出(本作品的原始版本)是否已 被變更。你可以任何合理方式為前述表彰,但不得以 任何方式暗示授權人為你或你的使用方式背書。 非商業性 — 你不得將本素材進行商業目的之使 用。 相同方式分享 — 若你重混、轉換本素材,或依本 素材建立新素材,你必須依本素材的授權條款來 散布你的貢獻物。

Slide 3

Slide 3 text

3 ● Raspberry Pi 官方經銷商 ● 專注 Raspberry Pi 應用與推廣 , 舉辦社群活動 關於我們

Slide 4

Slide 4 text

4 ● COSCUP , MakerConf, PyCon, HKOSCon 講者 ● 投影片 ● https://speakerdeck.com/piepie_tw ● 程式碼 ● https://github.com/piepie-tw 分享 x 教學

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

6 ● 什麼是 Donkey Car? ● 所需硬體 ● 軟體架構 ● 使用機器學習打造自動駕駛系統 ● Hack Donkey Car ● 學習資源 本次主題

Slide 7

Slide 7 text

7 什麼是 Donkey Car?

Slide 8

Slide 8 text

https://www.meetup.com/DIYRobocars/events/234581265/ 從 DIY Robocars 辦的聚會開始

Slide 9

Slide 9 text

https://www.infoq.com/presentations/donkey-car/

Slide 10

Slide 10 text

ML 接近人類的開車行為 https://diyrobocars.com/2017/04/06/zero-to-autonomous/

Slide 11

Slide 11 text

● 以遙控車 (RC Car) 為載體 ● 在樹莓派 (Raspberry Pi) 做運算與控制 ● 使用 Python 開發 ● 根據神經網路 (Neural Network) 建立自走模型 Donkey Car - 基於 Raspberry Pi 與機器學習的開源自走車平台 https://www.donkeycar.com/

Slide 12

Slide 12 text

目標 https://qconsf.com/sf2017/system/files/presentation-slides/q-con_donkeycar_presentation.pdf

Slide 13

Slide 13 text

Donkey Car 所需硬體 HSP 原廠 RC 搖桿 HSP 94186 1/16 有刷馬達遙控車 杜邦線 螺絲包 3D 列印車架 + 把手 魚眼相機 2.4GHz 搖桿 Pi 3B+ 馬達驅動板 電源線 專用鋰電池 SD 卡 轉接頭

Slide 14

Slide 14 text

1/16 HSP(HiSPeed) RC Car https://www.aliexpress.com/item/32380689708.html

Slide 15

Slide 15 text

動力系統架構 https://hobbyking.com/en_us/news/brushed-brushless-electronic-speed-controllers-work 2.4GHz 接收器 有刷直流馬達 電子變速器 (ESC)

Slide 16

Slide 16 text

● 將控制訊號轉為馬達用電壓 , 以控制馬達轉速 ESC 用來控制馬達轉速 ( 油門 ) https://synthiam.com/Community/Questions/How-to-use-Rc-esc-as-motor-controller-7045

Slide 17

Slide 17 text

Raspberry Pi 3B+ 硬體規格與特色 內建 WiFi 和 BT 可接相機模組 GPIO 控制腳位 http://bit.ly/2IYFuP2

Slide 18

Slide 18 text

18 支援超過 40 種 OS http://en.wikipedia.org/wiki/Raspberry_Pi

Slide 19

Slide 19 text

硬體架構 image PWM I2C PWM ESC Servo Camera PCA9685 Steering Throttle Pi 3B+

Slide 20

Slide 20 text

控制理論 Take picture Get user input Get model prediction Update servo Update motor Save data Perception Planning Control Data collection

Slide 21

Slide 21 text

軟體架構 Take picture Get user input Get model prediction Update servo Update motor Save data vehicle state Camera

Slide 22

Slide 22 text

軟體架構 Take picture Get user input Get model prediction Update servo Update motor Save data vehicle state Browser Tornado

Slide 23

Slide 23 text

軟體架構 Take picture Get model prediction Update servo Update motor Save data Neural Network Get user input vehicle state

Slide 24

Slide 24 text

軟體架構 Take picture Get model prediction Update servo Update motor Save data Get user input vehicle state ESC Servo PWM Value PWM Value PWM Signal PWM Signal Throttle Steering

Slide 25

Slide 25 text

軟體架構 Take picture Get model prediction Update servo Update motor Save data Get user input vehicle state {"user/angle": -0.300000004, "cam/image_array": "160_cam-image_array_.jpg", "milliseconds": 12413, "user/throttle": 0.2, "user/mode": "user"} .json .jpg

Slide 26

Slide 26 text

26 使用機器學習打造自動駕駛系統

Slide 27

Slide 27 text

Test Pilot Train Pilot Collect Data

Slide 28

Slide 28 text

建立車道

Slide 29

Slide 29 text

● 使用瀏覽器或是搖桿控制 讓你的 Donkey Car 跑起來

Slide 30

Slide 30 text

● 左三圈 + 右三圈 , 至少 5000 張照片 蒐集訓練資料 http://www.sroboto.com/2017/08/donkeycar-2-install-setup-and-run.html

Slide 31

Slide 31 text

清理資料

Slide 32

Slide 32 text

用 Keras/Tensorflow 訓練自動駕駛

Slide 33

Slide 33 text

神經網路模型

Slide 34

Slide 34 text

● Loop: 蒐集資料 , 訓練資料 , 測試驗證步驟 實際測試驗證

Slide 35

Slide 35 text

35 DEMO

Slide 36

Slide 36 text

36 Hack Donkey Car

Slide 37

Slide 37 text

在 Duckiebot 跑 Donkey Car http://duckietown.org/

Slide 38

Slide 38 text

class Adafruit_DCMotor_Hat: def __init__(self, metaclass=Singleton): self.mh = Adafruit_MotorHAT(addr=0x60) self.mhM1 = self.mh.getMotor(1) self.mhM2 = self.mh.getMotor(2) def run(self, speed): self.motor.setSpeed(self.throttle) self.throttle = int(dk.utils.map_range(abs(speed), -1, 1, -255, 255)) def set_pulse(self, pulse): self.pulse = pulse def set_speed(self, speed): if self.pulse > 0: self.mhM2.setSpeed(speed) elif self.pulse < 0: self.mhM1.setSpeed(speed) 修改 actuator.py

Slide 39

Slide 39 text

Donkey Car vs. Duckietown Donkey Car Duckietown 專案開始 2016 年底 2015 年底 發源地 DIY Robocars( 美國西岸 ) MIT( 美國東岸 ) 口號 小型車的開源 DIY 自駕平台 學習機器人的有趣方式 技術核心 基於機器學習 (ML) 基於機器人視覺加控制理論 特色 文件清楚 / 快速上手 從理論到實做 / 分支多 / 文件多 使用者 有興趣的玩家 學校 硬體 Pi/Jetson Nano + RC Car Pi + 雙輪直流馬達小車 軟體 Raspbian + Python + Keras/Tensorflow Ubuntu + ROS + Python + OpenCV 造價 USD$250 USD$150 commit 數 15xx 59xx 難度 *** *****

Slide 40

Slide 40 text

● Donkey Car 官網文件 ● https://docs.donkeycar.com/ ● Donkey Car 程式碼 ● https://github.com/autorope/donkeycar ● Donkey Car Slack ● https://donkeycar.slack.com ● 組裝教學與經驗分享 ● https://medium.com/ljlstyle/tagged/autonomous-cars 學習資源

Slide 41

Slide 41 text

Donkey Car 車聚 (@Fablab)

Slide 42

Slide 42 text

Donkey Car 工作坊

Slide 43

Slide 43 text

● 1. 因為驢是最早被豢養的動物 ● 2. 驢對小孩很安全 ● 3. 牠們偶而不遵循主人的命令 ● 4. 大家對驢子的期望不會太高 FAQ: 為什麼取名 Donkey( 驢 )? https://www.donkeycar.com/faq

Slide 44

Slide 44 text

Raspberry Pi Rocks the World Thanks