Tag Archives: robot

Lamobo M1輪型機器人應用教學-遙控車硬體組裝

先前我們介紹過的 Banana Pi (現更名為 Lamobo 樂瑪),由於 GPIO 腳位與 Raspberry Pi 有一點不一樣,因此無法直接用 Rpi 的概念來製作機器人。現在官方推出了製作文件,按圖施工保證成功,一起來看看吧。

需要的零件有 (文件中有註明購買來源,或是找我們買也可以啦):

1. LAMOBO M1 單板電腦一片

2. Arduino Mini Robot Chassis BB 機器人底盤 (或類似的雙馬達底盤也可以)

3. L298N DC 馬達驅動模組

4. 工具、線材、螺絲 

文件下載點:http://pan.baidu.com/s/1i3eMnNB

未命名   

最後是 demo 影片

[2014 7月號 Robocon雜誌專欄]輕鬆使用Android 裝置控制樂高機器人:超音波感測器掃描雷達圖

2014年7月號的Robocon雜誌專欄是:超音波感測器掃描雷達圖。本期專題是延伸自2014 年3 月號的〈機器人感測器結合Google 雲端圖表〉,會讓感測器砲塔進行一次掃描後,以雷達圖的方式來呈現資料。有接觸過App Inventor 的師長朋友們,歡迎從App Inventor 中文學習網下載原始碼回去加入更多有趣的功能。

泛科學文章連結:http://pansci.tw/archives/62019

請注意本範例需用到網路連線,請確認您的手機是使用Wifi 或3G行動網路來連上網路, 否則將無法顯示Google 雲端圖表。

超音波感測器砲塔

NXT 超音波感測器是一種I2C 數位感測器,它能讓機器人「看到」物體並在撞上去之前避開,這是觸碰感測器所辦不到的。超音波感測器會發出一連串的超音波,並記錄超音波被物體反射後所需要的時間,再轉換成距離回傳給NXT。請注意:超音波感測器的預設單位是公分。實際使用時,超音波感測器可測到的最短距離約為5 公分,最遠距離約為220 公分。

請將馬達組裝在NXT 主機側面,並超音波感測器安裝在馬達上,當馬達轉動時,超音波感測器也會隨著馬達掃視水平面。在App Inventor 中, 我們使用NxtUltrasonicSensor 元件的GetDistance 指令來取得超音波感測器值(圖1)。

002

開始玩機器人

範例的機器人只要將一個超音波感測器接在NXT 主機的4 號輸入端,再將馬達接在輸出端B 即可。請確認NXT 主機的藍牙已啟動,接著將NXT主機與Android 手機進行藍牙配對(註2),完成之後就可以把機器人放到一邊了。啟動藍牙之後,您可以從NXT主機的螢幕左上角看到藍牙的符號。

接下來依序介紹程式的各個功能:

STEP1 登入畫面:

首次進入程式的畫面如圖2a, 這時只有「連線」按鈕可以按,其它所有按鈕都無法操作。點選「連線」按鈕後進入藍牙裝置清單(圖2b),請找到剛剛配對完成的NXT 主機名稱(本範例為abc), 點選之後就會由Android 裝置對NXT 主機發起藍牙連線。順利連線成功的話,「連線」按鈕會變成不可按的狀態,其他按鈕則都可按(圖2c)。

2abc

STEP2 程式初始化:

在點選連線清單之前(ListPickerConnect 的BeforePicking 事件),需先將清單內容指定為Android 裝置上的藍牙配對清單(圖3a)。點選之後則先測試連線是否成功,成功則將「連線」設為不可點選,「開始記錄」、「位置歸零」與「斷線」等按鈕設為可點選(圖3b)。

005a

005b

STEP3 開始掃描:

每當我們點擊一次「開始記錄」按鈕時, 就會讓B 馬達轉動2cm , 這是根據預設輪胎直徑計算出的距離,在此是一個經驗值,您可能需要根據實際狀況來調整這個參數。接著將超音波感測器當下的數值搭配一個半形逗號組合到sensorValue 這個字串中。count 變數是用來計算一共記錄了幾筆資料,累計到五筆資料之後,count 變數值會設定為1 ,代表要重新開始記錄新的五筆資料(圖4a)。

006a

接著「產生圖表」這個按鈕會變為可按。您可以調整count 變數值來修改在圖表中所要呈現的資料筆數。每次掃描完之後,您可以點選「位置歸零」按鈕, 讓B 馬達反向轉動10cm以回到原來的位置(圖4b)。

006b

在此難免會有轉過頭或不足的狀況發生,這時可用手把砲塔對正。

STEP4 按鈕取得Google雲端圖表:

Google Chart 雲端圖表讓我們可用超連結的方式來取得各式圖表。以本範例來說,我們只要將五筆超音波感測器值組合到chart 字串變數的後方,再由WebViewer 元件去取得這個超連結就可以了。說穿了就是去操弄這個字串,就能取得我們所需要的圖表。

讓我們來看看chart 這個字串中的一些重要參數(圖5a):

  • http: //chart.googleapis.com/chart?
  • chs=320×320:圖片尺寸為320 x320像素。
  • cht=r:圖表類型為雷達圖(radar)。
  • chm=s ,CC3366,0, -1,12,0| s ,FFFFFF,0,-1,8,0:以紅色空心方格來呈現資料點。
  • chls=4:兩點之間連線的粗細。
  • chxt=y,x:以同心圓方式顯示格線。
  • chxp=0,0,30,60,90,120:格線之間的數值距離。
  • chd=t : : 圖表資料, 我們就是把sensorValue這個變數組合在chart變數之後來組成一個完整的超連結。每筆資料之間需使用半形逗號隔開。按下「產生圖表」按鈕,會先把sensorValue最後一個字元(就是半形逗號)刪除,接著使用WebViewer.GoToUrl來載入chart與sensorValue兩者所組合成的超連結,在此就會順利載入圖表了。為了讓下次也能順利執行,最後要把sensorValue內容清空(圖5b)。

圖6a

圖6b

STEP5 斷線:

按下「斷線」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使畫面上的各個元件恢復到程式一開始時的狀態(圖6)。

008

操作

實際執行的時候,請先確認NXT 已經開機且藍牙也啟動了。接著在您的Android 裝置上點選畫面中的「連線」按鈕,會進到如圖3b 的藍牙清單畫面,點選您所要的NXT 主機名稱並連線成功後,就能點選「開始記錄」按鈕來取得超音波感測器值,每次點選都會將數值顯示在標題列上,如下圖紅框。點選五次之後才能點選「產生圖表」按鈕(圖7a),這時就可以看到精美的雷達圖了(圖7b、7c)。操作一次之後,請點選「位置歸零」按鈕,讓砲塔回到初始位置。

請注意:您的手機需要有網路連線,否則無法取得Google Chart 雲端圖表。

7abc

本期專欄介紹了如何製作一個感測器值砲塔, 並結合Google 雲端圖表來產生漂亮的雷達圖。請參考GoogleChart API 的官方網站來看看更多有趣的圖表範例,也請繼續關注CAVE的機器人專欄!

本程式已上架Google play,請到Google Play搜尋「CAVEDU教育團隊」就找得到我們的樂高機器人系列app了。歡迎大家到App Inventor 中文學習網的檔案庫下載本程式的aia原始檔與apk安裝檔。

註:

  1. 想學如何開發App Inventor程式嗎?請到App Inventor 中文學習網與我們一同學習。
  2. 將Android手機設定為可安裝非Google Play下載的程式以及讓手機與樂高NXT主機連線等說明請參考此處
  3. 與NXT連線後如果出現[Error 402]之錯誤訊息請不必理會,程式依然能正確執行。

文章原文刊載於《ROBOCON》國際中文版2014/7月號

[2014 5月號 Robocon雜誌專欄]輕鬆使用Android 裝置控制樂高機器人:把機器人感測器值與座標用電子郵件寄送

2014年5月號的Robocon雜誌專欄是:從上一期3月號的專欄開始,Android裝置控制樂高機器人專欄將改用App Inventor 2來編寫。App Inventor 2在指令上與前一版的App Inventor 是差不多的,相信您可以很快上手。請到App Inventor 中文學習網來登入App Inventor 2 開發網站並認識更多新功能。

泛科學文章連結:http://pansci.tw/archives/59193

本期專題將會把樂高NXT光感測器值,每十筆為單位更新到Google Chart雲端圖表來取得折線圖。只要熟悉基本語法就可以產生各式各樣的圖表,非常方便!有接觸過App Inventor的師長朋友們,歡迎從App Inventor中文學習網下載原始碼回去,加入更多有趣的功能。

請注意本範例需用到網路連線,請確認您的手機是使用Wi-Fi或3G行動網路來連上網路,否則將無法顯示Google雲端圖表。

超音波感測器

NXT超音波感測器是一種I2C數位感測器,它有內建的晶片可以分析並送出資料。利用超音波感測器,我們可以讓機器人「看到」物體並在撞上去之前躲開,這是觸碰感測器所辦不到的。 超音波感測器使用了聲納技術,它會發出一連串的超音波並記錄超音波被物體反射後所需要的時間,再轉換成距離回傳給NXT。請注意,超音波感測器的預設單位是公分。實際使用上,超音波感測器可測到最短的距離約為5公分,最遠距離約為220公分(圖1)。

002

開始玩機器人

本範例的機器人只要將一個超音波感測器接在NXT主機的4號輸入端即可。請確認NXT主機的藍牙是啟動的,接著將NXT主機與Android手機進行藍牙配對(註2),完成之後就可以把機器人放到一邊了。啟動藍牙之後您可以從NXT主機的螢幕左上角看到藍牙的符號。

接下來依序介紹程式的各個功能:

STEP1登入畫面:

首次進入程式的畫面如圖2a,這時只有「連線」按鈕可以按,其它所有按鈕都無法操作。點選「NXT主機/連線」按鈕後進入藍牙裝置清單(圖2b),請找到剛剛配對完成的NXT主機名稱(本範例為abc),點選之後就會由Android裝置對NXT主機發起藍牙連線。順利連線成功的話,「NXT主機/連線」按鈕會變成不可按的狀態,其他按鈕則都可按(圖2c)。

4aa

STEP2程式初始化:

在點選連線清單之前(ListPickerConnect的BeforePicking事件),需先將清單內容指定為Android裝置上的藍牙配對清單(圖3a)。點選之後則先測試連線是否成功,成功則將「NXT主機/連線」設為不可點選,「寄信」、「取得座標」與「斷線」等按鈕設為可點選,並啟動Clock元件來取得超音波感測器值(圖3b)。

005a

005b

STEP3 按鈕記錄GPS坐標:

每當我們點擊一次「取得座標」這個按鈕時,就會要求LocationSensor元件來取得手機當下的座標(圖4),並顯示在Label_GPS標籤上。由於Google Map的座標格式為「緯度,經度」。所以我們在此也是這樣顯示。

006

STEP4 使用Clock元件定時更新超音波感測器值:

接著使用Clock元件來每秒更新一次超音波感測器值,如圖5。如果在尚未與NXT主機連線之前就要取得超音波感測器值的話,會顯示錯誤畫面。因此我們在圖5b中,會確認藍牙連線成功之後才做這件事。

007

STEP5 寄送電子郵件:

我們將寄送電子郵件的指令包成一個副程式,將寄送電子郵件的指令設定成ActivityStarter元件的DataUri屬性內容。「mailto:」是收件人電子郵件,這裡油使用者自行填入。「subject=」是郵件主題,「body」是信件內容,在此我們填入座標與感測器值等內容(圖6)。 接著按下「寄信」按鈕之後,會先呼叫email副程式,再透過ActivityStarter元件來啟動手機上的電子郵件程式(圖7)。

008a

008b

STEP6 斷線:

按下「斷線」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使畫面上的各個元件恢復到程式一開始時的狀態(圖8)。

009

操作:

實際執行的時候,請先確認NXT已經開機且藍牙也啟動了。接著在您的Android裝置上點選畫面中的「NXT裝置/連線」按鈕,會進到如圖2b的藍牙清單畫面,點選您所要的NXT主機名稱並連線成功後,就能自動取得超音波感測器值。按下「取得座標」按鈕之後,就可在畫面上看到手機目前的GPS座標(圖9a)。請注意您當下所在的位置有可能無法取得座標,例如地下室等密閉空間。

在TextBox中輸入收件人的電子郵件之後,例如aa@bbb,請點選「寄信」按鈕。這時系統會詢問您要使用哪個電子郵件軟體來寄送,例如Android預設的email軟體或Gmail或任何其他的電子軟體等,在此我們選用Gmail(圖9b)。接著就會跳到圖9c的電子郵件畫面,按下寄送按鈕就發信出去了!快去問好朋友有沒有收到信吧。

請注意Android系統中,無法自動發送email、簡訊或撥打電話,因為這樣一來您的手機很容易被惡意使用。所以最後的送出都要由我們親自來執行喔。

9

本期專欄介紹了如何將機器人的感測器值與手機的GPS座標,透過電子郵件的方式發送出去。這樣有一天您派機器人遠征的時候,就能用這樣的方式來報平安。請繼續關注CAVEDU的機器人專欄唷!

本程式已上架Google play,請到Google Play搜尋「CAVEDU教育團隊」就找得到我們的樂高機器人系列app了。歡迎大家到App Inventor 中文學習網的檔案庫下載本程式的aia原始檔與apk安裝檔。

註:

  1. 想學如何開發App Inventor程式嗎?請到App Inventor 中文學習網與我們一同學習。
  2. 將Android手機設定為可安裝非Google Play下載的程式以及讓手機與樂高NXT主機連線等說明請參考此處
  3. 與NXT連線後如果出現[Error 402]之錯誤訊息請不必理會,程式依然能正確執行。

 

文章原文刊載於《ROBOCON》國際中文版2014/5月號

[好書介紹] Build Your Own Teams of Robots with LEGO® Mindstorms® NXT and Bluetooth®

最近翻到了一本新書,機器人平臺雖然是用 NXT,但其實裡面講的概念挺好的。很想買一本來看看,重點是以群體的概念來介紹機器人協同運算( collaborative computing),與 ROS 是相當類似的概念。

http://www.amazon.com/Build-Teams-Robots-Mindstorms-Bluetooth/dp/0071798560 <- 在此可試讀一些章節

書名:Build Your Own Teams of Robots with LEGO® Mindstorms® NXT and Bluetooth® 

作者:Cameron Hughes, Tracey Hughes, Trevor Watkins, Bob Kramer

章節:

CHAPTER 1 It Takes Two to Tango (機器人協同導論)

CHAPTER 2 Bluetooth for MINDSTORMS NXT: A Closer Look (深入認識NXT主機的藍牙,能與不能)

CHAPTER 3 One for All and All for One (認識機器人硬體)

CHAPTER 4 Creating a Team of Movers and Shakers (馬達)

CHAPTER 5 Bluetooth programming in NXT-G and LabVIEW (使用 NXTG/ LabVIEW 編寫藍牙通訊程式)

CHAPTER 6 robot environments, Teamwork Strategies, and Goals (機器人團體合作)

CHAPTER 7 Give Your Team of robots Java power with leJOS (Java 與機器人)

CHAPTER 8 Got Linux and Darwin on Your Team of Robots? (機器人作業系統、NXC 語言與檔案系統)

CHAPTER 9 Advanced Teamwork: One for All! (魔術方塊專題)

CHAPTER 10 Together We Stand: The Robot Convoy (機器人藍牙網路專題)

CHAPTER 11 The CSI project (機器人救援專題)

下載

 

 

140803 Raspberry Pi 單板電腦整合機器人研習營

今天是我們今年第三梯次的Raspberry Pi 單板電腦整合機器人研習營,

歡迎參考 BrickPi 的相關教學花絮與技術分享 ,如果您想知道為什麼要結合 Rapsberry Pi 與樂高機器人周邊的話,請參考此篇文章 [為什麼要把樂高機器人主機換成別的控制器]

DSC_0313

這就是今天的主角:Raspberry Pi + BrickPi 轉接板,兩片疊起來真是無限可能。可接上四個馬達與五個感測器,另外 Raspberry Pi 原本的 GPIO 腳位與 USB 也可充分利用。

就算是要把這台使用一般直流馬達的機器人改成樂高版也可以喔!

2013-12-04 11.22.02  2014-07-25 16.02.19

對於已經有樂高套件的朋友們來說,只要 BrickPi 轉接板就能充分擴充您的 Raspberry Pi 功能性以及樂高零件的使用壽命,值得一試。

來看看Raspberry Pi 循跡機器人的影片

[youtube=http://youtu.be/qdDGpQBW0YA]

大家都很認真上課,拍拍手喔!

DSC_0302 DSC_0307

 

140721~25 公民營研習[Raspberry Pi 視覺辨識機器人演算法專班] – 上

103學年度公民營研習 [Raspberry Pi 視覺辨識機器人演算法專班],讓來自全台的高職老師都能學會最新的應用並期待老師們可以把更新更活潑的內容帶進課堂中。CAVEDU 很高興能與大家一起共度一周 充實(應該說是精實) 的時光

恩,用五天的時間就要帶各位老師從零開始認識 Raspberry Pi、控制外部硬體、取得影像並藉由openCV 來辨識、最後則是讓機器人可以跟著指定顏色的物體來移動,光用聽的就覺得很挑戰。除了要細心安排課程以外,當然也感謝各位老師的任勞任怨乖乖上課。

其實只有四天而已… 中間還碰到一天颱風,大家都樂意留下來加課,不然做不完啦!

前兩天的課程有請知名 Raspberry Pi 部落客葉難老師主講,歡迎大家到他的部落格看看。保證收穫良多喔!(這張這片為什麼江湖味這麼重…)

有關如何使用 Raspberry PI +  L293 來控制雙輪機器人請閱讀此篇 [Raspberry Pi 雙輪機器人與3D列印攝影機底座]

DSC_4484

就教學的角度來說,除了取得技術之外,重要的是日後有哪些資源可以運用。因此我們將課程放在 MakerBar Taipei,期待各位老師可以結合在地資源,讓學生也能充分運用各地的共創空間。

DSC_4525

每位老師都需要這麼大的空間才能順利上課:NB、Raspberry Pi 與操作電子電路的地方

10547899_671987569538787_5612624566464749811_o

 

當然合適的工具書也是很重要的

2014-07-21 10.52.29

前兩天由葉難授課,教大家有關 Raspberry Pi 的大小事

DSC_4474

MakerBar Taipei 創辦人 – 闞凱宇先生

DSC_4477

也向各位老師介紹 DesignSpark Mechanical 軟體,讓各位老師實際去繪製本次機器人的webcam 底座

這一段課程由本團隊翁子麟老師負責,他即將赴美攻讀碩士喔

DSC_4490

先從簡單的立方體開始,再進入倒角、挖洞與擠出。最後就是實際繪製

2014-07-24 10.08.05  10501890_672971686107042_5722355585249142416_n

MakerBar Taipei 有3D列印服務,今天畫好明天就可以拿了。手腳快一點的話,可以早上畫好下午拿喔

2014-07-24 14.13.09  2014-07-24 14.13.18

當然也有介紹 Autodesk 公司的 123D Circuits 軟體,可以讓學生在進入實際操作之前,先以模擬的方式來認識電子元件。

2014-07-24 13.40.59

大家上課聚精會神的樣子

DSC_4550

這是車身半成品,可以看到從 Pi 的 GPIO 腳位接到 L293 控制晶片之後,再分別控制兩個直流馬達即可。

DSC_4552  2014-07-22 10.15.30

 

 

 

Raspberry Pi 雙輪機器人與3D列印攝影機底座

來看看 Raspberry Pi 使用 L293D 馬達控制晶片控制兩個直流馬達,這是本周公民營教師研習[視覺辨識機器人] 的車身喔

三台機器人排排站,感覺就很蓄勢待發!

2014-07-24 18.06.02

每位老師整理線的方式各有不同,不過如果要讓機器人更好的話,還是要用永久性電路板或是自行銲接洞洞板比較好。不然接點容易鬆動

2014-07-24 18.05.55

基本單馬達 code (使用 RPi.GPIO 函式庫)


import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)

Motor1A = 16
Motor1B = 18
Motor1E = 22

GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)

GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1E,GPIO.HIGH)

sleep(2)

GPIO.output(Motor1E,GPIO.LOW)

GPIO.cleanup()
Rapsberry Pi 控制單顆馬達

 

各位客倌,請看看早上用 DesignSpark Mechanical 來畫攝影機底座,下午就可以3D列印出來了。科技實在是進步得很快啊

2014-07-24 11.03.13

 

兩個扣環直接,還有一個肋條來提高強度

2014-07-24 14.13.09

放上攝影機,燈燈燈~

2014-07-24 14.13.18

 

140705 Android手機 – Arduino遙控自走車營隊@台北科學教育館

軟滑小編今天來到台灣科學教育館,土生土長的小編是台南人,小時候最喜歡跑到高雄的科工館參觀。

而且很喜歡上科學實驗課,所以之前就有聽說過台北也有個科教館,不過實在是太遠了所以無法來參觀。

很幸運的是第一次來到科教館就擔任教小朋友的任務,一開始進來的時候還看到四周都是有趣的科學小實驗,還有很多有趣的展覽。

這裡的老師都很親切,我想這也是為什麼假日的時候還有那麼多小朋友願意來這裡學習吧!

好的,今天來這裡的目的是要讓大家學會如何用手機控制Arduino。

講義都放在CAVEDU的官方網站,點我下載講義

主要的材料有Motoduino、Andriod手機、以及藍牙模組。

營隊的課程分為兩天,第一天上午教的是Arduino基礎課程以及基本的電子元件。

IMG_4743

第一天下午的課程則是App Inventor2,小朋友可以自行傳寫手機程式

使用的範例為HelloPurr及小畫家

若是有想了解更多App Inventor的資訊可以到中文學習網查詢喔

IMG_4780 IMG_4735

第二天早上則是將昨天上的課程再做一次的複習,並且將兩個裝置利用藍牙做為連接。

小朋友都學的比預期的還要快,果然第二天提醒大家要記筆記之後就學的更有效率了。IMG_4818

下午就開始我們這堂課的重頭戲囉!組裝車身,以及自己寫一個控制自走車的程式。

IMG_4839

 

最後小朋友們都有做出屬於自己的手機遙控自走車喔!

聽說八月還有一場營隊,有興趣的話可以上科教館的網頁上查詢

IMG_4908IMG_4906IMG_4905

IMG_4904IMG_4909IMG_4903

 

而且今天的營隊還上了TVBS新聞台,其中受訪的是本團隊的宗翰老師。

[youtube http://www.youtube.com/watch?v=w3Ktnp8jQog]

 

 

140713 LabVIEW 樂高EV3機器人高階圖控程式研習營

報名網頁請按我

LabVIEW是由美商國家儀器股份有限公司(National Instruments,簡稱NI)所開發的圖形化程式平台。LabVIEW早期的目標是為了實現各種儀器的自動控制,至今已成為一成熟且完善的高階程式語言。LabVIEW採用圖形化程式設計,與傳統文字式程式語言,例如C或Java等,LabVIEW最大的特點在於採用了「資料流」的概念,使得程式設計者在流程圖構思完畢的同時也完成了程式的撰寫。

本日研習將使用 LabVIEW 結合熱門的樂高EV3 教育性機器人平台,除了基礎硬體控制之外,例如感測器與馬達,還可使用 LabVIEW 強大的資料分析與運算功能,將機器人作為更豐富多元的教學載具,進行各種整合應用。在本次研習中您將可藉由Raspberry Pi 踏入 Linux 的世界,以及Raspberry Pi 所展現的諸多應用。

主辦單位:CAVEDU 教育團隊、翰尼斯企業有限公司

協辦單位:台灣發展研究院 智能機器人研究所、《Make》國際中文版、普特企業有限公司

時間 : 103年7月13日星期日 09:30~17:00

地點 : 翰尼斯企業有限公司 台北市中正區中華路二段165號1樓

備註: 請自行攜帶筆記型電腦,以便實際操作。。

收費:3,000 。名額有限,請儘早報名

匯款方式:
銀行名稱 :華南商業銀行 雙園分行
戶名 :翰尼斯企業有限公司
銀行代號 :008
帳號 :122-10-015315-3

超級好禮相贈:
1. [LabVIEW高階機器人教戰手冊:打造智能與趣味兼具的機器人] 書籍一本,預計10月出版]

歡迎看看我們所有關於 LabVIEW 的有趣應用(樂高機器人、Arduino、Kinect 視覺辨識等等)

活動議程:

9:30 CAVE教育團隊簡介

9:50 安裝 LabVIEW 試用版
資料流程式設計概念
控制元件與顯示元件

10:30 樂高EV3 機器人套件
硬體介紹:主機操作選單
組裝雙輪機器人
如何使用 LabVIEW控制馬達轉速與方向

12:00 中餐

13:00 LabVIEW中的常用迴圈與決策結構
高階機器人行為設計

14:00 LabVIEW 的資料擷取與分析
基礎統計量與極值分析

15:00 結合鍵盤滑鼠來控制機器人

16:50 結語、賦歸

注意:主辦單位保留修改與解釋活動之所有權利。

服務電話:02-23062900
service@cavedu.com

[八月新譯出版] Raspberry Pi 機器人自造專案

翻譯書,預定八月底出版,敬請期待喔~   書中除了介紹如何使用 Rasbperry Pi 組裝出基本雙輪機器人之外,還有各種類比/數位感測器介紹。搭配 openCV視覺辨識、語音輸入輸出、GPS 定位、還有最近很熱門的 ROS (Robotics Operation System).

我們在8/3 會有 Raspberry Pi 機器人研習,歡迎參加喔!

4322OT Raspberry Pi Robotic Projects

 

順便來看看Raspberry Pi 循跡機器人影片

[youtube=”https://www.youtube.com/watch?v=qdDGpQBW0YA”]

以下為本書章節(章名暫定)

第一章

Raspberry Pi 初次上手

第二章

Raspberry Pi 程式設計

第三章

語音輸入與輸出

第四章

Raspberry Pi 加入視覺

第五章

製作移動式輪型機器人

第六章

提高機動性 – 控制腿式機器人的動作

第七章

使用感測器來避開障礙物

第八章

真·行動式 – 遙控您的機器人

第九章

使用 GPS 接收器來定位機器人

第十章

系統動態

第十一章

上山、下海、飛起來

140503 機器人體驗營@國立中興大學附屬高級中學

5/3 星期六, CAVEDU小黃老師,同時也是積木星球球長來到了台中的國立中興大學附屬高級中學辦理一日機器人體驗營。

興大附中以及鄰近學校的同學們都可以自由報名,就用陽光普照的周六下午來玩機器人吧。參加的女同學不少喔,表現也相當不錯

SONY DSC  SONY DSC SONY DSC

先從簡單的來,機器人左去右回

SONY DSC

進階一點則是使用觸碰感測器來走出一個ㄇ字型迷宮。需要注意不要讓機器人撞到牆壁就解體或是卡在牆角

SONY DSC

最後則是軌跡車,大家都走的很不錯喔

SONY DSC

簡易四足機器人 ver.2

暌違一個多月,簡易四足機器人終於又可以跟大家碰面了!

IMAG3308

在ver.0(介紹)之後,我大幅改動設計,製作了ver.1及ver.1.5的機型,卻都落得失敗下場;
幸好依這兩次經驗發展出的作為借鏡,從頭由ver.0調整改良出的ver.2總算能順利運行,今天就來跟大家分享一些製作上的細節及注意事項。

先來看看ver.2有甚麼不一樣的地方吧。

我改以較堅固的2000P厚紙板(2mm後)製作底板,並設計了如下圖的形狀,左端的內縮是為了讓驅動桿及其上的固定件保有旋轉時通過的空間,內削的梯形會比ver.0的「凸」字型更好看耐用,避免應力集中。將馬達至於底板上方,分散負重,並以M3螺絲、螺帽、墊片將馬達、軸座固定於底板。

底板IMAG3301

軸座部分:我認為原先以紙般圍出長方體的設計既不穩固也難製作,因此參考Tamiya多足機器人套件的軸座,用soildworks畫圖後再以公司的閃鑄噴出。底端的固定孔原檔為直徑3mm,輸出後稍稍縮了些,恰好可以讓M3螺絲璇入卡住;但搭配#4雙腳釘(寬度3mm)時,上方的軸孔最好稍微放大,否則會無法順暢旋轉。

軸座 IMAG3044

連桿部分,我同樣使用1000P(1mm厚)的厚紙板,先在其上繪出工件,並以丸斬搭配鐵鎚、膠墊打孔(下圖左)。
丸斬又名雞眼斬刀,是手工藝常見的打孔工具,有各種直徑。可以在後火車站取得,據觀察有50及150兩種價位(應該是源於產地差異)。
使用時須搭配鐵鎚及膠墊(避免刀口損傷,也可以底部多墊幾層厚紙板)。建議先打孔再裁切,否則當孔洞太靠近邊緣時容易使材料邊翹曲。
下面最右邊的照片便是先裁切再打孔(左)與先裁切再打孔(右)的底板邊緣對照,

  IMAG3330  IMAG3154  IMAG3313

打孔完畢後以鋼尺搭配美工刀裁切。先輕劃一刀固定位置裁切輪廓、避免偏移,再安心地重重劃下一刀一刀,快割斷時也可將物件沿刀痕翻開,從背面反割取下。
仔細觀察便會發現,機器人在運行時,前腳(驅動足)的軌跡約為橢圓,可以上下運動帶動機身前進,而後腳(從動足)則為一段弧線,僅協助機身往前。要能達成這樣的軌跡,機器人的前後腳不能太開、也不能太近,大約是使兩足平行時的距離等於驅動軸與後軸孔的距離(如下圖中擺設)。這可以用畢氏定理算出(下圖右),推算出長度後再以接近的長度去製作即可。

IMAG3157IMAG3160  IMAG3329

桿件同樣以雙腳釘固定彼此,不喜歡突出尖銳的雙腳釘(下圖左)的話,可以在將其彎摺回來,像個小蝴蝶結似的(下圖右),視覺效果還不錯。組裝時請務必確認桿件間彼此平行,否則運行時會出現問題。組裝完畢後,電池座以雙面膠黏貼於底板上。

IMAG3304 IMAG3306

終於完成這隻機器人了,讓我們來欣賞實際運作的影片吧!雖然還是有些小瑕疵,但是不是比ver.0穩定很多呢?

 

 

那麼,前兩個版本究竟出了甚麼問題呢?

這是ver.1IMAG3122 及ver.1.5IMAG3161 的照片,

因為覺得「凸」字形的底板不好看,我直接裁了個兩邊內縮1cm的長方形。但為了使桿件平行,只好用一根長軸穿過後軸座,加上軸套固定。原以為這麼做會比較穩固,但因為我一時找不到穩定的軸及軸套,想說姑且以鋁線、吸管替代之(這是個天大的錯誤啊!),反而讓桿件更加偏移、歪七扭八的沒轉幾下就垮了。ver.2將底板延伸後直接連接桿件於後軸座,果然穩定許多。
另外,ver.1我將底板拉長,卻忘了同時更改連桿的長度,使它不論驅動桿轉到哪個方向,兩隻腳都是打開的,根本無法畫出前述的軌跡,當然就無法前進囉。
ver.1.5是我第一次嘗試以螺絲、螺帽、墊片固定桿件。由於桿件在運行時會旋轉,某幾個位置會越轉越鬆,雖然可以以保麗龍膠點膠固定,卻會增加日後拆卸改裝的困難。又,這麼多組合件會增加足部重量分散重心,加上一開始用的丸斬直徑過大,螺絲會在孔洞內滑動,增加自由度及連桿的不穩定性,因此在ver.2時又回頭擁抱雙腳釘了。

 

最後,來個各代機型大合照吧。因為材料有限,所以只要確定機器人無法運轉、材料上可使用,我都會拆下來回收再利用呢。

IMAG3312

[Android 結合 Google Chart API] 機器人原地轉一圈產生雷達圖

機器人原地轉一圈之後,將超音波感測器值透過藍牙送給Android 手機,再呼叫 Google Chart API 雲端圖表功能來取得雷達圖。可以畫出非常精美的圖表。重點在於靈活應用 Google Chart API  的語法就可以囉!

直接點選以下連結就可以看到雷達圖,詳細參數設定請參閱 Google Chart API 官網或以下延伸閱讀

https://chart.googleapis.com/chart?cht=r&chs=320×320&chxt=x&chxl=0:|0|45|90|135|180|225|270|315&chd=t:60,40,30,100,76,99,22,57,80

本範例是結合樂高機器人的超音波感測器來達到簡易地圖掃描的效果,歡迎試試看。以下範例是2014年淡江大學智慧型行動裝置整合機器人控制課程的作業之一。感謝電機系周煜同學(已畢業)做出相當好的版本呢。

 

12345

[youtube=http://www.youtube.com/watch?v=DBvhrxkb24M]

延伸閱讀:

Google Chart API 教學

Google Chart 隨機產生折線圖

淡江電機 Android 機器人整合課程網站

140523淡江電機 Android 行動裝置整合機器人控制課程,期末專題展示

Code Android端

package com.example.nxtsense;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Set;
import java.util.UUID;



import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {
	private BluetoothAdapter adapter;
	private BluetoothSocket nxtSocket;
	public DataInputStream nxtDataIn;
	public DataOutputStream nxtDataOut;
    public final int MODE_CONNECT_NXT = 0, MODE_CONTROL = 1;
    private int mode;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        adapter = BluetoothAdapter.getDefaultAdapter();
    	if(adapter==null)
        {
        	Toast.makeText(this, "No Bluetooth adapter found", Toast.LENGTH_SHORT).show();
        	this.finish();
        }
    	if(!adapter.isEnabled())
			startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), 1);
    	
    	try {
			setMode(MODE_CONNECT_NXT);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    	Button getvalue=(Button)findViewById(R.id.get);
    	getvalue.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				try {
					CommandNXT();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
        
    }

    public void CommandNXT() throws IOException{
    	String y="";
    		nxtDataOut.writeInt(1);
    		nxtDataOut.flush();
    	
    	//	int x=nxtDataIn.readInt();
    		y=String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt())+","
    				+String.valueOf(nxtDataIn.readInt());
    	
					//TextView tv=(TextView)findViewById(R.id.value);
			    	//tv.setText(String.valueOf(x));
		
    	String myURL =" https://chart.googleapis.com/chart?cht=r&chs=320x320&chxt=x&chxl=0:|0|45|90|135|180|225|270|315&chd=t:"+y;         
        WebView myBrowser=(WebView)findViewById(R.id.mybrowser);  
  
        WebSettings websettings = myBrowser.getSettings();   
        websettings.setJavaScriptEnabled(true);  
         
        myBrowser.setWebViewClient(new WebViewClient());  
  
        myBrowser.loadUrl(myURL);  	
    	
    	
    	
    }
    public void setMode(int _mode) throws IOException
    {
    	Button connect=(Button)findViewById(R.id.buttonConnect);
    	mode = _mode;
    	if(mode==MODE_CONNECT_NXT)
    	{
    		
    		connect.setOnClickListener(new Button.OnClickListener() {
    			public void onClick(View arg0) {
    				connectNxt();
    				}
            });
    	}
    	
    	else if(mode==MODE_CONTROL)
    	{
    		connect.setEnabled(false);
    	}
    	else 
    		throw new IllegalArgumentException();
    }
    
    private void connectNxt()
    {
    	if(mode!=MODE_CONNECT_NXT) //檢查模式
    		throw new IllegalArgumentException();
    	
    	String name;
    	BluetoothDevice nxt = null;
    	
    	if((name = ((EditText) findViewById(R.id.editNxtName)).getText().toString()).equals("")) //檢查是否為空字串
    	{
    		Toast.makeText(this, "Please provide the name of your NXT", Toast.LENGTH_SHORT).show();
    		return;
    	}
    	
        Set<BluetoothDevice> devicesSet = adapter.getBondedDevices(); //取得裝置清單
        
        if(devicesSet.size()==0) //找不到裝置
        {
        	Toast.makeText(this, "No devices found", Toast.LENGTH_SHORT).show();
        	return;
        }
        
        for (BluetoothDevice device : devicesSet) //搜尋裝置
        {
            if (device.getName().equals(name))
            {
            	nxt = device;
                break;
            }
        }
        
        if(nxt==null) //找不到裝置
        {
        	Toast.makeText(this, "NXT not found", Toast.LENGTH_SHORT).show();
        	return;
        }
        
        try
        {
        	//建立nxt socket
			nxtSocket = nxt.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
			nxtSocket.connect();
			nxtDataOut = new DataOutputStream(nxtSocket.getOutputStream());
			nxtDataIn = new DataInputStream(nxtSocket.getInputStream());
		}
        catch(IOException e)
		{
        	Toast.makeText(this, "Connection failure", Toast.LENGTH_SHORT).show();
        	return;
		}

    	Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
		try {
			setMode(MODE_CONTROL);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }




   

}
Code. Android receive ultrasonic value from Lego robot

Code 機器人端使用 leJOS

import lejos.nxt.*;
import lejos.nxt.comm.*;
import lejos.util.Delay;

import java.io.*;
public class motor_control{
	public static void main(String args[]) throws IOException{
		Button.ESCAPE.addButtonListener(new ButtonListener(){
				public void buttonPressed(Button b){
					System.exit(0);
					}
				public void buttonReleased(Button b){
					
				}
		});
		System.out.println("Waiting");
		BTConnection btc = Bluetooth.waitForConnection(0, NXTConnection.RAW);
		DataInputStream dis = btc.openDataInputStream();
		DataOutputStream dos = btc.openDataOutputStream();
		System.out.println("Connected");
		UltrasonicSensor ultrasonic1 = new UltrasonicSensor(SensorPort.S2);
		int Ultrasonicvalue1;
		while(true){
			int a=dis.readInt();
			if(a==1){
				for(int i=0;i<7;i++){
					Motor.A.setSpeed(100);
					Motor.B.setSpeed(100);
					Motor.A.backward();
					Motor.B.forward();
					Delay.msDelay(822);
					Ultrasonicvalue1=ultrasonic1.getDistance();
		//	System.out.println(Ultrasonicvalue1);
			
				try {
					dos.writeInt(Ultrasonicvalue1);
					dos.flush();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
			}
				Motor.A.setSpeed(0);
				Motor.B.setSpeed(0);
				Motor.A.backward();
				Motor.B.backward();
			}
		}
			}
}
Code. Robot send out ultrasonic value to Android (leJOS)

140523淡江電機 Android 行動裝置整合機器人控制課程,期末專題展示

今天是阿吉老師淡江電機智慧型行動裝置整合機器人控制課的最後一堂課,也是我們課程的期末專題發表。主要的內容是於 Eclipse IDE 中使用 Java程式語言來開發各種機器人控制專題。

主題有保全機器人、路面避障機器人、發射機器人、生活便利機器人、繪圖機器人、堆高機、分類機器人、測速照相機器人、搬運機器人、搖擺彈彈球、搬運機器人、大嘴鱷魚、全景拍照機器人等等。而從期中到期末的課程這段期間,老師教了更多更難的google API跟Facebook程式碼。還記得Facebook程式碼那堂課大家驚呼連連。原來打了幾行指令之後就可以看到那個人所打過卡的所有地方等等的訊息,難怪大家都說Facebook對於個人資料並沒有做很好的隱私。

不過還是建議大家不要把太多隱私的東西放在網路上喔!上次期中報告的時候,大家都只完成了一些進度,希望在期末的時候大家都能夠有更多進步空間。

 

教學網站請按我 <- 投影片與code 學生專題都在這邊下載喔!!

 

阿吉老師今天穿的很正式,想必是對同學的期末報告非常的重視。

IMG_0278

這組同學報告的是倉儲搬運機器人

IMG_0267

還有指定地點送物品的機器人

IMG_0288

IMG_0287

全景拍照機器人,不過拍照功能必須要手按才能。

IMG_0313

IMG_0317

圈圈叉叉遊戲機器人,還蠻有創意的一組報告,可以跟人互動玩遊戲。

IMG_0319

IMG_0320

鈴鐺分類機器人,但是因為鈴噹的表面太過反光,導致機器人在判讀的時候總是錯誤。

希望同學可以將鈴鐺加工之後Demo會表現更好喔!!

IMG_0327

IMG_0335

街機遊戲機器人,構想很棒。但是並沒有做出遊戲該有的介面。

如果有把平常玩遊戲介面的那種計分、秒數、路徑都顯示在手機上會更完整喔!

IMG_0367

大嘴鱷魚,是小編覺得最棒的一組專題。跟其中比起來多了更多功能,還有背景音樂。

而且Demo的時候讓全班的同學都圍了過來,被嚇人的機器人逗得笑聲連連。

IMG_0383IMG_0390

偵測機器人,可以手機遙控機器人進入災區探查。這組同學對於程式碼的部分非常認真。報告的時候還分享自己遇到的Bug以及解決辦法。

IMG_0399

IMG_0404

自動平衡橋機器人,到了某個快掉下去的角度就會使橋面歸正。

IMG_0415

IMG_0424

測速機器人,不過這組的同學可能一開始的構想沒有查好測速的原理。導致期末的時候誤解了測速的意思。

IMG_0481

課程結束之後不免俗地要來一個大合照,感謝老師這學期的教導喔!

IMG_0496

【機器人機構近拍】

操控抓取機器人

IMG_0501

測速機器人

IMG_0503

全景拍照機器人

IMG_0504

鈴鐺分類機器人

IMG_0505

勘查機器人

IMG_0507

平衡橋機器人

IMG_0508

 

[RobotC] 藍牙傳輸馬達編碼器值

咱們對於 RobotC 的教學文章比較少,但淡江電機大一的基礎電機實驗下學期就是使用 RobotC 帶領學生進入 C語言與機器人控制的領域(上學期使用 NXTG圖形化軟體)

本範例是將一台 NXT 的兩個馬達(作為手把,所以不會轉動)的編碼器值透過藍牙送給另一個NXT。接收之後顯示在螢幕上。

事實上可以顯示在螢幕上,下一步就可以用這兩筆數值來控制馬達電力,遙控機器人就完成啦。請期待我們下一個範例喔!

2014-05-26 10.21.28

[youtube=http://www.youtube.com/watch?v=73oSUdFpTTY]

發送端

task main()
{
   nMotorEncoder[motorA] = 0;
   nMotorEncoder[motorB] = 0;
   while(true){ 
      wait1Msec(300);
      int my_number,my_number1; 
      my_number=nMotorEncoder[motorA];
      my_number1=nMotorEncoder[motorB];
      sendMessageWithParm(my_number,my_number1);  //將兩筆資料一起送出
}
}
發送端 - 將兩筆馬達編碼器值送出

 

接收端

task main()
{
   int message_first;
   int message_second;
   while(true)
   {
      message_first = messageParm[0]; //取出第一筆資料
      message_second = messageParm[1];  //取出第二筆資料
      if(message_first != 0 || message_second != 0)  //如果兩者任一不為零
      {
         nxtDisplayBigTextLine(2,"1: %d",message_first);
         nxtDisplayBigTextLine(4,"2: %d",message_second);
         ClearMessage();  //清除藍牙暫存區
      }
      wait1Msec(300);
   }
}
接收端 - 接收藍牙訊息之後顯示於螢幕