raspberry pi wi-fi robot

48

Upload: yi-cheng-guo

Post on 16-Apr-2017

4.305 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Raspberry Pi Wi-Fi robot

Raspberry Pi Wi-Fi robot

Liger Games郭羿呈

[email protected]

2013/11/7

國立臺灣大學電機工程學研究所Embedded System Programming and Lab

1

Page 2: Raspberry Pi Wi-Fi robot

【大綱】• 摘要• 實作方法

– 使用SSH– 設定Static IP位址– 控制Servo Motor– 控制DC Motor– 使用Raspberry Pi Camera– 安裝LAMP到Raspberry Pi– 穩壓電路– ATX式電源供應– 使用PHP執行外部程式

• 硬體整合• 軟體整合• 成品展示• 參考資料

2

Page 3: Raspberry Pi Wi-Fi robot

【摘要】

• 動機– Kickstarter上有好多有趣的機器人,乾脆自己也來做一隻

• 目的–跑Linux的Raspberry Pi機器人–有簡單的機械手臂可以搬運小物品–有Camera可發展Computer Vision–使用電池或行動電源供電–可用電腦和手機的瀏覽器無線控制

3

Page 4: Raspberry Pi Wi-Fi robot

功能 硬體 實作方法

無線控制 • USB Wi-Fi Dongle • 使用SSH• 設定Static IP位址

機械手臂 • Robotic Claw –MKII• Servo - Generic Metal Gear• Robotic Claw Pan/Tilt Bracket

• 控制Servo Motor

車輪 • RaspiRobot或MotorPiTX• Magician Chassis(含DCMotor與

車輪)

• 控制DC Motor

視覺 • Raspberry Pi Camera • 使用Raspberry Pi Camera

Web控制介面 • 安裝LAMP到Raspberry Pi• 使用PHP執行外部程式

電池供電 • RaspiRobot或MotorPiTX• 6xAA電池盒或行動電源

• 穩壓電路

使用按鈕開關機 • MotorPiTX • ATX式電源供應

Motion JPEG串流 • Raspberry Pi Camera • 安裝LAMP到Raspberry Pi• How to build and run MJPG-

Streamer on the Raspberry Pi(參考資料)

【實作方法】

Page 5: Raspberry Pi Wi-Fi robot

【使用SSH】

• Secure Shell (SSH)為一項建立在應用層和傳輸層基礎上的安全協定,為電腦上的Shell提供安全的傳輸和使用環境

• 它允許你使用本地電腦的Command Line有效地開啟Raspberry Pi的Terminal session

• 為什麼要用SSH?–想要無縫使用Pi與PC–你的專題可能不需要鍵盤、滑鼠和顯示器–使用一組鍵盤和滑鼠,可以保持桌面整潔

5

Page 6: Raspberry Pi Wi-Fi robot

開啟Raspberry Pi SofewareConfiguration Tool

$ sudo raspi-config

6

Page 7: Raspberry Pi Wi-Fi robot

啟用SSH

7

Page 8: Raspberry Pi Wi-Fi robot

查詢IP位址

$ ipconfig

8

Page 9: Raspberry Pi Wi-Fi robot

在Windows使用SSH• 從http://www.putty.org下載、安裝並開啟Putty,填入IP位置與Port後,按Open。

9

Page 10: Raspberry Pi Wi-Fi robot

在Mac或Linux使用SSH

$ ssh 192.168.1.13 -l pi

Image source: http://learn.adafruit.com10

Page 11: Raspberry Pi Wi-Fi robot

【設定Static IP位址】$nano /etc/network/interfaces

auto loiface lo inet loopbackiface eth0 inet dhcp

allow-hotplug wlan0iface wlan0 inet staticaddress 192.168.0.200netmask 255.255.255.0gateway 192.168.0.1wpa-ssid "YOUR-SSID-HERE"wpa-psk "YOUR-PASSWORD-HERE"

$ sudo reboot

新增與修改

11

Page 12: Raspberry Pi Wi-Fi robot

【控制Servo Motor】

• 須由不同長度的Pulse控制,這需要相當精確的計時

• Servo約每20毫秒收到一個Pulse• 每個Servo可旋轉角度不同,ContinuousServo可旋轉360度

• Raspberry Pi的GPIO18可以產生精確的硬體Pulse,其他GPIO可以產生軟體Pulse

12

Page 13: Raspberry Pi Wi-Fi robot

由不同長度的Pulse控制Servo角度

0度 90度 180度

Image source: http://learn.adafruit.com13

Page 14: Raspberry Pi Wi-Fi robot

Servo Motor電路

Image source: http://learn.adafruit.com14

Page 15: Raspberry Pi Wi-Fi robot

ServoBlaster軟體

• 提供一個軟體介面透過GPIO去驅動多個Servo

• 透過/dev/servoblaster,讓你發送Pulse寬度的Command去控制個別的Servo

• 會維持Pulse寬度直到你傳送新的Pulse寬度Command

15

Page 16: Raspberry Pi Wi-Fi robot

ServoBlaster Command Line格式

• <servo-number>=<servo-position>• P<header>-<pin>=<servo-postion>• <servo-position>是你想要的Pulse寬度(單位是10us)

• 舉個例子– echo 3=120 > /dev/servoblaster– echo P1-12=120 > /dev/servoblaster

16

Page 17: Raspberry Pi Wi-Fi robot

ServoBlaster的Servo Mapping

Servo number GPIO number Pin in P1 header0 4 P1-71 17 P1-112 18 P1-123 21/17(依Pi的版本而定) P1-134 22 P1-155 23 P1-166 24 P1-187 25 P1-22

17

Page 18: Raspberry Pi Wi-Fi robot

【控制DC Motor】

• 使用Pulse Width Modulation(PWM)來控制轉速

• 使用L293D馬達控制晶片去倒轉

18

Page 19: Raspberry Pi Wi-Fi robot

Pulse Width Modulation(PWM)

• 是利用數位輸出來對類比電路進行控制的技術

• 我們使用它來調節電量,以控制Motor的轉速

19

Page 20: Raspberry Pi Wi-Fi robot

PWM訊號與馬達電量

Image source: http://learn.adafruit.com20

Page 21: Raspberry Pi Wi-Fi robot

L293D接法

Image source: http://learn.adafruit.com

接5V(供電給Chip)

接6-12V(供電給Motor)

接Motor

接Motor

接GPIO4

接GPIO17

接GPIO18(輸入PWM訊號)

接地

21

Page 22: Raspberry Pi Wi-Fi robot

DC Motor電路

Image source: http://learn.adafruit.com22

Page 23: Raspberry Pi Wi-Fi robot

程式碼-設置腳位import RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)MOT1 = 4MOT2 = 17MOTE = 18GPIO.setup(MOTA1, GPIO.OUT)GPIO.setup(MOTA2, GPIO.OUT)GPIO.setup(MOTAE, GPIO.OUT)

MOTPWM = GPIO.PWM(MOTE,100)MOTPWM.start(0)

23

Page 24: Raspberry Pi Wi-Fi robot

程式碼-控制Motor

def motor(value):if value > 0:

GPIO.output(MOT1, GPIO.HIGH)GPIO.output(MOT2, GPIO.LOW)MOTPWM.ChangeDutyCycle(value)

elif value < 0:GPIO.output(MOT1, GPIO.LOW)GPIO.output(MOT2, GPIO.HIGH)MOTPWM.ChangeDutyCycle(abs(value))

else:GPIO.output(MOT1, GPIO.LOW)GPIO.output(MOT2, GPIO.LOW)MOTPWM.ChangeDutyCycle(0)

24

Page 25: Raspberry Pi Wi-Fi robot

【使用Raspberry Pi Camera】

• 影像感測器: Omnivision 5647 sensor in a fixed-focus module

• 感測器像素: 5M Pixel sensor• 止圖片解析度: 2592 x 1944• 最大影片解析度: 1080p• 最大攝影速度: 30fps• 尺寸: 20 x 25 x10 mm• 排線長: 150 mm

25

Page 26: Raspberry Pi Wi-Fi robot

從Raspbian啟用Camera$ sudo apt-get update$ sudo apt-get upgrade$ sudo raspi-config

26

Page 27: Raspberry Pi Wi-Fi robot

Raspberry Pi Camera軟體

• 基於Command Line執行,通過OpenMAX的mmal API進行編寫,可分為三個Componet:– Camera– Preview– Encoder

• 拍照軟體– Raspistill (使用Encoder)– Raspistillyuv (直接輸出YUV或RGB檔案)

• 錄影軟體– Raspivid (使用Encoder)

27

Page 28: Raspberry Pi Wi-Fi robot

Command範例• Capture an image in jpeg format:

$ raspistill -o image.jpg• Capture a 5s video in h264 format:

$ raspivid -o video.h264• Capture a 10s video:

$ raspivid -o video.h264 -t 10000• Capture a 10s video in demo mode:

$ raspivid -o video.h264 -t 10000 -d• To see a list of possible options for running raspivid or raspistill, you can run:$ raspivid | less$ raspistill | less

28

Page 29: Raspberry Pi Wi-Fi robot

【安裝LAMP到Raspberry Pi】

• LAMP是指一使用來建立動態網站的一組開源軟體名稱首字母縮寫:– Linux(作業系統)– Apache(網頁伺服器)–MySQL(資料庫)– PHP(腳本語言)

29

Page 30: Raspberry Pi Wi-Fi robot

LAMP安裝

$ sudo apt-get update$ sudo apt-get upgrade$ sudo apt-get install apache2$ sudo apt-get install mysql-server$ sudo apt-get install php5$ sudo apt-get install php5-mysql$ sudo reboot

30

Page 31: Raspberry Pi Wi-Fi robot

第一個PHP網頁程式

$ cd /var/www$ sudo nano test.php

<?phpecho "Hello world";?>

31

Page 32: Raspberry Pi Wi-Fi robot

【穩壓電路】

• 用電池供電給Raspberry Pi(將6-12V調節至5V )

Image source: http://openmicros.org/index.php/articles/94-ciseco-product-documentation/raspberry-pi32

Page 33: Raspberry Pi Wi-Fi robot

【ATX式電源供應】

• ATX(Advanced Technology Extended)是Intel在1995年制定的主機板規格

• 過往的AT電腦機箱,具有一個直接連到電源供應器的電源開關

• ATX的電源供應器,並不直接連到電腦的電源開關,因此電腦可以通過軟體關機

• Raspberry Pi為了降低成本,必須透過直接拔電纜的方式移除電源,但某些專題可能希望擁有ATX式電源開關

33

Page 34: Raspberry Pi Wi-Fi robot

ATX式電源供應電路

Image source: http://www.boeeerb.co.uk/pitx-an-atx-style-solution-for-the-pi34

Page 35: Raspberry Pi Wi-Fi robot

ATX式電源供應程式碼import RPi.GPIO as GPIOimport osimport time

GPIO.setmode(GPIO.BCM)GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)GPIO.setup(7, GPIO.OUT)GPIO.output(7, GPIO.HIGH) # Turn ready light on

while True:print GPIO.input(8)if(GPIO.input(8) == 1):print("Request from button to shutdown")os.system("sudo shutdown -h now")GPIO.cleanup()break

time.sleep(1)

35

Page 36: Raspberry Pi Wi-Fi robot

【使用PHP執行外部程式】

• 為了使用Web介面控制Raspberry Pi外部電路,我們需要透過PHP執行Command Line

• 相關指令– exec() 執行外部程式– passthru() 執行外部程式並顯示原始輸出結果– system() 執行外部程式並顯示輸出結果

36

Page 37: Raspberry Pi Wi-Fi robot

修改Apache執行權限

• 為了讓Apache以sudo執行程式,我們需要修改www-data使用權限,使其不須輸入密碼

$sudo nano /etc/

⋯#includedir /etc/sudoers.dpi ALL=(ALL) NOPASSWD: ALLwww-data ALL=(ALL) NOPASSWD: ALL

加入這行37

Page 38: Raspberry Pi Wi-Fi robot

PHP執行外部程式範例

<?phpexec("sudo python robot.py right 1");exec("sudo python robot.py forward 5");exec("sudo python robot.py claw 180");exec("sudo python robot.py arm 90");exec("sudo python robot.py claw 1");>

38

Page 39: Raspberry Pi Wi-Fi robot

【硬體整合】• 控制板

– Raspberry Pi Model B $40• 攝影機

– Raspberry Pi Camera $30• Motor Shield

– RaspiRobot(壞了,改用MotorPiTX) $30– MotorPiTX(含ATX式電源供應電路) $40

• 車盤與馬達– Magician Chassis $15

• 機械手臂– Robotic Claw –MKII $12– Servo - Generic Metal Gear (Micro Size) $30– Robotic Claw Pan/Tilt Bracket $11

• 其他– SD卡、USBWi-Fi Dongle、杜邦線、螺絲、電池盒、行動電源等 $35

– 總共 US$21339

Page 40: Raspberry Pi Wi-Fi robot

RaspiRobot特點

• Dual Bi-directional Motor Control• Voltage Regulator powers Raspberry Pi from Batteries (7-12V)

• 2 x Open collector outputs (25mA)• 2 x LEDs• 2 x Switch inputs• 5V Serial connector• 3.3V I2C connector

40

Page 41: Raspberry Pi Wi-Fi robot

RaspiRobot電路圖

41

Page 42: Raspberry Pi Wi-Fi robot

MotorPiTX特點• Control 2 DC brushed motors bi-directionally (forwards and backwards)

• Control 2 Hobby servos (standard 3 wire digital connector)

• Takes 6-9v input via 2.1mm barrel connector (12v capable with additional heatsink)

• ATX style power control via micro USB• 2x 5v outputs• 2x 3v3 inputs• i2c breakout pins• Header breakout for external power button and LED

42

Page 43: Raspberry Pi Wi-Fi robot

組裝Robotic Claw - MKII

43

Page 44: Raspberry Pi Wi-Fi robot

組裝Robotic Claw Pan/Tilt Bracket - MKII

44

Page 45: Raspberry Pi Wi-Fi robot

組裝Magician Chassis

45

Page 46: Raspberry Pi Wi-Fi robot

【軟體整合】• home/pi/robot/

– robot.py 提供Command Line介面控制機器人• var/www/

– robot.php提供基於AJAX的Web介面控制機器人,並播放MJPEG串流

• etc/– shutdown.py提供ATX式關機– servod是ServoBlaster Daemon,提供一個軟體介面透過GPIO去

驅動多個Servo– mjpg-streamer/⋯ 輸出Motion JPEG串流,並提供IP位址讓瀏覽

器讀取(mjpg-streamer設定較繁瑣,請看參考資料)• etc/init.d/

– shutdown.sh執行shutdown.py和servod– mjpgstreamer.sh讓raspistill定時拍照,並執行mjpg-streamer

46

Page 47: Raspberry Pi Wi-Fi robot

【成品展示】

• https://www.youtube.com/watch?v=Fg8fYZM52FM

47

Page 48: Raspberry Pi Wi-Fi robot

參考資料• ServoBlaster

– https://github.com/richardghirst/PiBits/tree/master/ServoBlaster• Raspberry Pi Camera

– http://www.raspberrypi.org/camera• MotorPiTX

– http://www.boeeerb.co.uk/motorpitx/• Raspirobot

– https://github.com/simonmonk/raspirobotboard/wiki• Learn Raspberry Pi

– http://learn.adafruit.com/category/learn-raspberry-pi• Sparkfun Tutorials

– https://learn.sparkfun.com/tutorials• Stream Video from the Raspberry Pi Camera to Web Browsers

– http://blog.miguelgrinberg.com/post/stream-video-from-the-raspberry-pi-camera-to-web-browsers-even-on-ios-and-android

• How to build and run MJPG-Streamer on the Raspberry Pi– http://blog.miguelgrinberg.com/post/how-to-build-and-run-mjpg-streamer-on-the-

raspberry-pi

48