摘要: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) ............略