Showing posts with label robot. Show all posts
Showing posts with label robot. Show all posts

Sunday, September 09, 2007

Machine to Transcendent Mind

Robot: mere machine to transcendent mind

前些日子把讀過的機器人書整理上來後,網友 HuaHua 留言推薦了《機器人:由機器邁向超越人類心智之路》。後來我特地跑一趟政大書城,翻閱後才想起幾個月前也在這翻過。如今再次翻閱,還是沒抱回去好好端詳,最大原因是此書主要內容,我在其他諸如書、網路、或論文等,幾乎都涉獵過。

昨天到國家圖書館,無意間發現該書竟躺在那,頻頻向我招手……嗯,這次當然不能再錯過 ^__^

與其說這是本講機器(人)的書,不如說它是探討人造智能(AI)或電腦及機器智慧(Machine Intelligence)發展潛能的書。

Autonomous Mobile Robots

這本書最合我胃口的是第二章〈小心!前有機器車〉,探討作者對機器自走車的實務經驗。裡面提到作者 Hans Moravec 在 Mobile Robot Laboratory 接受 Denning Mobile Robotics 委託,研究如何以二十四個聲納組成的障礙偵測裝置,量測、取得的距離資料,完成自主機器車導航的任務。

聲納是藉由發射一束以三十度角展開的超音波反射回來的聲波來推測距離的,其得到的距離很精確,回音由哪反射回來卻是未知的(因為有三十度的範圍)。所以採用追蹤影像突出特徵的作法無法適用。

作者和學生 Alberto Elfes 合作設計了個新方法解決這個問題。該方法不嘗試找出物體的位置,改而累積計算每個位置所擁有的物性(objectness):

  • 這個架構下,機器人對周遭「物體」的確切身份、甚至存在與否都存疑,但對周遭「位置」的存在卻不容置疑。
  • 因此每個位置被視為一個個永遠存在的水桶,時時刻刻接受並存積著像是小雨般不斷落下、顯示物體佔據該位置的證據。

其具體的作法如下:

  • 將機器人四周的區域以格線劃分,每一小格都紀錄一個數字,代表目前為止,累積對該位置擁有物體(或是該位置空白)的證據。
  • 每當聲納發射一束新的探測聲波,其掃過區域所涵蓋格子的數據,便不斷修正。
  • 格子若位於回聲源,將獲得更多證據,證明有物體存在該範圍內。
  • 格子若位於回聲源與機器人間,將失去這樣的證據(因為若有任何物體存在其間,回聲會從更近的距離傳回)。
  • 由探測聲源往外,聲波強度及其探測準確度,隨距離遞減。所以證據的修正幅度,也要取決於探測聲波在空間中掃過體積(或面積)的大小。

對自主移動機器人有興趣的,想知道機器人如何知道自己身在何方(Localization),如何藉由路徑規劃(Planning),由某個地方到達目的地(Navigation),強烈建議好好翻翻我之前在 Robot Book 閱讀清單也推薦過的 Introduction to Autonomous Mobile Robots 一書。

Power and Capacity

第三章 Power and Presence 主要探討計算能力與機器心智間的關係。曾經關注過電腦發展的人,對這章的推論應該不會太過驚訝:作者一開始先提提怎麼樣能力(如運算速度及記憶容量等)的電腦能達成怎麼樣的任務,然後粗估了人腦運算速度及記憶容量,既然電腦運算能力每年都要倍增,所以估出 2020 年時,個人電腦的能耐會達到人腦級。無論對這議題感到興趣或心存懷疑的,都非常建議也翻翻《心靈機器時代》,當中提到的時間與渾沌的定律The Law of Time and Chaos),很值得一讀。

作者還在這章提到一個非常有意思的主題--電腦史上不同時間點 PC 的記憶容量(megabytes)與運算速度(MIPS)相除,會粗略維持一個常數,約 1 秒鐘(大概等於電腦將整塊記憶體掃一次需要耗費的時間),原因是電腦跟外界溝通的主要對象是人類,所以要受人類的速度感所束縛,原文對這部份描述得很生動:

The megabyte/MIPS ratio seems to hold for nervous systems too! The contingency is the other way around: computers are configured to interact at human time scales, and robots interacting with humans seem also to be best at that ratio.
On the other hand, faster machines, for instance audio and video processors and controllers of high-performance aircraft, have many MIPS for each megabyte.
Very slow machines, for instance time-lapse security cameras and automatic data libraries, store many megabytes for each of their MIPS.
Flying insects seem to be a few times faster than humans, so may have more MIPS than megabytes.
As in animals, cells in plants signal one other electrochemically and enzymatically. Some plant cells seem specialized for communication, though apparently not as extremely as animal neurons. One day we may find that plants remember much, but process it slowly.

Universal Robots

電腦是 Universal Turing Machine, UTM 的一個良好近似,和 UTM 對應的是 Universal Robots, UR 。不同的是 UTM 專職在虛擬的數位空間發揮運算能力, UR 則落實到現實世界裡的感官及行動上。

萬用機器人是第四章的主題,看看作者對這個議題的看法還滿有趣的。而第四章之後的章節雖很讓人眼界大開,但扯得有點遠了,現在還是將它當作科幻小說的情節,看看就好 :p

Suggested Readings

Tags: [] [] [] []

Tuesday, July 31, 2007

Robot Book 閱讀清單

也許拜大廠效應(例如 Google、微軟及鴻海等相繼投入)所賜,也或者只因為熱門 Robot 商品接續問市所致,總覺得這陣子 Robot 愛好者有增多的趨勢。

碰巧這陣子我也 K 了好些 Robot 相關的書,內容包括理論及實作,涵蓋了電子、電機、機械、機構等,趁空檔把這些書整理整理,上來和大家分享 ^__^

要買 Robot 書,原文部份,天瓏那有專櫃,大家可以去翻閱翻閱;此外,若水堂那有許多相關簡中書,許多甚至是日文或英文書的中譯本,強烈建議去那瞧瞧,絕對不會讓您失望的。

以下就把我認為值得一讀的幾本列出來供大家參考:

更詳細的購買資訊,可以參考我利用 Google Docs and Spreadsheets 所作的整理

Tags: [] []

Saturday, December 16, 2006

Motor-controlling PWMs

一個脈寬調變(Pulse-width Modulation, PWM)訊號可控制一顆 DC motor 轉速,或決定一具 servomotor 的方向、位置或轉速。在複雜的機器人身上,常用上好幾顆馬達,因而能以一顆微控制器(microcontroller, uC)產生多組 PWM 訊號是非常實用的。

前陣子在 RobotFun.net 論壇看到一群機器人愛好者討論自製串列伺服控制器(serial servo controller, SSC)的討論。後來又在 CSZone 的 Robotics 版跟 happosaiMasterChang 討論了「以 uC 產生多組 PWM 訊號」的方法。這次就對這個議題作個整理:

Busy Waiting

我們先來看個最直接的作法:

 1: // List 1. PWM loop busy-waiting version (for servo)
 2: 
 3: int main()
 4: {
 5:     // Here put initial code
 6:     ...
 7: 
 8:     for (;;) {
 9:         for (i=0; i<NUM_OF_PWM; ++i)
10:             Pulse(&PWM[i], DutyCycle[i]);  // precision in us
11: 
12:         // calculates the delay of all pulses above
13:         pulse_delay = 0;
14:         for (i=0; i<NUM_OF_PWM; ++i)
15:             pulse_delay += DutyCycle[i];
16: 
17:         Pause(PERIOD - INNATE_DELAY - pulse_delay);  // precision in ms will do
18: 
19:         // Do other thing here
20:         ...
21:     }
22: } 
  • 上面虛擬碼的作法,限制條件是:
    • PERIOD ≥ INNATE_DELAY + pulse_delay
      • INNATE_DELAY 要視核心頻率(Fcore)及 code 最佳化情形來給定。
      • pulse_delay 則嚴重限制了此法能控制的 PWM 組數。
  • 這個方法可造出非常精準的 pulse width ,但產生的 PWM 不夠一般化:
    1. 它要求每個 PWM 的 period 都要一樣。
      • 這在通常的應用,每俱 servo 都一樣時,問題不大。
    2. 當 duty cycle 太大時,可控制的 PWM 組數減少。
      • 對控制 servo 動作的 PWM 而言,相對於 period ,其 pulse width 都不大,所以還可以接受。
  • 因此,此法較適用於控制 servos 。

Time Slicing

為了改進上述缺點,接下來就看看運用 timer interrupts 將時間切片的作法:

 1: // List 2. PWM Timer time-slicing version
 2: 
 3: void interrupt TimerISR_for_PWM1()
 4: {
 5:     ...
 6: 
 7:     for (i=0; i<NUM_OF_PWM; ++i) {
 8:         if (cycle[i] < DutyCycle[i])
 9:             PWM[i] = HI;
10:         else
11:             PWM[i] = LOW;
12: 
13:         ++cycle[i];
14:         cycle[i] %= Period[i];
15:     }
16: } 
  • 這個方法的限制條件為:
    • TICK_INTERVAL ≥ INNATE_DELAY
      • 這裡的 INNATE_DELAY 指的是 interrupt instruction cycles 佔的時間
      • INNATE_DELAY 也由核心頻率(Fcore)及 code 最佳化情形決定。
      • TICK_INTERVAL 是 timer ticks 的間隔時間;減短這個間隔,可造出更精準的 PWM 。
  • duty cycle 最小可為 0 ,最大可佔滿整個 PWM period;
  • 除了用於 servo 外,也非常適於 LED 亮度控制, DC motor 轉速控制等。
  • 只要設好 tick interval,注意要大於 interrupt instructions 執行的時間即可。
  • 相較於 List 1 中 busy waiting 的作法,此法較方便在不同 uC 間移植。
  • 此外,此法有動作冗餘(redundance),較 robust 。

我們可經由去除動作冗餘來換取較少的 interrupt instruction cycles:

 1: // List 3. Another PWM Timer time-slicing version
 2: 
 3: void interrupt TimerISR_for_PWM2()
 4: {
 5:     ...
 6: 
 7:     for (i=0; i<NUM_OF_PWM; ++i) {
 8:         if (cycle[i]==0  &&  DutyCycle[i]>0)
 9:             PWM[i] = HI;
10:         else if (cycle[i] == DutyCycle[i])
11:             PWM[i] = LOW;
12: 
13:         ++cycle[i];
14:         cycle[i] %= Period[i];
15:     }
16: } 
  • 此法比 List 2 作法佔用更少的 instruction cycles ,所以可控制更多 PWMs 。
  • 把 for loop 展開的話,程式雖變得累贅,但可進一步減少 instruction cycles 。
  • 容許的 instruction cycles 受限於 timer ticks 間隔可執行的 instruction 數。

顯然,有個副程式把 List 2 或 List 3 中的 duty cycles 清為 0 是很方便的:

1: // List 4. Initializes PWMs
2: 
3: void ResetPWM()
4: {
5:     for (i=0; i<NUM_OF_PWM; ++i)
6:         //PWM[i] = LOW;
7:         cycle[i] = 0;
8: } 

The Combination

List 2 或 List 3 的作法雖能產生夠一般化的 duty cycles 了,在核心頻率(Fcore)不太大提昇下,想造出高解析(resolution)的 pulse 時,還是得回到 List 1 那種純粹、直接的 loop busy-waiting。

以下就來看看綜合兩者優點(和缺點)的作法:

 1: // List 5. The combination: time-slicing with busy-wating
 2: 
 3: void interrupt TimerISR_for_PWMPeriod()
 4: {
 5:     ...
 6: 
 7:     for (i=0; i<NUM_OF_PWM; ++i) {
 8:         if (cycle[i] == 0)
 9:             bPulseNow[i] = true;
10: 
11:         ++cycle[i];
12:         cycle[i] %= Period[i];
13:     }
14: }
15: 
16: 
17: int main()
18: {
19:     // Here put initial code
20:     ...
21: 
22:     for (;;) {
23:         // for PWM pulse part
24:         for (i=0; i<NUM_OF_PWM; ++i) {
25:             if (bPulseNow[i]) {
26:                 Pulse(&PWM[i], DutyCycle[i]);  // precision in us
27:                 bPulseNow[i] = false;
28:             }
29:         }
30: 
31:         // Do other thing here
32:         ...
33:     }
34: } 
  • 這個綜合法一方面以 interrupt time-slicing 決定 PWM 週期,另一方面又以 loop busy-waiting 產生高解析的 duty cycles 。
  • 它綜合兩者的優點和缺點,非常適用在 servos 的高解析控制場合。

結論

  • 組數不多的 servos 控制訊號,可用 List 1 的 busy wating 產生。
  • 純粹的 interrupt time-slicing 較適用在 DC motors, LED flashing and brightness 及不需高解析控制 servos 的場合。
  • 在要控制盡量多的 servos 且又要求高解析的 pulses 時,也許可以試一下綜合法(List 5)。

補充說明

  • 為了有精準的 duty cycle ,產生 pulse 期間,不可讓其他中斷插進來。
  • 其他工作,例如 SSC 的 command 可在非 pulse 期間處理。

建議閱讀

Tags: [] [] [] [] []

Friday, December 15, 2006

Software Anti-interference

大多數工程製品,零件會變髒、磨損,精密度不如目錄所示。數位電腦是當中的異數,它沒有前述問題,至少它的位元或位元組功能,完全符合廣告宣稱的--當數位混入類比,一切似乎又要跌回原形……

以機器人來說,它有感測器(sensor)得知類比世界的訊息,訊息處理後,又要餵控制訊號給類比世界的致動器(actuator)。撇開外界原本就混雜各式干擾不說,所使用的致動器,往往就是馬達,其本身是高負載,開關高負載會嚴重干擾控制電路(如果共用電源的話),馬達運轉時,尤其是電刷部份,也會持續產生雜訊。這些雜訊除了會影響感測電路及控制訊號外,有時 uC 本身也會因為這些干擾而錯亂。

為了維持機器正常運作,除了硬體設計時把雜訊納入考量外,軟體也不可坐以待斃。以下整理一些簡單、低階的軟體抗雜訊手段:

  • 對輸入訊號濾波
  • 資料冗餘與查驗(data redundance and verification)
    • Majority, voting
    • Cyclic Redundancy Checks, CRC
    • Error Correction Codes, ECC
  • 程式自我測試(program self-testing)
    • Applies CRC/ECC to code section
    • Sets and checks the function ID
  • Action Redundance
    • Instruction repeating
    • Prefers pollings to interrupts
  • Watchdog -- where to kick the dog?
    • Super-loop architecture
      • "Watchdog timers are most effective in cyclic systems where the watchdog is tickled each time through the loop."
      • ref. "Solving the Software Safety Paradox"
      • "One approach is to clear a number of flags before each loop is started, as shown in Figure 2 . Each flag is set at a certain point in the loop. At the bottom of the loop the dog is kicked, but first the flags are checked to see that all of the important points in the loop have been visited. ...For a specific failure, it is often a good idea to try to record the cause (possibly in NVRAM), since it may be difficult to establish the cause after the reset."
      • ref. "Watchdog Timers"
    • RTOS architecture
      • "Watchdogs are somewhat more difficult to implement in multitasking systems due to their non-determinism. I've seen some multitasking systems that use an interrupt to tickle the watchdog. ... If all the tasks were blocked and unable to run, the interrupt method would continue to service the watchdog and the reset would never occur."
      • "A better solution is to use a separate monitor task that not only tickles the watchdog, but monitors the other system tasks as well. for example, a task that must run at least once per second could increment a counter. The monitor task reads the counter and “safes” the system if the task counter stops incrementing at the expected rate. if the monitor task was blocked, it would not tickle the watchdog and the system would reset."
      • ref. "Solving the Software Safety Paradox"
      • "This scheme uses a task dedicated to the watchdog. This task wakes up at a regular interval and checks the sanity of all other tasks in the system. If all tasks pass the test, the watchdog is kicked. The watchdog monitor task runs at a higher priority than the tasks it is monitoring."
      • ref. "Watchdog Timers"
    • Time-triggered architecture
      • "Start the watchdog in the scheduler Start function"
      • "Refresh the watchdog in the scheduler Update function" (called in the timer ISR)
      • ref. "Patterns for Time-Triggered Embedded Systems", p274
      • 在 Update function 踹狗的主因是每個 task 每次都要在 tick interval 內執行完畢,才能確保這種 co-operative 架構執行的正確性和可預測性。
      • 如果改成在 Task-Dispaching function 內踹狗,那就退化成 super-loop 架構的作法了。
      • 如果改以獨立的 monitor task ,固定時間踹狗,就類似 RTOS 架構的作法了。

一言蔽之,這些泰半是些「積『非』成『是』」的方法 :)

建議文選:

Tags: [] [] []

Sunday, November 12, 2006

Robotics, Say it From the Feet

藉著對自主移動機器人(autonomous mobile robot)的興趣,我再次溫習了電子、電機及機械等相關知識,開啟塵封已久的記憶。

前些天更在 CSZone 的 Robotics 版,寫了篇〈從腳說起〉;今日興起,在這重謄了一遍…… :P

註:為什麼不從「頭」說起,而要從「腳」說起呢?一來是為了切合內容主旨,再者也順便暗示這裡談的機器人是以 bottom-up 方式建構,有別於傳統 AI 的 top-down 方式 :)

~~

在《生物世界的數學遊戲》中有一段生動的描述:

有條狗走在我前面……我用心觀察牠沿著路往前走……
牠是動物王國裡運用腿來移動的絕佳例子。
如果仔細觀察,我甚至可以看到牠腳踏到地面的順序:

左後腳、左前腳、右後腳、右前腳,

腳步間隔相等,遵循著同樣的模式,一再重複……

後、前、後、前;
左、左、右、右。

兩個交插的數學序列,充分抓住了狗「行走」的本質……

繼續談論狗腿「步調」(gait)之前,我們不妨先看看一個玩具小車的例子:

車的前方裝著一對光電 sensor ,能將感測到的光依強弱比例轉成電訊號,左、右 sensor 的輸出交叉接到左、右兩具直流馬達驅動電路的控制線上,以帶動兩個輪子。就像飛蛾撲火般,這是一部會跟著光源行進的「逐光」車。

兩具直流馬達,除了拿來驅動逐光車外,如果能讓四腿機器蟲爬行的話,一定更酷。

雖然要讓四腿機器呈現「各種」步調,原則上需要四具馬達;如果我們只想讓這部機器像那隻悠閒散步的狗一樣的步調爬行,兩具馬達就堪擔大任。

談了四足動物後,接下來就說說六足動物(Hexapod)。昆蟲最常見的步調是某一邊的後腳及前腳跟另一邊中間那隻腳同時挪動,然後其餘三隻腳再同時移動,而且與第一組的三隻腳相差半個週期。如此採用三點動,三點不動的方式交替循環,稱為 Alternating Tripod Gait ,簡稱 Tripod Gait。

我們只需利用三顆馬達,就可以為機器昆蟲實作 Tripod Gait。《PIC Robotics》,簡中版《PIC 機器人初學指南》,Chapter 10 Hexapod Walker 專門介紹 Six Legs 的 Tripod Gait 及因而設計出來的機器蟲實作,手癢的可以照著複製一隻。

行文至此,不禁想起〈莊子:秋水〉有一段這樣的對話:

……

夔謂蚿曰:「吾以一足趻踔而行,予無如矣。今子之使萬足,獨柰何?」

蚿曰:「不然。子不見夫唾者乎?噴則大者如珠,小者如霧,雜而下者不可勝數也。今予動吾天機,而不知其所以然。」

蚿謂蛇曰:「吾以衆足行,而不及子之無足,何也?」

蛇曰:「夫天機之所動,何可易邪?吾安用足哉!」

蛇謂風曰:「予動吾脊脅而行,則有似也。今子蓬蓬然起於北海,蓬蓬然入於南海,而似無有,何也?」

……

關於動物的步調,數學家已有很透徹的研究: Stewart 以耦合振盪器網路 (coupled oscillator network)為基礎,利用群論作分類,並提出方向性網路(directional network)做了很好的詮釋。《生物世界的數學遊戲》對此有精彩、深刻的描述。

Tags: [] []

Friday, January 20, 2006

Robot Dream Exposition Taiwan

智慧機器人這個領域的發展,一直都很能引起我的注目,恰巧今年台灣首次舉辦了機器人博覽會,百聞不如一見,週四傍晚也到展覽會場逛逛,長長見識。到會場後,出入口附近免不了安排一些機器人商品在那兜售。如果不想參觀展覽的,或參觀完後覺得意猶未盡的,可以在這裡花錢抱幾具回去過過癮,當然荷包因此大失血是免不了的啦。

言歸正傳,這次的展覽分成「仿生機器人館」、「新一代機器人館」及「機器人教育館」等三大主題館。仿生機器人館比較像電影特效,考驗的主要是機電工程的設計能力,所以我很快就晃過了。新一代機器人館及機器人教育館內的展示很多都強調機器人跟人類間的互動,要達到這個目的,機器人需要具備基本的感知及智慧能力,來接收環境訊息及判斷對訊息如何反應。其中:

Sony 轟動一時的 AiBo 經過多代的演進後,現在已經更趨成熟,成為名符其實的電子機器寵物。

自從 Handa 發表它的 ASIMO ,這幾年下來,人形機器人的二足行走能力也已有長足的進步,現在也已經應用到玩具上了,Robosapien V2 即是一例。

值得注意的是,由於老年化社會的到來,日本致力於發展醫療機器人,Ifbot 就是商品化的例子,具備 5 歲兒童的會話能力,可以用於陪伴獨居的老人。

老實說,參觀完這次的展覽,我覺得花兩百塊的門票不是很值得,感覺有點像只是看看熱鬧,實地接觸一下實體罷了。可能現在資訊太發達了,很多東西在書籍及網路上都可以取得詳盡的訊息。如果你覺得意猶未盡,〈機器人的進化〉一書可以提供更完整的綜覽。此外,下列網站也很值得一逛:

Tags: [] []

Wednesday, June 25, 2003

The Robots

  這次貼出 MIT 關於機器人的一些 Link

Living Machines
http://www.ai.mit.edu/projects/living-machines/

Humanoid Robotics Group:
http://www.ai.mit.edu/projects/humanoid-robotics-group/

Sociable Machines:
http://www.ai.mit.edu/projects/humanoid-robotics-group/kismet/kismet.html


  值得注意的是該 AI Lab 主任 Brooks,前一、兩年完成的著作,今年五月已有中譯:

《Flesh and Machines:How Robots Will Change Us》
中譯:《我們都是機器人

  衝著 Brooks 的名號,就決定購入此書。

  週日購入後,雖只 K 了一半,就趕著到這來,強烈建議大家也買來好好拜讀。

  書中附錄有提出 Brooks 其中一隻機器蟲的軟硬體說明,細節已足夠我們也複製一隻像這樣的機器蟲了。

Tags: [] [] []

Friday, November 29, 2002

機器人的進化

書名:機器人的進化--人工智慧與機器人學的新世紀
   (Robo sapiens--evolution of a new species)
作者:Peter Menzel and Faith D'Aluisio
譯者:林文源
出版:商周

動態大腦(Dynamic Brain)

我們正在研究自我組織與學習的原理,使系統自行發展出智慧。生物學的重要前提是,這個世界具有某種結構,而大腦能辨識這種結構。以此結構為基礎,大腦能經由學習與自我組織而自主發展。

生物體一定有來自基因組的訊息,某種關於如何學習的訊息,告訴我們哪些動作規則可以應付目前系統所面對的問題。我們希望瞭解基因的基本訊息,我們相信頭腦可以由此為基礎開始自行組織。

在統計式學習中,機器擁有關於知覺資料如何產生的統計模型,並利用學習的運作規則來處理資料,以確保能以統計的方式趨向較好的學習結果。

從生物學的觀點來說,我們是由小腦所驅動的。

寇格(Cog)認知

布魯克的「含括結構」(subsumption architecture)將一個系統的行為分為次單位所控制的較簡單行為,這種想法不同於一般由中央控制系統或處理器為整個機器人作決策。

布魯克:「我不認為有較高階的部分,我認為這個理論已經說明了一切,我們對人類過度擬人化了。」

Tags: [] [] [] []