Tag Archives: nxc

EV3程式教室 雙顏色感測器循跡

 
循跡對於機器人來說是非常基本的控制要求,因為機器人在有限的感測器之下,可說是無法在沒有標的物走到指定的位置。因此軌跡線、定位點或是高級一點的GPS或是室內定位裝置等。其中最簡單也是最重要的就是循線前進(line follow)。
 
在軌跡線無交叉的情況下,機器人只要一個光感測器就能沿著軌跡線的左側或右側前進,但也因為這個前提,機器人是無法經過十字交叉口的。
 
由下圖可看到,軌跡線是有交叉的,因此我們需要使用第二個光感測器來夾住這條軌跡線。
 
 
如此就會有四種狀況:(假設左邊的顏色感測器接在#1輸入端,右邊的顏色感測器接在#1輸入端),我們用 EV3程式來寫就是這樣的架構 (本範例無馬達指定,僅示範架構):
 
1. 左黑右白:機器人偏右,向左修正 (下圖中,下方V區塊)
 
2. 左白右黑:機器人偏左,向右修正 (下圖中,上方X區塊)
3. 兩者皆白:軌跡線位於兩個感測器中央,前進!(下圖中,上方V區塊)
4. 兩者皆黑:十字路口,前進  (下圖中,下方X區塊)
 

對應到Arduino 或任何文字式程式語言就是 while(true) + switch 或是巢狀的 if/else架構,如以下 NXC 範例:

 
#define pwr 40
#define line 35
task main()
{
    SetSensorLight(S1);
    SetSensorLight(S2);
    while(true)
    {
         if(Sensor(S1)>Light && Sensor(S2)>Light) //1白2白 -> 直走
         {
             OnFwdSync(OUT_AC,pwr,0);
         }//if
         else if(Sensor(S1)>Light && Sensor(S2)<Light) //1白2黑 -> 右前方修正
         {
            OnFwd(OUT_A,pwr);
            OnFwd(OUT_C,10);
         }//else if
        else if(Sensor(S1)<Light && Sensor(S2)>Light) //1黑2白 -> 左前方修正
        {
            OnFwd(OUT_A,10);
            OnFwd(OUT_C,pwr);
        }//else if
        else //1黑2黑 -> 直走
        {
            OnFwdSync(OUT_AC,pwr,0);
        }//else
}//while
}//main

 

  

 

[溫故知新] 實做比例控制方法之循跡機器人

比例(proportional)控制方法是一種控制理論,可用來讓一個自動控制系統能夠對不同的環境狀況做出不同的反應,誤差愈大時,修正幅度也愈大,反之則只要小幅度修正即可,盡量讓。當然 P控制不是萬能,所以還有後續的積分(Integral)與微分(Differential)控制法,但本文先不介紹。

一般來說, 我們都是機器人循跡這個範例中來應用比例控制方法,對於學生來說是個非常好的練習,可以充分體會理論與現實狀況的差異(ㄎㄎ)

本文內容是發想自[A PID Controller For Lego Mindstorms Robots] 一文,歡迎延伸閱讀,本文中的示意圖也是引用自該網頁,您也可以參考維基百科對於 PID 控制器的定義

傳統的循線方法一言以蔽之就是二分法:向右前方移動,直到偵測到黑線之後向左修正。(白場地黑線,機器人置於左邊)

Basic_bot.

從這裡我們可以看出許多理想性的假設:

1. 每次修正都要能夠回到白色場地,這就是為什麼當軌跡曲率變化太大(例如許多左彎後接一個右彎、髮夾彎甚至直角灣)時,都會在此陣亡…

2. 機器人根本不會直走,因為我們的程式就是這樣寫的,左前方右前方一直重複移動。這樣會造成明明是大直線,但是機器人還在那邊左右左右修正,太慢了。

3. 機器人不知道彎道的變化程度,每次修正的動作皆相同,傳統的兩分法是取黑色軌跡線與白色場地的光值之中間值作為判斷邊界,例如 (30+50) / 2 = 40。小於40視為偵測到黑線,反之則代表在白色場地上。如果光值是46或47,代表此時只有偏離一點點,應該進行小幅度修正就好。但是二分法就是無法作到。

4. 黑就是均勻的黑,白就是均勻的白,怎麼可能嘛!這要考慮到光照,桌面乾淨程度等等…  實際上是不可能有均勻顏色這種事的。

所以由此可以延伸出非常多東西可以深入去玩,您的機器人也會愈來愈聰明:

1. 導入比例控制方法,讓機器人碰到劇烈彎道時可以修正得更快速

2. 導入比例控制方法,當誤差為零時,機器人就是直走!

3. 導入比例控制方法,以本文的設定來說,光值會在30~50之間連續變化,誤差產生時會影響機器人的馬達轉速。以髮夾彎來說,機器人一定會瞬間切入黑色軌跡線較深,這時光值會下降比較多,機器人便是藉由這種方法來得知彎道的曲率,作出更適合的修正。

4. 每次都重新更新判斷邊界值,機器人對於環境的適應力會更高

下圖中我們可以看到二分法就是很簡單的 if / else,機器人只有兩個動作。

到了中間的三階段之後,我們設計一個區間(光值43~47),這時代表機器人略偏但是不算太偏,所以還是直走。直到光值小於43或是大於47代表篇很多了才進行修正。

有三階段就有四階段五階段,最後這麼多階段就會變成一條直線,比例控制方法的比例事實上就是這條線的斜率。斜率愈大代表機器人對於誤差愈敏感,修正幅度也愈大。這在程式中我們是用一個參數 kp 來調整。kp 不是愈大愈好唷!kp過大會讓機器人變得神經兮兮,一點點誤差也一直在修正反而效果不好。這裡都需要反覆地調整,請加油~

light_number_line_3

簡單用 EV3 程式寫一個來玩玩看,請於CAVE實驗室下載唷!

ev3

阿吉老師在淡江電機所開的[機器人程式模擬與開發],就是使用 leJOS Java程式語言來控制樂高NXT機器人,歡迎跟著我們的教學網站一同學習! http://lejosrobot2013.cavedu.com/。以下是上周四的 P控制機器人上課影片與照片

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

2013-10-24 11.15.56 2013-10-24 12.33.34

這是我們另一個使用 NXC 寫的雙光感測器循跡程式,是不是有如刀切豆腐一樣順暢呢?

[youtube=http://youtu.be/0ZMz-CS0bPY]

附上NXC程式碼:

//我是p控制
task main()
{
SetSensorLight(S3);
int kp=2; //比例參數
int light_initial = Sensor(S3); //程式啟動時先抓一次光值,這時請將光感測器所投射出的光圈擺在黑線左測一半處
int light_realtime;                      //即時光值
int vl,vr;                                         //左右輪速
while(true)
{
light_realtime = Sensor(S3);    //更新即時光值
vl = 40 + kp*(light_realtime-light_initial);    //計算左輪速,40 是基礎速度,代表當誤差為0時,機器人將以此速度直走
vr = 40 + kp*(light_realtime+light_initial); //計算右輪速, +/- 是代表進彎時的修正方向,可根據實際狀況修改
OnFwd(OUT_B,vl);                      //出發!
OnFwd(OUT_C,vr);
}

}

0825 崑山科大NXC研習 第二天

感謝崑山科大資工系黃主任的邀約, 三天的研習由CAVE的阿吉老師與小黃老師來講NXC,第三天由探奇的邱老師來和大家分享他在NXT-G的心得。

值得高興的是, 本次報名相當踴躍, 現場人數超過30人!! 其中2/3是外校師生, 感謝大家這麼用功學習唷!! 主動報名的學習動機果然很高,大家對於NXC的問題都很踴躍發問, 只看阿吉與小黃滿場跑幫大家解決問題,不亦樂乎~

第一天實況報導請按我

和書合照一下是一定要的,主任是位非常嚴謹的伯伯。

一早坐第一班6:30高鐵, 8:18到台南. 我和小黃在車上都睡扁了.

上課實況.


崑山資工系另一位老師帶著小朋友一起來聽,他已經有8547了呢,幸福的孩子。

結束之後在校園中合照, 大家辛苦了.

來吃虱目魚肚粥, 真的很好吃!!

赤崁樓前舉杯!!   水晶粉圓好喝, 我還多買一杯上車喝呢.

8/25 崑山NXC研習第一天

阿吉和兆民一早坐6:30的高鐵,感謝藍海文化的林小姐來載我們, 今天一切都很順利呢。本次共有21位老師同學報名, 這樣的成績是相當好的, 也感謝資工系黃主任的支持。

希望很快再有機會到台南吃好吃的虱目魚肚粥。

今天的主題:

  1. NXC-針對LEGO量身訂作的C語言
  2. BricxCC-簡單好用的程式環境
  3. 讓機器人動起來
  4. 程式結構
  5. 感應器
  6. 馬達控制模式
  7. 挑戰題實做

明天會由兆民帶大家實做NXC中型專題, 就交給你囉!後天則請探奇邱老師來幫大家介紹好用又功能強大的NXT-G。

 

8/25 崑山科大 NXC與NXT-G研習

感謝崑山科大資訊工程系暨數位生活科技研究所黃主任邀約, CAVE講師群與探其自然科學教室將於8/26(三)~8/28(五)於崑山科大舉行NXC與 NXTG研習。

這是CAVE第二次去崑山科大辦研習,熱情的台南我們來囉~ 上次來崑山是今年的 4/28,感謝電通系曾主任邀約NXC研習,照片請按我 。

以下是課程簡介:
============================
2009機器人專題研習營

製作機器人是很多人的夢想,但機器人控制牽涉到的科技相當廣泛,舉凡嵌入式系統、微電腦、感測器、機電整合相關技術無所不包,其中軟體設計看不見摸不著,可說最難入門,本研習營以新穎的設備,引領與會者輕鬆進入機器人程式設計領域。

主辦單位: 崑山科技大學資工系
協辦單位:嵌入式軟體聯盟(ESW),探奇自然科學教室
地點: 崑山科技大學資工系(I5301)
費用: 2000元(贈送”機器人新世界NXT與NXC”一本及午餐)

NXC 改版 ready

CAVE的書 “機器人新視界 : NXC與NXT ” 從3月初上市到現在已經3個月了。

期間收到很多熱心老師, 朋友的指正與鼓勵, 這段時間中, 已經把錯誤與需改進之處又run一次, 再版的版本與書面品質也會更好。

改版會新增一個chapter for 藍芽通訊, 預計8月底上市, 屆時還請大家繼續支持CAVE的書。

 

[教學] NXC藍牙淺談

NXT之間的藍牙通訊,簡單說就是在傳值。

透過各種數值的傳遞與接收,NXT之間就有無限的空間可以發揮… 當然,NXC也有強大的藍牙控制指令供我們使用。

今天就來跟大家介紹兩個最基本的函式:

SendRemoteBool(connection,queue,bvalue)

ReceiveRemotBool(connection,queue,bvalue)

從函式的名字很明顯的就可以知道這兩個函式的功用囉!就是傳送及接收一個bool值。看到bool,您是否聯想到觸碰感應器了呢?

以下是一個簡單範例程式,當MASTER壓下觸碰感應器時,SLAVE就會啟動AC馬達:

//MASTER
#define BT_CONN 1
#define INBOX 1
#define OUTBOX 5

task main()
{
     while(true)
     { SetSensorTouch(IN_1); int move = SENSOR_1;
          if(SENSOR_1==1)
              { SendRemoteBool(BT_CONN,OUTBOX,move); }
          else { SendRemoteBool(BT_CONN,OUTBOX,move); }
     }
 }

//SLAVE
#define BT_CONN 1
#define INBOX 5
#define OUTBOX 1

 task main()
{
     while(true)
     { int move; ReceiveRemoteBool(INBOX, true, move);
          if(move==1)
               { OnFwd(OUT_AC,50); Wait(100); Off(OUT_AC); }
     }
}

希望大家喜歡這個小課題, CAVE 宗翰

探奇 的 NXC 書評

探奇原文

本書發展期間, 也承蒙 探奇邱老師的許多指導, 才能這麼順利. 真的很感謝。

以下節錄一段:

文字型程式本來就是高度抽象的敘述,學習起來比較繁雜,有了這本書就能快速應用NXC控制你的NXT機器人。

有興趣的玩家及老師不要錯過此書喔!

第一篇NXC書評

原文: Bridan的blog

很謝謝Bridan 撥空把NXC書看完了, 也有了簡單的書評。 歡迎各位朋友連過去看, 以下只節錄一段:

全書內容和我之前所看的原稿有許多差異,原文是以 NXC 官網發佈的 Guide 和 Tutorial 為藍本,之後再添加很多作者們的經驗與創思,然後他們分工完成這本著作,不單只是一本 NXC 指令翻譯書,更是想學習 NXC 結合 NXT 製作有趣專題的入門參考書。如果發現書中有所疏漏或錯誤,不要忘記到 CAVE小小原始人科學創意工坊 反應及加油鼓勵。

推薦此書給玩 NXT 並有志成為程式設計師的朋友,在業界 C 語言是必會的程式語言,其它電腦程式語言則看應用領域,不同狀況運用不同的語言設計,像 Java 的語法就和 C 蠻像的,其實學好學精一種電腦語言,其它不同的程式語言,通常只要翻翻說明書,很快就觸類旁通。

我們會更努力的!!

Definitive Guide to LEGO MINDSTORMS 2nd Edition – DAVE BAUM

由於不定期出沒在電腦前面, 加上老虎和狐狸都很容易當機, 所以各位如果看到未完成的文章請勿見怪。

推薦度: 75 (滿分100)

主軸: 以10多個有趣的專題來介紹LEGO RCX機器人、 RIS 2.0 (當年RCX玩具版之軟體) 與 NQC程式語言。 

建議讀者: 對積木組裝已有基本程度, 有意自行進修 NQC 程式語言的朋友。 

閱讀難度: 適, 專題後半部份稍難。

特別之處: 介紹了 NQC 與 RIS (Robotics Invention System) 2.0. Dave Baum詳細介紹了 NQC的使用方法與一些小秘訣, 其他的書籍只有用NQC code, 介紹不多。 雖然RIS比 Robolab陽春, 但還是有基本的功能。 

本書共提供了15個專題, 由基本的雙馬達運動機器人開始, 接續談到通訊, datalog, 最後結束於一個有趣的機械手臂。

延伸閱讀:

  1. Maximum Lego Nxt: Building Robots With Java Brains
  2. Lego Mindstorms Nxt Power Programming: Robotics in C
  3. 機器人新視界 NXC與NXT (自己推薦一下…)

首先先介紹這本書的作者, DAVE BAUM, 他是NQC之父。

這本書的第一版已經消失在我家裡面了, 後來又去買了第二版. 兩個版本之間的差異不大。

先看一下內容

第一部份 Fundementals:

  • CH1: Getting started
  • CH2: The RCX
  • CH3: Intorduction to NQC
  • CH4: Construction

前半部是基本的介紹. NQC 與 RIS語法, 與LEGO零件如何組裝等。

第二部份 Robots:

  • CH5: Tankbot
  • CH6: Bumpbot
  • CH7: Bugbot
  • CH8: Linebot
  • CH9: Dumpbot
  • CH10: Scanbot
  • CH11: Tribot
  • CH12: Onebot
  • CH13: Steerbot
  • CH14: Diffbot
  • CH15: Brick Sorter
  • CH16: Vending Machine
  • CH17: Communication
  • CH18: Using the Datalog
  • CH19: Roboarm

後半部是本書精華所在, CH15~19可算是相當精采的範例。 讀者可用相對少量的零件完成功能強大的機器人專案, 其中 Ch19 的機器手臂我們有做出來, 請看以下:

[youtube=http://www.youtube.com/v/U91TjZyYLE0]

 

Masterpieces – LEGO超大型機械手臂 – 基座

基座巧妙地運用了空間, 將電動幫浦與閥門放在支架中, 最頂端再放上旋轉底座。

旋轉底座由於要帶動整隻手臂, 所以使用了兩個馬達, 再使用了120:1的減速比, 8齒帶40齒, 再帶動蝸輪減速箱, 就可以達到120:1的減速比了。

根據Philo的馬達報告, NXT馬達的最大扭力(矩)是50牛頓/cm, PF XL馬達是40牛頓/cm, 咱們的RCX馬達(71427)卻只有6牛頓/cm, 這也差太多了吧…

(感謝探奇的訂正, 更正為牛頓/cm)

如果改用NXT的馬達或是用PF XL馬達, 我想就不需要這麼複雜的齒比了。

1. 電動幫浦與閥門, 請參考LEGO masterpieces 氣壓系統.

2. 支架



這邊要放上基座馬達

這就是帶動底座的馬達, 躲在氣瓶後面的是角度感應器, 需要額外一根軸來帶動.

減速箱來帶動turntable.

用軸牢牢地固定住

我希望LEGO可以出直徑大一點的turntable, 上面的接點有點少呢…

基座全貌

手臂本體就由這接上

Masterpieces – LEGO超大型機械手臂 – 手腕

[youtube=http://www.youtube.com/v/IpOIkm-2wp4]

手腕部分也是個有趣的地方, 在節省空間的前提下, 使用了微型馬達(Micro motor)x2。

為了不影響手腕提起的角度, 還請小侯老師幫我把電線削薄一點. 來看一下照片吧!

上視圖

電線削薄

與手指部分接合

Masterpieces – LEGO超大型機械手臂 – 前言.

本手臂是’LEGO MindStorms Masterpieces”書中第七個專題, 包含了一個手套型的遙控器、使用了兩個RCX、10個馬達 (2個微型馬達)、1個觸碰感應器和4個當年很稀有的角度感應器,還有氣壓系統, 在很多人的幫忙之下, 阿吉把它做完了。

Amazon連結 , 上次到天瓏書局看也還有的買, 照片年代有點久遠, 阿吉會按各部分分成好幾篇來介紹, 有興趣的朋友可以試著實做看看, 會很有成就感呢!

[youtube=http://www.youtube.com/v/RYn0CoEI3ug]

NXC 好書介紹:Lego Mindstorms NXT Power Programming: Robotics in C


今天要跟大家介紹一本書 :Lego Mindstorms NXT Power Programming: Robotics in C

這本書上市兩年了吧, 它是 BricxCC的開發者: John C. Hansen 所寫的,可說是原文書裡學習NXC的聖經。

CAVE的新書也是多多拜讀本書,參考了John許多寶貴的意見,原創者才最了解自己的東西,不是嗎?

書裡從NXT的硬體到軟體都有充分詳細的介紹,不過最主要還是放在介紹NXC及NBC的使用說明上。最後還有幾個非常有趣的專題,像是教你用NXC寫出一個程式,讓你可以利用馬達的轉動在NXT的LCD上繪圖,如何?很酷吧!真的是 Power Programming 唷!

列出書的目錄, 保留原文給大家參考.

Chapter 1 – Getting Started
Chapter 2 – The NXT Hardware
Chapter 3 – The NXT Firmware
Chapter 4 – Building Without Bricks
Chapter 5 – Bricx Command Center
Chapter 6 – NXT Utilities
Chapter 7 – Programming the NXT
Chapter 8 – Advanced Programming
Chapter 9 – Building a Basic Robot
Chapter 10 – Basic NXT Outputs
Chapter 11 – Basic NXT Inputs
Chapter 12 – Advanced NXT Outputs
Chapter 13 – Advanced NXT Inputs
Chapter 14 – Intruder Alert
Chapter 15 – Games People Play
Chapter 16 – Driving Around

歡迎到 NXC 官方網站,可以下載最新版的BricxCC及許多有用的資源。也歡迎到我們的 NXC實驗室