實線 = 真正的值虛線 = 推算程式以為的值兩條線貼得越近,推算得越準
虛線走廊左右各寬 5 公尺,終點在沿路線 20 公尺處。粗點 = 正在急轉閃避(急閃);✕ = 撞上、飛出走廊或掉高度;旗 = 抵達。
| 機身歪幾度的來源 | 未抵達 | 撞柱 | 飛出走廊 | 掉高度 | 歪幾度估錯多少(中位數) | 速度估錯多少(中位數) |
|---|---|---|---|---|---|---|
| 直接拿正確答案(拿來比的上限) | 53 | 37 | 16 | 0 | — | 0.096 m/s |
| 全部用感測器推算(真機的處境) | 61 | 43 | 15 | 3 | 1.59° | 0.098 m/s |
事先寫好的判定標準是:比「直接拿正確答案」多失敗不超過 10 場,掉高度不超過 5 場。實際是多 8 場與 3 場,通過。兩邊飛的是同樣的 100 個場景,一場對一場比較。
左上是從後面跟拍無人機的 3D 畫面,黃線是走廊的邊界。左下是腦看到的兩眼相機畫面。右邊每個點是一顆神經細胞,亮起來表示它正在放電(送出訊號);這裡畫的是這次用到的那一部分腦,共 11,485 顆。畫面底部第一行是機身歪了幾度估錯多少,以及真正歪了幾度。第二行是方向估錯幾度,以及偏離走廊多遠。兩支影片都是「全部用感測器推算」,1× 真實時間。
飛控拿真值姿態(下面叫「直接拿正確答案」)=模擬器直接把「你現在歪了幾度」的正確答案交給飛控。這是成績的上限,真機(真的無人機)不可能有。
全部用感測器估計(下面叫「全部用感測器推算」)=飛控拿不到答案,只能靠陀螺儀(量轉動的感測器)、加速度計(量加速的感測器)、光流感測器(從畫面的移動看出自己動多快)、測距感測器(量距離)自己推算。這才是真機的處境。控制領域把這種推算叫「估計」。感測器的讀數本身有雜訊,靜止時也會多算一點誤差,所以推算出來的值一定帶誤差。這一頁的重點就是誤差有多大、什麼時候會失控。
像是有人在旁邊一直報「你歪了 23 度」,對上閉著眼睛只靠身體感覺判斷。這一系列實驗做的事,就是把「模擬器報答案」一個一個換成「自己感覺」。機身歪了幾度是最後一個,也是最難的一個。
這一頁是飛行回放。無人機朝指定的方向穿過柱子林,路線兩旁用虛線畫出一條走廊。閃柱子由真腦(照真果蠅的接線)負責。之前還剩一樣東西是模擬器直接給正確答案的:機身歪了幾度。這一關把它也拿掉。負責控制飛行的程式(飛控)要用到四個量:方向、高度、速度、機身歪了幾度。現在四個全部由人寫的程式,用機上的感測器推算。
陀螺儀量機身轉多快,再把讀數一直累加。加速度計量到的是空氣阻力,阻力和速度成正比(−k×速度),所以可以從它反推速度,再從速度推回機身歪了幾度。加速度計靜止時也會多算的誤差,另外用一個反應很慢的程式來估。光流感測器的讀數只給這個程式用,不直接拿來算機身歪了幾度。前一版讓光流直接參與算機身歪了幾度,結果有 22 個場景在急閃時估錯到不可收拾。高度用測距感測器(ToF)量。方向用陀螺儀加上看天空認方向的羅盤(靠天空的偏振光,也就是太陽光在天空形成的固定圖樣,昆蟲靠它認方向)。
腦只負責一件事:看到柱子逼近時,決定往左閃還是往右閃(每場約 13–22 次)。認方向不是腦做的。要朝哪個方向飛、現在偏了多少,是另一段人寫的程式用陀螺儀加看天空認方向的羅盤算的。
本來的計畫是讓腦自己認方向。果蠅腦裡真的有一個指南針迴路:腦裡有一圈神經細胞(所在的區域叫中央複合體),頭轉到哪個方向,這一圈上就有一個活動亮點跟著轉,蒙住眼睛也還記得住。我們用真腦試著重現它。判定標準是三件事都要做到:跟得上轉動、蒙眼後記得住、蒙眼後還能繼續轉。人工調整參數試了四條路,用梯度學習(讓電腦自己調整參數的方法)試了一條,沒有一組同時做到三項。所以方向只好交給人寫的程式,腦在這裡沒有參與認方向。細節見腦內指南針那一頁。
從正式那一批的 100 場裡挑:2 個是兩種做法都抵達,1 個是直接拿正確答案時抵達、但用感測器推算時撞柱,1 個是用感測器推算時把機身歪了多少估錯到不可收拾、掉高度。重飛一次的結果,和正式結果每個場景都相同。
給想查原始紀錄的人:這一頁對應實驗 M4g3,屬於 M4 線。按鈕上的 seed 就是場景編號。100 個場景是 seed 4100–4199;抵達的影片是 seed 4103,崩掉的影片是 seed 4139。