我們第一個(gè)想法是利用藍(lán)牙信號(hào)在室內(nèi)去操控飛行器。在這個(gè)飛機(jī)器上搭載 iPhone,這樣可以通過(guò)獲取從室內(nèi)發(fā)送來(lái)的一些信號(hào)轉(zhuǎn)化為三維坐標(biāo)來(lái)獲取它的當(dāng)前位置。
然而,我們第一實(shí)驗(yàn)是用信號(hào)的強(qiáng)弱來(lái)測(cè)量信標(biāo)和 iPhone 之間的距離,但是結(jié)果令人失望。當(dāng)測(cè)量到兩到三米多的距離(大約 6 到 10 英尺)的時(shí)候發(fā)現(xiàn)信號(hào)和正常準(zhǔn)確的信號(hào)相差太遠(yuǎn)。
最后放棄了這個(gè)想法,轉(zhuǎn)而開(kāi)始尋找替代的方案。
因?yàn)槲覀儾幌肫x讓飛行器搭載 iPhone 自己導(dǎo)航的這個(gè)想法,所以我們決定試一下老的 GPS 設(shè)備。顯然這個(gè)需要我們移動(dòng)到戶(hù)外這樣才能更好的獲取到 GPS 信號(hào)。事實(shí)證明。冬天在柏林的測(cè)試非常的寒冷,甚至有微風(fēng)也影響了飛行器的飛行。
總體的計(jì)劃就是有一個(gè) iPhone 可以搭載在飛行器上,然后通過(guò) WiFi 連接它,通過(guò) Core Location 可以知道當(dāng)前位置和方向然后控制飛行器飛往它的目的地坐標(biāo)。
為了讓這個(gè)項(xiàng)目更有趣,我們又添加了一個(gè) iPhone,讓這個(gè) iPhone 通過(guò)使用新的 multipeer APIs 與搭載在飛行器上的 iPhone 建立聯(lián)系,并且發(fā)送它自己的位置作為飛行器的目的地坐標(biāo)。搭載 iPhone 的飛行器會(huì)朝著另外一個(gè) iPhone 移動(dòng),另外通過(guò)連接上這個(gè)飛行器也可以發(fā)送起飛和降落的命令。
制定一個(gè)軌道通往 Chris 家,并且讓飛行器在這個(gè)軌道上飛行,這個(gè)讓飛行器能夠受我們控制的想法很誘人。不幸的是,事情和預(yù)期還是有區(qū)別的,寒冷的溫度和外面的風(fēng)同樣影響了飛行器,以及電池的壽命和我們要在很短時(shí)間按下正確的方向。(但是對(duì)于 Chris 來(lái)說(shuō)這還不是糟糕的,我們把他的iPhone綁到了飛行器,所以通常我們測(cè)試的時(shí)候他都追著飛行器,生怕看不到他的 iPhone。)
在我們的項(xiàng)目中我們使用了標(biāo)準(zhǔn)的 AR Drone 2.0,為了把 iPhone 安裝到飛行器上,我們用了一些泡沫塑料裹著 iPhone 然后用膠帶綁到飛行器上,最初我們是想把它綁在飛行器的頂部,但是這個(gè)不是很穩(wěn)定。這個(gè)飛行器幾乎不能搭載任何東西,以至于很輕的 iPhone 的都會(huì)很顯著的影響飛行的穩(wěn)定。
http://wiki.jikexueyuan.com/project/objc/images/8-1.jpg" alt="" />
但是飛行器起飛后搖晃的很,所以我們決定把iPhone綁在飛行器的底部來(lái)降低重心,事實(shí)證明,這表現(xiàn)的很好,由于現(xiàn)在飛行器的最下面是 iPhone,我們使用大量的拉鏈領(lǐng)帶來(lái)保護(hù) iPhone,讓這個(gè)飛行器不容易突然墜落。(這也是一種來(lái)方法來(lái)緩解 Chris 的顧慮)
http://wiki.jikexueyuan.com/project/objc/images/8-2.jpg" alt="" />
就像上面提到的那樣,搭載在飛行器上的iPhone的通過(guò) WiFi 連接另外一個(gè) iPhone,通過(guò)這個(gè)連接我們可以通過(guò) UDP API 來(lái)發(fā)送導(dǎo)航命令,雖然這一切看上去比較的晦澀,但是一旦我們搞清楚這個(gè)原理基礎(chǔ),就會(huì)工作的很好。Daniel 在這篇文章中詳細(xì)的介紹了 Core Foundation networking 這個(gè)類(lèi)如何使用才能讓它工作。
通過(guò)使用 iPhone 和飛行器之前的通訊,導(dǎo)航應(yīng)用也需要處理導(dǎo)航部分內(nèi)容,這個(gè)應(yīng)用通過(guò) Core Location 來(lái)處理它當(dāng)前位置和方向然后計(jì)算它與目的地的距離,你可以通過(guò)這篇文章了解它是如何工作的。
這個(gè)客戶(hù)端應(yīng)用唯一的工作就是發(fā)送目的地坐標(biāo)給搭載飛行器的 iPhone 和一些基礎(chǔ)的命令例如起飛和降落。它會(huì)通過(guò) multipeer connection 來(lái)通知它自己和簡(jiǎn)單的廣播它的位置給所有連接的 peers。
http://wiki.jikexueyuan.com/project/objc/images/8-3.jpg" alt="" />
因?yàn)槲覀兿胗幸环N方法不用飛行很多次就可以測(cè)試整個(gè)配置,而且我們也想待在室內(nèi),所以我們給這個(gè)應(yīng)用添加了兩種模式。第一種模式就是簡(jiǎn)單的發(fā)送地圖上的中心位置作為它當(dāng)前的位置。這種方法我們可以平移地圖,模擬改變目的地坐標(biāo),另一種模式是通過(guò) Core Location 發(fā)送真實(shí)的iPhone的位置。
在我們短暫的測(cè)試中由于時(shí)間的原因我們只使用第一種模式,并且由于惡劣的天氣,我們某人追逐飛行器的不能夠?qū)崿F(xiàn)了。
其實(shí)這是一個(gè)非常有趣的項(xiàng)目,我們實(shí)驗(yàn)了很多有趣的APIs。您可以查看后續(xù)的關(guān)于 Core Foundation networking,導(dǎo)航應(yīng)用和客戶(hù)端的文章的具體細(xì)節(jié)。