阅读 405

AR 导航的几种实现思路

说明

当 AR 技术刚出现的时候,很多人都认为导航是重要应用方向。但是,ARKit 已经发展到 ARKit 3 了,完善的AR导航方案也没有出现。 因此,我们只能用一些技巧来实现一些简单的 AR 导航。

固定点位导航

固定点位导航,就是在 AR 中放置几个固定的点,比如点 A,B。这种导航只能从 A 点到 B 点,或者从任意位置沿直线先到 A 点,然后再到 B 点。

当然了,点位的确定一般需要借助图片锚点/物体识别锚点,或者用世界地图重定位先确定世界坐标原点,再确定点 A,B 的位置。

缺点

这样的缺点可想而知,非常不灵活。点位需要提前确定,起点位置也受限。比如我起点已经在 AB 之间了,仍然会引导我先走到 A 点,再走到 B 点。除非添加大量判断代码,或者使用图相关的算法。

优点

写得快,无需联网,无需额外信息,简单可靠。

寻路算法导航

在 iOS 中使用无向图等算法,其实不必自己从头写。GameplayKit框架中就自带了几种寻路算法,包含有向图/无向图/A* 等算法。

苹果官方文档 Pathfinding

比如,用 GKGridGraphGKGridGraphNode,其实就可以实现网格寻路,效果类似于A* 算法

GKGraphGKGraphNode 就可以实现有向图/无向图的寻路,效果类似于迪杰斯特拉(Dijkstra)算法

还有更好用的 GKObstacleGraphGKGraphNode2D,可以实现在有障碍物的连续空间导航,可绕过障碍物,找到最短路径。

缺点

缺点也有,就是需要提前准备好区域地图,哪些区域是连通的,哪些地方是不可进入的障碍物区域。

优点

自由指定起点终点,自动避障,无需联网。

结合地图导航

而现有的地图 SDK 中的导航算法已经非常完善,不仅能任意指定起点终点,还会自动避开障碍物,找到最短/最快路径。我们可以将 AR 与地图类 SDK 结合,实现导航方案。

比如,仿写百度地图的3自由度 AR 导航,利用百度地图 SDK 与 ARKit,实现了简单的 AR 导航功能。 如何仿写一个简易版的3自由度 AR 导航

又比如,这个开源项目,利用 ARKit 和 CoreLocation 框架,实现了 6 自由度的 AR 导航。值得借鉴。 ARKit-CoreLocation

缺点

需要 GPS 和定位权限,在室内使用受限。需联网以使用地图 SDK 的部分功能。GPS 近距离误差大。

优点

地图信息内置,寻路算法先进,支持多种策略,另有偏航和重新算路,语音播报等功能。

关注下面的标签,发现更多相似文章
评论