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: [] []

1 comments:

Yukuan said...

狗的這個步調,用 Python 表達如下:

>>> seq1 = ['left', 'left', 'right', 'right']
>>> seq2 = ['rear', 'front', 'rear', 'front']
>>> zip(seq1, seq2)
[('left', 'rear'), ('left', 'front'), ('right', 'rear'), ('right', 'fron
t')]