iOS ARKit LiDAR 에 대해
iPhone 12 Pro 부터 LiDAR 센서를 지원한다고 합니다! ( Pro 이상부터 iPad Pro는 5세대부터 )
자율주행 자동차에도 사용되는 LiDAR센서가 어떻게 동작하고 어떨 때 사용하는지 간단하게 알아보도록 하겠습니다!
LiDAR
빛을 쏘고, 그 빛이 반사돼서 돌아오는 시간을 계산해서 자신의 환경에 위치한 물체의 실제 크기를 측정할 수 있게 해줍니다.
iPhone App 에서는 LiDAR를 어떻게 사용할까요?
ARKit과 함께 사용해서 증강현실 성능을 개선하기 위해서 사용하기위해 시작했다고 봐도 무방할 정도로 이와 관련된 앱이 많이 만들어졌습니다.
포켓몬 Go 처럼 실제 환경에서 포켓몬이 조금더 정교하게 위치하게 할 수 있게 하고,
이케아 제품 가구 같은 경우, 우리 집 환경에 맞춰서 가구의 실제 크기 등을 비교하고 구매를 할 수 있습니다.
이제 LiDAR sensor가 대충 어떤 것을 하는 지 알았으니 어떻게 사용하는지 알아볼까요?
앞서 말했듯이 LiDAR sensor는 AR을 개선하기 위해 만들어 졌죠. ( 물론 AR에서만 사용하는 것은 아닙니다! )
따라서 iOS14 부터 LiDAR sensor를 사용할 수 있는 코드를(depth data) ARKit에서 제공하게됩니다.
(현재는 AVFoundation에서도 제공, iOS15.4이상부터)
광각 카메라의 컬러 RGB 이미지와 LiDAR 스캐너의 깊이 등급이 머신러닝 알고리즘을 사용하여 함께 융합되어 API를 통해 depth map을 생성 합니다.

class ARFrame : NSObject {
var sceneDepth: ARDepthData? { get }
}
ARDepthData는 두 가지 유형의 깊이 데이터에 접근 하는데
class ARDepthData : NSObject {
unowned(unsafe) var depthMap: CVPixelBuffer { get }
unowned(unsafe) var confidenceMap: CVPixelBuffer? { get }
enum ARConfidenceLevel : Int, @unchecked Sendable
}
depthMap과 confidenceMap에 접근할 수 있습니다.
depth는 카메라 평면으로부터 세계의(world, 카메라가 바라보는) 한 지점의까지의 거리에 해당하는 depth를 가져옵니다.
dapthMap은 ARFrame에서 캡쳐된 이미지보다 해상도는 작지만 가로 세로 비율(aspect ratio)은 동일하게 유지됩니다.
LiDAR를 이용한 깊이 측정은 물체에서 반사되는 빛을 기반으로 하기 때문에 depthMap의 정확도는 주변 환경의 특성에 의해 영향을 받을 수 있습니다!

confidenceMap 은 이러한 정확도를 필터링하는데 도움을 줍니다.
반사율이 높은 표면이나 흡수율이 높은 표면은 깊이의 정확도를 낮출 수 있음.
각 깊이 픽셀에 대해 ARConfidenceLevel 값이 있으며, 이 값은 낮음, 중간 또는 높음 중 하나일 수 있으며 응용 프로그램의 요구 사항에 따라 깊이를 필터링하는 데 도움이 됩니다.
public enum ARConfidenceLevel : Int, @unchecked Sendable {
case low = 0
case medium = 1
case high = 2
}
참고 자료:
https://developer.apple.com/videos/play/wwdc2020/10611/?time=1203
https://velodynelidar.com/blog/guide-to-lidar-wavelengths/
https://www.geoweeknews.com/news/makers-of-pok-mon-go-acquire-3d-scanning-app-scaniverse
https://www.lovecreative.com/blog/3-x-brands-doubling-down-on-ar