Tag Archives: 私房好物

[3/29_C-Day有什麼?]系列之三:台北市校際盃機器人選拔賽(二)-使用Raspberry Pi Model B與Brick Pi 擴充板

本篇內容是由  CAVEDU 的實習生-袁佑緣提供的使用心得

首先我們先挑選時下流行的微電腦Raspberry Pi 來做測試,本次使用的是B板並搭配Dexter公司所生產的BrickPi來控制LEGO的馬達與感測器。(上面是Raspberry Pi B,下面是BrickPi)

02

如果好奇什麼是BrickPi的人,請參看這篇

首先我們將BrickPi與Raspberry Pi B組裝起來,並鎖上BrickPi的塑膠殼,注意到它上面有許多小洞是專門設計來結合LEGO零件的插銷,所以要將控制器裝置在你的LEGO機器人上完全不是問題喔!

03

接著組裝機器人,這個機器人的設計是用前面的框框綁上兩條橡皮筋當作網子,利用手臂往下壓來取乒乓球,並把乒乓球放回身上的籃子當中,而機器人行走的馬達則是使用LEGO EV3的大馬達。

04 05

前面手臂的動力來源則是用LEGO EV3的中型馬達,並且作一系列的小帶大的齒輪將馬達的力量放大,以防舉不起物件的情況。

06

接著是下面裝的感應器,分別是顏色感應器,與光源感應器,這兩個感應器都是使用NXT的感應器,光源感應器可以用來循線行走,而顏色感應器則可以用來判斷色卡

07

注意到BrickPi無法直接使用EV3的感應器,如果真的需要使用,可以參考官方的教學文件( http://www.dexterindustries.com/site/?p=1822 ),只要將BrickPi的firmware更新就可以使用了!

 

接著我們必須在Raspberry Pi B上安裝對應的系統,才能透過BrickPi控制LEGO元件,下載官網提供的映象檔(http://sourceforge.net/projects/dexterindustriesraspbianflavor/ ),然後燒錄成SD開機卡,插在Raspberry Pi B並開機,成功後便可以透過SSH從電腦連線到Raspberry Pi B,然後就可以開始撰寫程式啦!

 

例如:我想用Python來撰寫機器人的程式,那麼我打開桌面一個叫BrickPi_Python的資料夾(這裏的桌面當然指的是Raspberry Pi B裏Linux系統的桌面),就可以看到許多範例,相關的函式則可以參照其中一個BrickPi.py檔案,裏面有各種函式與變數的定義。

 

此外,如果你想使用其他的語言撰寫,BrickPi也支援像C語言,甚至是圖形化介面的Scratch也可以喔!

 

使用心得:

 

使用Raspberry Pi B搭配BrickPi來做機器人,自然有一些明顯的好處,像是你可以像管理電腦一樣,在上面撰寫程式、管理檔案,也可以由筆電透過遠端連線來進行操作、傳輸檔案,而連上網路也不是問題,這些都是一般的控制器無法做到的地方,此外在官網上的BrickPi Projects裡面也有許多的範例可以參考(http://www.dexterindustries.com/BrickPi/projects/ ),非常適合maker專題的實作喔!

 

但是它做為「比賽用的機器人」有些許不足的地方,像是Raspberry Pi B對於熱插拔很容易當機,在電力上如果不在BrickPi接上額外的電源實在很難驅動馬達運作,而接上的電源又不能影響到Raspberry Pi B,很容易導致當機,筆者在嘗試的時候多次就遇到終端機畫面無反應而必須重開的慘況。

 

這是為什麼呢?熱插拔容易當機的原因是Raspberry Pi B要到B+的板本後才有在5V電源供應那邊加上2A的保險絲,所以要到B+才支援熱插拔(Raspberry Pi A 與A+也是同樣的道理喔)。

另一方面,BrickPi官方提供的馬達控制函式並不多,以python語言為例,可以見github上對於brickPi.py的定義(https://github.com/DexterInd/BrickPi_Python/blob/master/BrickPi.py ),裡面直接定義馬達轉動的函式只有一條,剩下的必須用變數來控制馬達,此外,由於沒有詳細的library reference,只能參照原本的函式庫當案中的說明,其上手難易度也高了不少,對於「機器人駕訓班」這個圍繞在如何控制馬達轉動,而且現場題目變化靈活度相當高的比賽,或許我們可以有更好的選擇……

 

零件提供來源在這裡

[3/29_C-Day有什麼?]系列之四:台北市校際盃機器人選拔賽(三)- 使用Arduino uno與NXShield

本篇內容是由  CAVEDU 的實習生-袁佑緣提供的使用心得

這次採用Arduino UNO搭配mindsensors公司所生產的NXShied來控制我們的機器人(本次使用的是NXShield-D),Arduino相比Raspberry Pi功能雖然比較簡單,但是卻相對容易操作而且穩定,而NXShield則是讓我們可以透過這塊板子來控制LEGO的電子零件,以下是以「機器人駕訓班」中的一個任務:將指定物件(例如:乒乓球)推開或取得,取得有額外加分。

首先我們先來看看機器人的核心:左邊是Arduino UNO控制板,右邊則是NXShield,NXShield主要可以接四個馬達與四個感應器,其他的特殊的針腳則可以用來接servo或I2C用

08注意到NXShield對感應器的支援上僅有NXT,如果想要支援EV3的話,則需另外購買轉接線,而馬達的部分則是NXT與EV3皆可使用,而mindsensors公司不愧是專門出產LEGO機器人相關的配備,對於支援的函式庫與感應器種類相當多,對於新手算是相當友善的選擇。

緊接著是機器人手部的設計,這次改用EV3的大馬達來取代先前的EV3中馬達,大馬達的扭力大概是中馬達的2~3倍,所以這次就直接裝在馬達上,而不用再另外裝齒輪組來加大扭力。

09

 

而電源供應的部分,筆者實際測試過的情況是必須要將兩塊板子各自都接上電源才行正常運作,只有接其中一塊板子的話,有可能會發生”插著USB線的時候可以正常運作,可是拔掉USB線(也就是只有吃電池的電源時)會發生運作不正常的現象,常常跑幾個步驟後就arduino就突然重新啟動了”。因為LEGO馬達的運作電壓是9V,所以筆者的作法是為兩個板子各自接上9V的電源,跑起來就是相當的有力啊

11_2 11

 

再來就是軟體的部分啦,開發環境的設定相當容易,先下載官方提供的函式庫(附上連結http://sourceforge.net/projects/nxshield/files/ ),然後打開電腦中的Arduino IDE->點選上方的草稿碼->點選匯入程式庫->匯入程式庫,然後選擇你剛剛下載的檔案就行大功告成了!

那麼我們就來看看實際跑起來的樣子,以下是簡單的範例程式:

#include <Wire.h>
#include <NXShield.h>

NXShield nxshield;
//引入必要函式庫與新增NXShield變數
void setup() {
 
  delay(500);
  nxshield.init(SH_HardwareI2C);//初始化I2C
  nxshield.bank_a.motorReset();//初始化馬達
  nxshield.bank_a.motorReset();
  nxshield.waitForButtonPress(BTN_LEFT);//等待按下左鍵才開始(NXShield板子上有四個按鍵分別是RIGHT,LEFT,RESET,GO)
 
}

void loop() {
  
  delay(5000);
  nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Forward, 20);//Bank B 的Motor-1以馬力20正轉,機器人將手臂往下壓
  delay(2000);
  nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Reverse, 20);//Bank A 的Motor-1,Motor-2以馬力20反轉,向前進
  delay(2000); 
  nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Forward, 30);//Bank A 的Motor-1,Motor-2以馬力20反轉,碰到蓋子後向後退
  delay(500); 
  nxshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_BrakeHold);//Bank A 的Motor-1,Motor-2停止鎖死
  nxshield.bank_b.motorRunDegrees(SH_Motor_1, 
                     SH_Direction_Reverse, 
                     60,
                     70, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);//Bank B 的Motor-1以馬力60反轉70度,機器人手臂向上抬一個角度
                     
   nxshield.bank_a.motorRunDegrees(SH_Motor_Both, 
                     SH_Direction_Reverse, 
                     30,
                     230, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);
                     //Bank A 的Motor-1,Motor-2以馬力30反轉230度,機器人向前進一小段距離,只要改變這段距離就可以解決正方形或者是三角形的題型
                     
   nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Forward, 100);//Bank B 的Motor-1以馬力100正轉,機器人將手臂全力往下壓
   for(int i = 0; i < 5; i++)
   {
     nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Reverse, 30);
     delay(130);
     nxshield.bank_a.motorRunUnlimited(SH_Motor_Both, SH_Direction_Forward, 30);
     delay(100);
   }//前後來回壓球,使得進球率變高
   nxshield.bank_a.motorStop(SH_Motor_Both, SH_Next_Action_BrakeHold);//Bank A 的Motor-1,Motor-2停止鎖死
   
   nxshield.bank_b.motorRunUnlimited(SH_Motor_1, SH_Direction_Reverse, 100);//Bank B 的Motor-1以馬力100轉,機器人將手臂全力往下上舉,把球收今去
   delay(300);
   nxshield.bank_b.motorStop(SH_Motor_1, SH_Next_Action_BrakeHold);//Bank B 的Motor-1停止鎖死

   nxshield.bank_a.motorRunDegrees(SH_Motor_Both, 
                     SH_Direction_Forward, 
                     30,
                     210, 
                     SH_Completion_Wait_For,
                     SH_Next_Action_BrakeHold);//機器人退回原位
   while(true){;}//無限迴圈當作程式的終點,方便觀察
   
}

 

實際運作的情形:

一、收取正方形區塊的物件

注意到影片中的機器人雖然一開始放得很歪,但是卻可以靠前面的導角來修正回來,是個可以參考的設計喔!

12

 

二、收取三角形區塊的物件

同樣的程式架構,也使用同樣的網子,只是改變了舉起手後機器人前進的角度,也是可以輕鬆入袋!

 

三、那如果網子裡面有上次的取得物件呢?

也是可以滿載而歸喔!

 

四、當然最安全的還是分開一次一次的收好啦

以上,希望透過這次一系列簡單的範例測試來吸引更多人一起來使用各種控制器來比這種開放是硬體的比賽,也預祝即將參賽的各位選手們比賽順利!

零件提供來源在這裡

[Raspberry Pi 2]樹莓派2效能測試,使用Chrome 瀏覽器與 openCV

RaspberryPi 2號稱CPU效能比過去快上六倍,快六倍究竟是什麼樣的感覺呢?這次使用Linux系統的Google Chrome與opecncv這兩個需要消耗較大CPU運算來做測試。剛拿到樹莓派2的朋友們,要讓過去系統可以相容於Pi 2請看這篇

這次使用top指令來觀察Pi2的系統執行能力,首先輸入:

$top

002

出現上圖的視窗,以灰色的一行作分類,上半部顯示的是Pi2的四核心運算率,分別是:CPU0、CPU1、CPU2、CPU3,如果沒有出現,按數字鍵[1]即可

下半部顯示的是正在執行的命令,如果出現的資料太多,按下鍵盤的[i]鍵就會切換顯示方式

  • USER:顯示執行命令的帳號
  • %CPU:顯示CPU的使用率
  • %MEN:顯示記憶體的使用率
  • COMMAND:執行的命令名稱

讓我們來看看在Pi B+執行 Google Chrome 的速度如何?

我們可以看到執行 Chrome需要使用CPU 高達 70%的運算,在整個系統上資源使用量是排第一名,右下角的圖形化CPU也是整片都滿滿的綠色,代表CPU全部的使用率達百分之百。Pi B+只有CPU0可以進行運算,系統跑起來會LAG,如果要執行其他程式需要等待約一到數分鐘才能打開。

接著來看看Pi2執行 Chrome 又是如何?

如圖所見,這個瀏覽器開了兩個分頁,但是CPU只使用了百分之30,而且在運算上會分擔給四個CPU,所以每個CPU執行的速度還是很快,由於我還開了其他的程式,例如截圖軟體,所以Chrome在使用整個系統的資源量是排第七第八名。

接著來看看Pi B+執行OPENCV佔的資源如何:

CPU使用率佔百分之七十,系統使用資源量排名第一,不用說整個CPU圖片為滿滿的綠色。

接著看Pi2執行opencv

CPU使用為 59%,我們看看右下角,CPU使用量顯示,綠色居然沒超過四分之一,小編實地測試,使用Pi2時,opencv只要畫素高,經過計算會照成圖片顯示DELAY,但是總CPU使用量不會超過四分之一,應該是Pi2作業系統(OS)的使用預設是不會讓單一程式佔走大部分的運算資源,在使用時,不會讓使用者感覺系統LAG,經過測試,Pi2在需要較高運算的程式上,的確比之前的Pi快上許多。

目前CAVEDU 已經開始供貨給玩家囉,Raspberry Pi2售價是台幣1500元,Raspberry Pi B+是900元,Raspberry Pi B 降價成500元!!歡迎到我們的FB粉絲頁商城訂購~~