Successfully reported this slideshow.
國立臺灣大學電機工程學研究所
Embedded System Programming and Lab

Raspberry Pi Wi-Fi robot
Liger Games
郭羿呈
Lion741205@gmail.com
2013/11/...
【大綱】
• 摘要
• 實作方法
–
–
–
–
–
–
–
–
–

•
•
•
•

使用SSH
設定Static IP位址
控制Servo Motor
控制DC Motor
使用Raspberry Pi Camera
安裝LAMP到Ras...
【摘要】
• 動機
– Kickstarter上有好多有趣的機器人,乾脆自己
也來做一隻

• 目的
– 跑Linux的Raspberry Pi機器人
– 有簡單的機械手臂可以搬運小物品
– 有Camera可發展Computer Vision
...
【實作方法】
功能

硬體

無線控制

•

USB Wi-Fi Dongle

•
•

使用SSH
設定Static IP位址

機械手臂

•
•
•

Robotic Claw – MKII
Servo - Generic Metal...
【使用SSH】
• Secure Shell (SSH)為一項建立在應用層
和傳輸層基礎上的安全協定,為電腦上的
Shell提供安全的傳輸和使用環境
• 它允許你使用本地電腦的Command Line有
效地開啟Raspberry Pi的Ter...
開啟Raspberry Pi Sofeware
Configuration Tool
$ sudo raspi-config

6
啟用SSH

7
查詢IP位址
$ ipconfig

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

9
在Mac或Linux使用SSH
$ ssh 192.168.1.13 -l pi

10
Image source: http://learn.adafruit.com
【設定Static IP位址】
$ nano /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
ifa...
【控制Servo Motor】
• 須由不同長度的Pulse控制,這需要相當精
確的計時
• Servo約每20毫秒收到一個Pulse
• 每個Servo可旋轉角度不同,Continuous
Servo可旋轉360度
• Raspberry P...
由不同長度的Pulse控制Servo角度

0度

90度

180度

13
Image source: http://learn.adafruit.com
Servo Motor電路

14
Image source: http://learn.adafruit.com
ServoBlaster軟體
• 提供一個軟體介面透過GPIO去驅動多個
Servo
• 透過/dev/servoblaster,讓你發送Pulse寬
度的Command去控制個別的Servo
• 會維持Pulse寬度直到你傳送新的Pulse寬...
ServoBlaster Command Line格式
• <servo-number>=<servo-position>
• P<header>-<pin>=<servo-postion>
• <servo-position>是你想要的Pul...
ServoBlaster的Servo Mapping
Servo number
0
1
2
3
4
5

GPIO number
4
17
18
21/17(依Pi的版本而定)
22
23

Pin in P1 header
P1-7
P1-1...
【控制DC Motor】
• 使用Pulse Width Modulation(PWM)來
控制轉速
• 使用L293D馬達控制晶片去倒轉

18
Pulse Width Modulation(PWM)
• 是利用數位輸出來對類比電路進行控制的
技術
• 我們使用它來調節電量, 以控制Motor的
轉速

19
PWM訊號與馬達電量

20
Image source: http://learn.adafruit.com
L293D接法
接GPIO18(輸入PWM訊號)

接5V(供電給Chip)

接GPIO4
接Motor
接地

接Motor
接GPIO17
接6-12V(供電給Motor)

21
Image source: http://learn.a...
DC Motor電路

22
Image source: http://learn.adafruit.com
程式碼-設置腳位
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
MOT1 = 4
MOT2 = 17
MOTE = 18
GPIO.setup(MOTA1, GPIO.OUT)
GPIO.se...
程式碼-控制Motor
def motor(value):
if value > 0:
GPIO.output(MOT1, GPIO.HIGH)
GPIO.output(MOT2, GPIO.LOW)
MOTPWM.ChangeDutyCycl...
【使用Raspberry Pi Camera】
• 影像感測器: Omnivision 5647 sensor in a 
fixed-focus module
• 感測器像素: 5M Pixel sensor
• 止圖片解析度: 2592 ...
從Raspbian啟用Camera
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo raspi-config

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

• 拍照軟體
– Ras...
Command範例
• Capture an image in jpeg format:
$ raspistill -o image.jpg

• Capture a 5s video in h264 format:
$ raspivid -o...
【安裝LAMP到Raspberry Pi】
• LAMP是指一使用來建立動態網站的一組
開源軟體名稱首字母縮寫:
– Linux(作業系統)
– Apache(網頁伺服器)
– MySQL(資料庫)
– PHP(腳本語言)

29
LAMP安裝
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install apache2
$ sudo apt-get install mysql-server
$ s...
第一個PHP網頁程式
$ cd /var/www
$ sudo nano test.php
<?php
echo "Hello world";
?>

31
【穩壓電路】
• 用電池供電給Raspberry Pi(將6-12V調節
至5V )

32
Image source: http://openmicros.org/index.php/articles/94-ciseco-product-do...
【ATX式電源供應】
• ATX(Advanced Technology Extended)
是Intel在1995年制定的主機板規格
• 過往的AT電腦機箱,具有一個直接連到電
源供應器的電源開關
• ATX的電源供應器,並不直接連到電腦的電...
ATX式電源供應電路

34
Image source: http://www.boeeerb.co.uk/pitx-an-atx-style-solution-for-the-pi
ATX式電源供應程式碼
import RPi.GPIO as GPIO
import os
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO....
【使用PHP執行外部程式】
• 為了使用Web介面控制Raspberry Pi外部電
路,我們需要透過PHP執行Command Line
• 相關指令
– exec() 執行外部程式
– passthru() 執行外部程式並顯示原始輸出結果
–...
修改Apache執行權限
• 為了讓Apache以sudo執行程式,我們需要修
改www-data使用權限,使其不須輸入密碼
$sudo nano /etc/
⋯
#includedir /etc/sudoers.d
pi ALL=(ALL)...
PHP執行外部程式範例
<?php
exec("sudo python robot.py right 1");
exec("sudo python robot.py forward 5");
exec("sudo python robot.py...
【硬體整合】
• 控制板
– Raspberry Pi Model B

$40

• 攝影機
– Raspberry Pi Camera

$30

• Motor Shield
– RaspiRobot(壞了,改用MotorPiTX )
–...
RaspiRobot特點
• Dual Bi-directional Motor Control
• Voltage Regulator powers Raspberry Pi 
from Batteries (7-12V)
• 2 x Ope...
RaspiRobot 電路圖

41
MotorPiTX特點
• Control 2 DC brushed motors bi-directionally 
(forwards and backwards)
• Control 2 Hobby servos (standard 3 ...
組裝Robotic Claw - MKII

43
組裝Robotic Claw Pan/Tilt Bracket 
- MKII

44
組裝Magician Chassis

45
【軟體整合】
• home/pi/robot/
– robot.py 提供Command Line介面控制機器人

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

• etc/
...
【成品展示】
• https://www.youtube.com/watch?v=Fg8fYZM52FM

47
參考資料
•

ServoBlaster
– https://github.com/richardghirst/PiBits/tree/master/ServoBlaster

•

Raspberry Pi Camera
– http://w...
Upcoming SlideShare
Loading in …5
×

Raspberry Pi Wi-Fi robot

4,353 views

Published on

Published in: Technology
  • Be the first to comment

Raspberry Pi Wi-Fi robot

  1. 1. 國立臺灣大學電機工程學研究所 Embedded System Programming and Lab Raspberry Pi Wi-Fi robot Liger Games 郭羿呈 Lion741205@gmail.com 2013/11/7 1
  2. 2. 【大綱】 • 摘要 • 實作方法 – – – – – – – – – • • • • 使用SSH 設定Static IP位址 控制Servo Motor 控制DC Motor 使用Raspberry Pi Camera 安裝LAMP到Raspberry Pi 穩壓電路 ATX式電源供應 使用PHP執行外部程式 硬體整合 軟體整合 成品展示 參考資料 2
  3. 3. 【摘要】 • 動機 – Kickstarter上有好多有趣的機器人,乾脆自己 也來做一隻 • 目的 – 跑Linux的Raspberry Pi機器人 – 有簡單的機械手臂可以搬運小物品 – 有Camera可發展Computer Vision – 使用電池或行動電源供電 – 可用電腦和手機的瀏覽器無線控制 3
  4. 4. 【實作方法】 功能 硬體 無線控制 • 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(含DC Motor與 車輪) • 控制DC Motor 視覺 • Raspberry Pi Camera • 使用Raspberry Pi Camera • • 安裝LAMP到Raspberry Pi 使用PHP執行外部程式 Web控制介面 實作方法 電池供電 • • RaspiRobot或MotorPiTX 6xAA電池盒或行動電源 • 穩壓電路 使用按鈕開關機 • MotorPiTX • ATX式電源供應 Motion JPEG串流 • Raspberry Pi Camera • • 安裝LAMP到Raspberry Pi How to build and run MJPGStreamer on the Raspberry Pi(參 考資料)
  5. 5. 【使用SSH】 • Secure Shell (SSH)為一項建立在應用層 和傳輸層基礎上的安全協定,為電腦上的 Shell提供安全的傳輸和使用環境 • 它允許你使用本地電腦的Command Line有 效地開啟Raspberry Pi的Terminal session • 為什麼要用SSH? – 想要無縫使用Pi與PC – 你的專題可能不需要鍵盤、滑鼠和顯示器 – 使用一組鍵盤和滑鼠,可以保持桌面整潔 5
  6. 6. 開啟Raspberry Pi Sofeware Configuration Tool $ sudo raspi-config 6
  7. 7. 啟用SSH 7
  8. 8. 查詢IP位址 $ ipconfig 8
  9. 9. 在Windows使用SSH • 從http://www.putty.org下載、安裝並開啟 Putty,填入IP位置與Port後,按Open。 9
  10. 10. 在Mac或Linux使用SSH $ ssh 192.168.1.13 -l pi 10 Image source: http://learn.adafruit.com
  11. 11. 【設定Static IP位址】 $ nano /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet static address 192.168.0.200 netmask 255.255.255.0 gateway 192.168.0.1 wpa-ssid "YOUR-SSID-HERE" wpa-psk "YOUR-PASSWORD-HERE" 新增與修改 $ sudo reboot 11
  12. 12. 【控制Servo Motor】 • 須由不同長度的Pulse控制,這需要相當精 確的計時 • Servo約每20毫秒收到一個Pulse • 每個Servo可旋轉角度不同,Continuous Servo可旋轉360度 • Raspberry Pi的GPIO18可以產生精確的硬 體Pulse,其他GPIO可以產生軟體Pulse 12
  13. 13. 由不同長度的Pulse控制Servo角度 0度 90度 180度 13 Image source: http://learn.adafruit.com
  14. 14. Servo Motor電路 14 Image source: http://learn.adafruit.com
  15. 15. ServoBlaster軟體 • 提供一個軟體介面透過GPIO去驅動多個 Servo • 透過/dev/servoblaster,讓你發送Pulse寬 度的Command去控制個別的Servo • 會維持Pulse寬度直到你傳送新的Pulse寬度 Command 15
  16. 16. 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
  17. 17. ServoBlaster的Servo Mapping Servo number 0 1 2 3 4 5 GPIO number 4 17 18 21/17(依Pi的版本而定) 22 23 Pin in P1 header P1-7 P1-11 P1-12 P1-13 P1-15 P1-16 6 7 24 25 P1-18 P1-22 17
  18. 18. 【控制DC Motor】 • 使用Pulse Width Modulation(PWM)來 控制轉速 • 使用L293D馬達控制晶片去倒轉 18
  19. 19. Pulse Width Modulation(PWM) • 是利用數位輸出來對類比電路進行控制的 技術 • 我們使用它來調節電量, 以控制Motor的 轉速 19
  20. 20. PWM訊號與馬達電量 20 Image source: http://learn.adafruit.com
  21. 21. L293D接法 接GPIO18(輸入PWM訊號) 接5V(供電給Chip) 接GPIO4 接Motor 接地 接Motor 接GPIO17 接6-12V(供電給Motor) 21 Image source: http://learn.adafruit.com
  22. 22. DC Motor電路 22 Image source: http://learn.adafruit.com
  23. 23. 程式碼-設置腳位 import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) MOT1 = 4 MOT2 = 17 MOTE = 18 GPIO.setup(MOTA1, GPIO.OUT) GPIO.setup(MOTA2, GPIO.OUT) GPIO.setup(MOTAE, GPIO.OUT) MOTPWM = GPIO.PWM(MOTE,100) MOTPWM.start(0) 23
  24. 24. 程式碼-控制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
  25. 25. 【使用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
  26. 26. 從Raspbian啟用Camera $ sudo apt-get update $ sudo apt-get upgrade $ sudo raspi-config 26
  27. 27. Raspberry Pi Camera軟體 • 基於Command Line執行,通過OpenMAX的 mmal API進行編寫,可分為三個Componet: – Camera – Preview – Encoder • 拍照軟體 – Raspistill (使用Encoder) – Raspistillyuv (直接輸出YUV或RGB檔案) • 錄影軟體 – Raspivid (使用Encoder) 27
  28. 28. 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
  29. 29. 【安裝LAMP到Raspberry Pi】 • LAMP是指一使用來建立動態網站的一組 開源軟體名稱首字母縮寫: – Linux(作業系統) – Apache(網頁伺服器) – MySQL(資料庫) – PHP(腳本語言) 29
  30. 30. 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
  31. 31. 第一個PHP網頁程式 $ cd /var/www $ sudo nano test.php <?php echo "Hello world"; ?> 31
  32. 32. 【穩壓電路】 • 用電池供電給Raspberry Pi(將6-12V調節 至5V ) 32 Image source: http://openmicros.org/index.php/articles/94-ciseco-product-documentation/raspberry-pi
  33. 33. 【ATX式電源供應】 • ATX(Advanced Technology Extended) 是Intel在1995年制定的主機板規格 • 過往的AT電腦機箱,具有一個直接連到電 源供應器的電源開關 • ATX的電源供應器,並不直接連到電腦的電 源開關,因此電腦可以通過軟體關機 • Raspberry Pi為了降低成本,必須透過直接 拔電纜的方式移除電源,但某些專題可能 希望擁有ATX式電源開關 33
  34. 34. ATX式電源供應電路 34 Image source: http://www.boeeerb.co.uk/pitx-an-atx-style-solution-for-the-pi
  35. 35. ATX式電源供應程式碼 import RPi.GPIO as GPIO import os import 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
  36. 36. 【使用PHP執行外部程式】 • 為了使用Web介面控制Raspberry Pi外部電 路,我們需要透過PHP執行Command Line • 相關指令 – exec() 執行外部程式 – passthru() 執行外部程式並顯示原始輸出結果 – system() 執行外部程式並顯示輸出結果 36
  37. 37. 修改Apache執行權限 • 為了讓Apache以sudo執行程式,我們需要修 改www-data使用權限,使其不須輸入密碼 $sudo nano /etc/ ⋯ #includedir /etc/sudoers.d pi ALL=(ALL) NOPASSWD: ALL www-data ALL=(ALL) NOPASSWD: ALL 加入這行 37
  38. 38. PHP執行外部程式範例 <?php exec("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
  39. 39. 【硬體整合】 • 控制板 – Raspberry Pi Model B $40 • 攝影機 – Raspberry Pi Camera $30 • Motor Shield – RaspiRobot(壞了,改用MotorPiTX ) – MotorPiTX(含ATX式電源供應電路) $30 $40 • 車盤與馬達 – Magician Chassis $15 • 機械手臂 – Robotic Claw – MKII – Servo - Generic Metal Gear (Micro Size) – Robotic Claw Pan/Tilt Bracket $12 $30 $11 • 其他 – SD卡、USB Wi-Fi Dongle、杜邦線、螺絲、電池盒、行動電源等 $35 – 總共 US$213 39
  40. 40. 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
  41. 41. RaspiRobot 電路圖 41
  42. 42. 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
  43. 43. 組裝Robotic Claw - MKII 43
  44. 44. 組裝Robotic Claw Pan/Tilt Bracket  - MKII 44
  45. 45. 組裝Magician Chassis 45
  46. 46. 【軟體整合】 • 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
  47. 47. 【成品展示】 • https://www.youtube.com/watch?v=Fg8fYZM52FM 47
  48. 48. 參考資料 • 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-camerato-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-theraspberry-pi 48

×