RAPIRO - Raspberry Pi機器小女僕(2)使用wii藍芽控制

摘要:RAPIRO - Raspberry Pi機器小女僕(2)使用wii藍芽控制

終於要幫Rapiro這隻小機器人加上Raspberry pi版了
(Raspberry pi是個像信用卡大小般的小Linux)
 
因為是Linux,所以基本上他可以有很多的變化
這次就拿是來當Rapiro的頭腦
 
如照片,接上Rapiro然後鎖上機器人的外殼~
就可以讓Rapiro脫離束縛,過著自由的生活了(廣告詞嗎XD~)
 
 
Raspberry pi相關設定可以參考之前的2篇(無線網路的設定、藍芽的設定)
 
Raspberry pi 記錄1-安裝Raspberry pi 
http://goo.gl/8FsD6p
 
Raspberry pi 記錄2-設定wifi、藍芽 
http://goo.gl/wcRIIY
 
這次整個規劃執行的流程大約如下
1.設定好raspberry pi無線網路、藍芽
2.整合Raspberry pi和wii remote
(安迪兒以前因為好玩有拿來控制pi版上的xbmc,當家庭劇院撥放電影用)
 
附上安迪兒以前記下的連結,可以參考一下
http://www.raspberrypi-spy.co.uk/2013/02/nintendo-wii-remote-python-and-the-raspberry-pi/
 
在配對完wii和raspberry pi的藍芽之後 可以去捉wii_remote_1.py
 
To download this script directly to your Pi you can type :
 
可以拿這隻來當參考XD~~~
http://www.raspberrypi-spy.co.uk/archive/python/wii_remote_1.py
 
 
3.整合Raspberry pi呼叫Arduino方式
因為不太可能一直開著電腦上的Arduino IDE和一直和Rapiro連線去呼叫機器人
 
所以這邊有2種作法
一種用consol命令列mincom的方式下指令
一種是視開發程式不同使用相關的library(像http://cylonjs.com) 
 
這邊介紹第一種作法,因為他最萬用XD~
 
利用mincom去對機器人傳指令
mincon蠻方便的,安迪兒也是mac直接有安裝,不用每次都開Arduino 的IDE來測試
(要加指令時再用Arduino IDE 編寫)
 
首先我們先連進機器人的Raspberry pi裡面
ssh pi@192.xx.xx.xx
輸入密碼登入後
 
在consol下,安裝minicom
sudo apt-get install minicom  
 
裝完後,測試一下,看之前編寫好的M6有沒反應,ok的話就快成功了
echo "#M6" | sudo minicom -b 57600 -o -D /dev/ttyAMA0  
 
4.再來是用wii remote讓Raspberry pi去控制我們的小鋼彈了
 安迪兒是拿PS3的控制來改的(去翻到的code)
 http://www.kiluck.co.jp/rapiro/rapiro_ps3.py
 
後來Rapiro的官網好像有放上
http://www.rapiro.com/downloads/
Sony Dualshock 3 gamepad to work in Raspberry Pi (Sony Dualshock 3)
 
download下這隻python code之後(rapiro_ps3.py)
再加之前wii和raspberry pi的code(wii_remote_1.py)
 
大家就知道了~改寫一下就達到我們的願望~用wii 控制Rapiro了
XD~~~
 
改完後,ssh連進機器人
下個sudo python rapiro1.py
就可以用wii remote去玩玩看了
收工嘍~~收工嘍
 
實際影片:
 
 
程式:
import cwiid
import time
import serial
com = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10)
button_delay = 0.5

print 'Press 1 + 2 on your Wii Remote now ...'
time.sleep(1)

# Connect to the Wii Remote. If it times out
# then quit.
try:
  wii=cwiid.Wiimote()
except RuntimeError:
  print "Error opening wiimote connection"
  quit()

print 'Wii Remote connected...\n'
print 'Press some buttons!\n'
print 'Press PLUS and MINUS together to disconnect and quit.\n'

wii.rpt_mode = cwiid.RPT_BTN
 
while True:

  buttons = wii.state['buttons']

  # If Plus and Minus buttons pressed
  # together then rumble and quit.
  if (buttons - cwiid.BTN_PLUS - cwiid.BTN_MINUS == 0):  
    print '\nClosing connection ...'
    wii.rumble = 1
    time.sleep(1)
    wii.rumble = 0
    exit(wii)  
    
  if (buttons & cwiid.BTN_1):
    print 'Green pressed'
    com.write("#M5") # Green
    time.sleep(button_delay)       
............略