پلتفرم ARCore راهحل Google برای واقعیت افزوده در اندروید است که از دوربین و حسگرهای اینرسی گوشی هوشمند برای ردیابی موقعیت در فضا استفاده میکند. به گفته Google AR Developers, 2025، این پلتفرم از Motion Tracking، Environmental Understanding و Light Estimation پشتیبانی میکند — سه فناوری اساسی برای قرار دادن اشیاء مجازی در محیط واقعی. معماری چندسکویی به توسعهدهندگان اجازه میدهد برنامههای AR را برای اندروید، iOS، Unity و Unreal Engine با یک پایه کد واحد ایجاد کنند.
نکات اصلی
ARCore — یک پلتفرم واقعیت افزوده از Google است که در سال ۲۰۱۸ به عنوان جانشین Project Tango در قالبی سبکتر و در دسترستر معرفی شد. برخلاف Tango که به حسگرهای عمق تخصصی نیاز داشت، ARCore روی گوشیهای هوشمند استاندارد اندروید کار میکند و فقط از دوربین و حسگرهای اینرسی (IMU) استفاده میکند.
ARCore از سه فناوری کلیدی استفاده میکند: Motion Tracking برای ردیابی موقعیت دستگاه، Environmental Understanding برای تشخیص سطوح افقی و عمودی و Light Estimation برای تنظیم نور اشیاء مجازی با محیط واقعی. این سه فناوری امکان قرار دادن اشیاء AR را فراهم میکنند که روی هر سطحی طبیعی به نظر میرسند.
طبق Google I/O 2024، ARCore روی بیش از ۱ میلیارد دستگاه اندرویدی از جمله گوشیهای Samsung، Xiaomi، Huawei، OnePlus، Google Pixel و غیره پشتیبانی میشود. این پلتفرم با Google Play Services for AR ادغام شده است که امکان بهروزرسانی ARCore را از طریق Google Play Store مستقل از نسخه اندروید فراهم میکند.
در طول شش نسخه، ARCore تحول قابل توجهی داشته است: ARCore 1.0 — ردیابی پایه و تشخیص سطوح؛ ARCore 1.2 — سطوح عمودی و Augmented Images؛ ARCore 1.7 — Cloud Anchors برای جلسات چندنفره؛ ARCore 1.10 — Augmented Faces برای ردیابی حالات صورت.
ARCore 1.20+ شامل Scene Semantic Understanding — تشخیص دستهبندی اشیاء (کف، سقف، دیوار، مبلمان، گیاه، در) از طریق مدل ML TensorFlow Lite روی دستگاه است. Street View Geometry API امکان استفاده از نقشههای عمق Google Street View را برای ناوبری AR در فضای باز فراهم میکند.
// راهاندازی جلسه ARCore
val session = Session(context)
val config = Config(session)
config.lightEstimationMode =
Config.LightEstimationMode.ENVIRONMENTAL_HDR
config.planeFindingMode =
Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
session.configure(config)
// پردازش فریم
val frame = session.update()
val pointCloud = frame.acquirePointCloud()
val planes = session.getAllTrackables(
Plane::class.java
)
ARCore از رویکرد ترکیبی استفاده میکند: IMU (ماژول اندازهگیری اینرسی) موقعیت دستگاه را با فرکانس بالا (تا ۱۰۰۰ هرتز) پیشبینی میکند و اودومتری بصری خطاها را بر اساس تحلیل نقاط مشخصه از دوربین با فرکانس ۳۰–۶۰ هرتز تصحیح میکند. این رویکرد دقت ردیابی حدود ۱–۲ سانتیمتر را در شرایط ثابت فراهم میکند.
فرایند Environmental Understanding در سه مرحله کار میکند: ابتدا ARCore نقاط مشخصه (feature points) را در تصویر دوربین پیدا میکند، سپس خوشههای نقاط واقع در یک صفحه را شناسایی کرده و آنها را به چندضلعی تقریب میزند. پس از تشخیص صفحه، ARCore یک شیء Trackable از نوع Plane ایجاد میکند که با دریافت فریمهای جدید بهروز میشود.
به گفته Google، ARCore صفحهای به اندازه ۱۰x۱۰ سانتیمتر را در فاصله تا ۱ متری دوربین تشخیص میدهد. برای اتاقهای متوسط (۲۰ متر مربع) اسکن کامل سطوح حدود ۲–۳۴ ثانیه طول میکشد. هنگام استفاده از Depth API با پشتیبانی حسگر ToF، دقت تشخیص ۴۰٪ افزایش مییابد.
Depth API — فناوری ARCore که نقشه عمق صحنه را بر اساس تحلیل استریوی تصویر دوربین میسازد. در دستگاههای دارای حسگر ToF (Time-of-Flight) نقشه عمق فوراً با دقت تا ۲ سانتیمتر به دست میآید. در دستگاههای بدون حسگر عمق، Depth API از یادگیری ماشین برای تخمین عمق از یک فریم استفاده میکند که دقت حدود ۱۰ سانتیمتر را فراهم میکند.
Scene Mesh — شبکه سهبعدی محیط که ARCore در زمان واقعی میسازد. این شبکه برای فیزیک برخورد، محو اشیاء مجازی و سایهاندازی استفاده میشود. Scene Mesh در دستگاههای دارای OpenGL ES 3.1 و پشتیبانی Depth API در دسترس است و تا ۵۰۰ هزار چندضلعی در هر فریم را شامل میشود.
// دریافت نقشه عمق
val depthImage = frame.acquireDepthImage16Bits()
// قرار دادن شیء روی صفحه تشخیص داده شده
val hitResult = frame.hitTest(x, y)
.firstOrNull { it.trackable is Plane }
hitResult?.let { result ->
val anchor = session.createAnchor(
result.hitPose
)
val model = ModelRenderable.builder()
.setSourceId(R.raw.my_model)
.build()
.exceptionally { null }
AnchorNode(anchor).apply {
this.renderable = model.get()
}
}
اگرچه ARCore و ARKit وظایف یکسانی — ردیابی موقعیت، تشخیص سطوح و ارزیابی نور — را حل میکنند، رویکردها و اکوسیستمهای آنها متفاوت است. ARCore بر چندسکویی و سازگاری تأکید دارد، در حالی که ARKit از ادغام عمیق با سختافزار Apple استفاده میکند.
تفاوتهای کلیدی: ARCore روی اندروید و iOS از طریق ARCore SDK کار میکند، ARKit — فقط روی iOS. ARCore از Cloud Anchors برای همگامسازی از طریق Firebase استفاده میکند، ARKit — از ARWorldMap برای تبادل مستقیم بین دستگاهها. ARCore با Depth API از حسگرهای ToF پشتیبانی میکند، ARKit با LiDAR — اسکن لیزری با دقت تا ۳ سانتیمتر.
بر اساس تستهای مقایسهای Google 2024، دقت ردیابی ARCore در دستگاههای دارای ژیروسکوپ و حسگر ToF قابل مقایسه با ARKit در iPhone دارای LiDAR است — خطا در فاصله ۲ متری از ۲ سانتیمتر تجاوز نمیکند. در دستگاههای بدون ToF، ARCore از نظر سرعت راهاندازی از ARKit عقبتر است: ۳ ثانیه در مقابل ۰.۵ ثانیه.
انتخاب بین ARCore و ARKit به مخاطب هدف بستگی دارد: اگر برنامه فقط برای iOS است — ARKit عملکرد بهتری و دسترسی به ویژگیهای انحصاری LiDAR فراهم میکند. اگر پشتیبانی از هر دو پلتفرم لازم است — ARCore با ARCore iOS SDK امکان استفاده از پایه کد واحد با حداقل تفاوتهای پلتفرمی را فراهم میکند، اگرچه برخی قابلیتهای سختافزاری هر پلتفرم از دست میرود.
| ویژگی | ARCore | ARKit |
|---|---|---|
| پلتفرم | Android + iOS + Unity/Unreal | فقط iOS |
| حسگر عمق | ToF (اختیاری) | LiDAR (مدلهای Pro) |
| همگامسازی | Cloud Anchors (Firebase) | ARWorldMap (Multipeer) |
| ردیابی صورت | Augmented Faces | Face Tracking (TrueDepth) |
| دقت VIO | ۱–۳ سانتیمتر | ۰.۵–۱ سانتیمتر |
ادغام ARCore با اضافه کردن وابستگی Google Play Services for AR در build.gradle شروع میشود: com.google.ar:core. برنامه باید در دسترس بودن ARCore را روی دستگاه از طریق ArCoreApk.checkAvailability() بررسی کند — اگر ARCore نصب نشده است، به کاربر پیشنهاد نصب از Google Play Store را بدهد.
پروژه پایه ARCore شامل: ایجاد Session و Config، پیکربندی SurfaceView برای نمایش دوربین، شروع جلسه از طریق session.resume() و پردازش فریمها از طریق session.update() است. برای رندر اشیاء سهبعدی از Sceneform SDK (کتابخانه Google مبتنی بر Filament) یا Unity/Unreal برای صحنههای پیچیده استفاده میشود.
Google Sceneform را برای برنامههای Kotlin توصیه میکند — این کتابخانه اجزای آماده فراهم میکند: ModelRenderable برای بارگذاری مدلهای سهبعدی (OBJ، glTF، FBX)، ViewRenderable برای جاسازی نمای اندروید در صحنه AR و MotionEvent برای مدیریت لمسها. Sceneform به طور خودکار چرخه حیات جلسه AR و آزادسازی منابع را مدیریت میکند.
ARCore ممکن است در نور ناکافی، سطوح یکنواخت یا حرکات سریع دستگاه، ردیابی را از دست بدهد. وضعیت ردیابی از طریق frame.getTrackingState() در دسترس است — مقادیر TRACKING، PAUSED و STOPPED. هنگام انتقال به PAUSED توصیه میشود رندر را متوقف کرده و به کاربر توصیههایی مانند «دستگاه را آهستهتر حرکت دهید» یا «به مکان پرنورتری بروید» نشان داده شود.
برای بازیابی خودکار پس از خطا، ARCore از بازیابی مکان (relocalization) بر اساس نقشه ذخیرهشده نقاط مشخصه پشتیبانی میکند. توسعهدهنده میتواند نقشه را از طریق session.serialize() ذخیره و از طریق session.deserialize() بازیابی کند — این برای تجربه AR طولانیمدت که کاربر به همان فضای فیزیکی بازمیگردد مفید است. بازیابی نقشه ۱–۳۲ ثانیه طول میکشد به شرطی که محیط تغییر قابل توجهی نکرده باشد.
class ARCoreActivity : AppCompatActivity() {
private lateinit var session: Session
override fun onResume() {
super.onResume()
when (ArCoreApk.getInstance()
.checkAvailability(this)
) {
ArCoreApk.Availability.SUPPORTED_INSTALLED -> {
session = Session(this)
session.resume()
}
else -> {
showInstallPrompt()
}
}
}
}
سوالات متداول
ARCore روی بیش از ۱ میلیارد دستگاه اندرویدی از جمله Google Pixel 2+، Samsung Galaxy S7+، Xiaomi Mi 8+، Huawei P20+، OnePlus 6+، Sony Xperia XZ2+ و بسیاری دیگر پشتیبانی میشود. لیست کامل دستگاههای تأیید شده در وبسایت developers.google.com/ar/devices منتشر شده است.
عملکردهای پایه ARCore — Motion Tracking و Environmental Understanding — نیاز به اینترنت ندارند. Cloud Anchors و Augmented Images با لینکهای ابری نیاز به اتصال دارند. Depth API و Scene Mesh کاملاً روی دستگاه بدون اتصال به شبکه کار میکنند.
بله، ARCore را میتوان مستقیماً با OpenGL ES 3.1، با Unity یا Unreal Engine استفاده کرد. Sceneform گزینه توصیهشده برای پروژههای ساده در Kotlin است اما اجباری نیست. برای صحنههای سهبعدی پیچیده با فیزیک واقعگرایانه بهتر است از موتورهای بازی با پشتیبانی ARCore SDK استفاده شود.
ARCore برای فضاهای داخلی با نور کافی بهینه شده است (۱۰۰–۵۰۰ لوکس). در فضای باز زیر نور شدید خورشید، دقت ردیابی ممکن است به دلیل نوردهی بیش از حد دوربین کاهش یابد. برای کار در فضای باز Google استفاده از Street View Geometry API را توصیه میکند که نقشههای عمق را برای مکانهای شهری فراهم میکند.
Scene Viewer — یک کامپوننت UI آماده Google برای مشاهده مدلهای سهبعدی در AR بدون نوشتن کد است که از طریق WebXR کار میکند. ARCore یک SDK کامل برای ایجاد تجربه AR سفارشی با کنترل برنامهنویسی بر تمام جنبههای جلسه، ردیابی و رندر است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید