webentwicklung-frage-antwort-db.com.de

Wie erkennt man vertikale Ebenen in ARKit?

Wie ist es möglich, eine vertikale Ebenenerkennung (d. H. Für Wände) zu implementieren?

let configuration = ARWorldTrackingSessionConfiguration()
configuration.planeDetection = .horizontal //TODO
49
Jan F.

Edit: Dies wird jetzt ab ARKit 1.5 (iOS 11.3) unterstützt. Verwenden Sie einfach .vertical. Ich habe den vorherigen Beitrag aus historischen Gründen aufbewahrt.


TL; DR

Die Erkennung vertikaler Ebenen ist (noch) keine Funktion in ARKit. Das .horizontal Deutet darauf hin, dass an dieser Funktion gearbeitet wird und sie möglicherweise in Zukunft hinzugefügt wird. Wenn es nur ein Boolescher Wert wäre, würde dies darauf hindeuten, dass er endgültig ist.

Bestätigung

Dieser Verdacht wurde durch ein Gespräch mit einem Apple Ingenieur bei WWDC17 bestätigt.

Erläuterung

Sie könnten argumentieren, dass es schwierig wäre, eine Implementierung dafür zu erstellen, da es unendlich viel mehr Ausrichtungen für eine vertikale Ebene als für eine horizontale gibt, aber wie rodamn gesagt, ist dies wahrscheinlich nicht der Fall.

Aus rodamn’s Kommentar: Im einfachsten Fall wird eine Ebene als drei koplanare Punkte definiert. Sie haben einen Oberflächenkandidaten, sobald ausreichend koplanare Merkmale entlang einer Oberfläche erkannt wurden (vertikal, horizontal oder in einem beliebigen Winkel). Es ist nur so, dass die Normalen für Horizontale entlang der Auf-/Ab-Achse liegen, während die Normalen der Vertikalen parallel zur Grundebene verlaufen. Die Herausforderung besteht darin, dass schmucklose Trockenbauwände in der Regel nur wenige visuelle Merkmale aufweisen und einfache Wände häufig unentdeckt bleiben. Ich vermute sehr, dass aus diesem Grund die Funktion .vertical Noch nicht verfügbar ist.

Es gibt jedoch ein Gegenargument zu diesem . Weitere Informationen finden Sie in den Kommentaren von rickster.

66
Zack

Unterstützung hierfür bietet iOS 11.3:

static var vertical: ARWorldTrackingConfiguration.PlaneDetection

Die Sitzung erkennt Flächen, die parallel zur Schwerkraft sind (unabhängig von der anderen Ausrichtung).

https://developer.Apple.com/documentation/arkit/arworldtrackingconfiguration.planedetectionhttps://developer.Apple.com/documentation/arkit/arworldtrackingconfiguration.planedetection/2867271-vertical

6
janpio

Apple veröffentlicht iOS 11.3 mit verschiedenen Updates für AR, einschließlich ARKit 1.5. In diesem Update enthält ARKit die Fähigkeit von ARKit, virtuelle Objekte auf vertikalen Oberflächen wie Wand und Tür zu erkennen und zu platzieren.

Die vertikale Unterstützung wird jetzt in ARWorldTrackingConfiguration unterstützt

let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
sceneView.session.run(configuration)
5
shri

Da das iPhone X mit einer nach vorne gerichteten Tiefenkamera ausgestattet ist, gehe ich davon aus, dass eine nach hinten gerichtete Kamera in der nächsten Version und möglicherweise in der .vertical Fähigkeit wird bis dahin delegiert.

2
Mike M

ich habe es mit Unity gemacht, aber ich muss meine Mathe machen.

Ich verwende Random Sample Consensus, um die vertikale Ebene aus der von ARkit zurückgegebenen Punktwolke zu ermitteln. Es ist so, als würde man eine Schleife haben, die zufällig 3 Punkte auswählt, um eine Ebene zu erstellen, und die dazugehörigen Punkte zählt, um zu sehen, welcher Versuch der beste ist.

Es funktioniert. Aber weil ARkit nicht viele Punkte zurückgeben kann, wenn die Wand einfarbig ist. So funktioniert es in vielen Situationen nicht.

1
Sunny Chow

Apple soll an zusätzlichen AR-Funktionen für das neue iPhone arbeiten, d. H. An zusätzlichen Sensoren für die Kamera. Möglicherweise ist dies eine Funktion, wenn diese Gerätefunktionen bekannt sind. Einige Spekulationen hier. http://de.businessinsider.com/Apple-iphone-8-rumors-3d-laser-camera-augmented-reality-2017-7 und eine andere Quelle https: // www .fastcompany.com/40440342/Apple-arbeitet-hart-an-einem-iphone-8-rückseitigen-3D-Laser-für-Ar-und-Autofokus-Quelle

0
Alex McPherson

In ARKit 1.0 gab es nur .horizontalenum 's Fall für die Erkennung von horizontalen Flächen wie einem Tisch oder einem Boden. In ARKit 1.5 und höher gibt es .horizontal und .vertical Typeneigenschaften eines PlaneDetectionstruct, der OptionSetprotocol entspricht.

Verwenden Sie den folgenden Code, um eine vertikale Ebenenerkennung in ARKit 2.0 zu implementieren:

configuration.planeDetection = ARWorldTrackingConfiguration.PlaneDetection.vertical

Oder Sie können die Erkennung für beide Flugzeugtypen verwenden:

private func configureSceneView(_ sceneView: ARSCNView) {

    let configuration = ARWorldTrackingConfiguration()
    configuration.planeDetection = [.horizontal, .vertical]    //BOTH TYPES
    configuration.isLightEstimationEnabled = true
    sceneView.session.run(configuration)
}

Außerdem können Sie ARSceneManager eine Erweiterung hinzufügen, um die Delegatenaufrufe zu verarbeiten:

extension ARSceneManager: ARSCNViewDelegate {

    func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
        guard let planeAnchor = anchor as? ARPlaneAnchor else { 
            return 
        }
        print("Found plane: \(planeAnchor)")
    }
}
0
ARGeo