ARKit增強現實版實景導航開源

2021-09-23 11:28:56 字數 3772 閱讀 7067

arkit:使用攝像頭和運動資料來繪製使用者移動時本地的地圖。

corelocation:使用wifi和gps資料來確定位置,精度比較低。

arkit + corelocation:將高精度的ar與gps資料相結合。

將這些技術結合起來的潛力是巨大的,在許多不同的領域有著很多的應用。 這個庫有兩個主要的特點:

位置精度的改進目前還處於實驗階段,但在未來可能是最重要的組成部分。

由於目前還有一些工作尚未完成,並且存在其他方面的原因,因此最好由乙個開放的社群來為這個專案服務,而不是通過github issues的方式。 所以我開放了乙個slack組,任何人都可以加入進來,討論有關這個庫的改進和大家的工作。

加入slack社群

arkit需要ios 11系統,並支援以下裝置:

這個庫包含了arkit和corelocation框架, 同時還包含了乙個類似於demo 1的演示程式。

將本庫新增到你的podfile中:

`pod 'arcl'`
在終端中,進入你的專案目錄,然後執行:

`pod update`

`pod install`

新增nscamerausagedescriptionnslocationwheninuseusagedescription到 plist檔案中以新增乙個簡短說明(請參考演示專案)

arkit+corelocation/source目錄中的所有檔案新增到專案中。

匯入arkit、scenekit、corelocation和mapkit。

新增nscamerausagedescriptionnslocationwheninuseusagedescription到 plist檔案中以新增乙個簡短說明(請參考演示專案)

要在一座建築物上放置乙個標註點,例如倫敦的金絲雀碼頭,我們要使用包含arcl的主要類:scenelocationview

首先,匯入arcl和corelocation,然後將scenelocationview宣告為屬性:

import arcl

import corelocation

class viewcontroller: uiviewcontroller

當獲取到焦點時,呼叫scenelocationview.run(),當中斷時,呼叫scenelocationview.pause(),例如移動到不同的視角或者退出應用程式。

func viewdidload()
在呼叫run()之後,就可以新增座標了。 arcl附帶乙個名為locationnode的類,它是3d場景中的乙個物件,具有真實世界的位置,並且可以在世界範圍內顯示其他一些屬性。locationnode是scenekit的scnnode的子類,也可以進一步子類化。 對於這個例子,我們將使用乙個名為locationannotationnode的子類,我們用它在世界上顯示乙個總是面向我們的2d影象:

let coordinate = cllocationcoordinate2d(latitude: 51.504571, longitude: -0.019717)

let location = cllocation(coordinate: coordinate, altitude: 300)

let image = uiimage(named: "pin")!

let annotationnode = locationannotationnode(location: location, image: image)

預設情況下,你設定的影象會以給定的尺寸顯示出來,例如,如果你提供了乙個100x100的影象,則會在螢幕上顯示為100x100畫素大小。 這意味著遠處的注釋點與近處的注釋點看起來大小是相同的。 如果你希望按距離的遠近進行縮放,可以將locationannotationnode的scalerelativetodistance設定為true

scenelocationview.addlocationnodewithconfirmedlocation(locationnode: annotationnode)
就是這樣了。 如果你設定scenelocationview的幀,則現在應該會看到canary wharf上方懸停的標註點了。

這個庫以及演示程式附帶了一些額外的配置功能。這些都在文件裡做了詳細介紹,一定要去看看。

scenelocationview是arscnview的乙個子類。 請注意,雖然這樣可以讓你完全訪問arscnview以通過其他方式去使用它,但你不應將委託設定為另乙個類。 如果你需要使用委託功能,那麼應該將scenelocationview子類化。

有乙個我個人無法攻克的難題,目前iphone正北校準精度最高為15º。這對地圖導航來說還好,但是要將東西放在ar世界上時,它就成為了乙個問題。

我相信通過使用各種ar技術可以攻克這個問題。

為了改善這個問題,我在庫中新增了一些函式,可以用來調整正北方向:

要使用這些函式,你要將scenelocationview.usetruenorth設定為false,然後在開始之前將裝置指向北方的大致乙個方向,這樣它才能更接近正北。將usetruenorth設定為true(預設),它會根據自己的感覺不斷調整正北方。

我的建議是你所處位置的正北方的附近放置乙個地標,使用座標在那個地方放置乙個物件,然後使用movesceneheading函式來調整場景,直到它們排成一條線。

corelocation每1-15秒更新一次位置,精度從150公尺到4公尺不等。有時候,你會收到更精確的讀數,如4公尺或8公尺。同時,ar使用運動和相機資料來建立本地世界的地圖。

使用者可能會收到精度為4公尺的位置,然後他們向北走10公尺,並接收到另乙個位置,讀數精確到65公尺。 這個精度為65公尺的讀數是corelocation可以提供的最好的精度,但是當獲取到4公尺精度的讀數時,程式知道使用者在ar場景中的位置,以及接著朝北走了10公尺,我們可以通過轉換這個資料來提供乙個新的精度為4公尺的座標。這樣就精確到了大概100公尺。

我曾經提到,目前這些尚處於實驗階段。當使用者經過某個場景的時候,arkit偶爾會發生錯亂,並給出錯誤地位置資料。 這個問題似乎也影響到了「尤拉角度」或者有關裝置的方向資訊。所以,在走過一小段距離之後,它可能會認為你目前正向著另外乙個方向行走。

雖然蘋果今後會改進arkit,但我認為,為了避免出現這些問題,我們需要自己進行改進,例如識別出何時會出現問題並進行糾正,以及通過將位置資料與我們假定的位置進行比較,以確定是否已經超過了某個值。

我們需要進一步優化定位演算法。

例如,有一種技術是檢視最近的位置資料,轉換使用者行程中的每乙個點,然後使用資料點之間的重疊來更精確地確定使用者可能的位置。

作者@andrewprojdent,以及相關社群。

在mit許可證的條款下開源。

文章為簡譯,更為詳細的內容,請檢視原文

增強現實Augmented Reality簡介

或許我們可以想象乙個景象 有一天,我們走在路上逛街,眼睛的視線遠遠地看到對街轉角有一家牛排店,這個時候,這家牛排店的所有選單與價目表,竟然出現在虛空之中,並且穿過穿流的車輛和人群浮現到我們的面前 在不管這個選單和價目表,繼續往前走,走沒幾歨之後,向 左前方一看,發現有一家電影院,當視線接觸到電影院的...

AR增強現實 Augmented Reality

增強現實 augmented reality,簡稱 ar 是一種實時地計算攝影機影像的位置及角度並加上相應影象的技術,這種技術的目標是在螢幕上把虛擬世界套在現實世界並進行互動。這種技術最早於1990年提出。隨著隨身電子產品運算能力的提公升,增強現實的用途越來越廣。ar系統具有三個突出的特點 真實世界...

AR增強現實 Augmented Reality

增強現實 augmented reality,簡稱 ar 是一種實時地計算攝影機影像的位置及角度並加上相應影象的技術,這種技術的目標是在螢幕上把虛擬世界套在現實世界並進行互動。這種技術最早於1990年提出。隨著隨身電子產品運算能力的提公升,增強現實的用途越來越廣。ar系統具有三個突出的特點 真實世界...