ژیروسکوپ حسگری است که سرعت زاویهای چرخش دستگاه را نسبت به سه محور اندازهگیری میکند. برخلاف شتابسنج که شتاب خطی را ثبت میکند، ژیروسکوپ چرخش و جهتگیری در فضا را تعیین میکند. بر اساس دادههای STMicroelectronics، 2024، MEMS-ژیروسکوپهای مدرن دقتی تا ۰.۰۱ درجه در ثانیه ارائه میدهند که امکان استفاده از آنها را در ناوبری، تثبیت تصویر و برنامههای AR فراهم میکند.
نکات اصلی
ژیروسکوپ در گوشی هوشمند — یک حسگر میکروالکترومکانیکی (MEMS) است که سرعت زاویهای چرخش دستگاه را اندازهگیری میکند. برخلاف ژیروسکوپهای مکانیکی در هوانوردی، MEMS-ژیروسکوپ یک تراشه سیلیکونی با ابعاد ۲×۲×۱ میلیمتر است که روی برد اصلی تلفن نصب شده است.
در گوشیهای هوشمند مدرن منحصراً از MEMS-ژیروسکوپهای ارتعاشی — tuning-fork و ring-design استفاده میشود. آنها قطعات چرخان ندارند که دوام تا ۱۰ سال کار مداوم را تضمین میکند. تولیدکنندگان پیشرو — Bosch Sensortec (سری BMI)، STMicroelectronics (سری L3G، A3G) و InvenSense (سری ICM).
یک MEMS-ژیروسکوپ معمولی محدوده اندازهگیری از ±۱۲۵ تا ±۲۰۰۰ °/s، فرکانس نمونهبرداری تا ۳۲ کیلوهرتز و مصرف جریان ۳–۶ میلیآمپر دارد. بر اساس دادههای Bosch Sensortec BMI160 (۲۰۲۳)، سطح نویز در محدوده ±۱۲۵ °/s برابر با ۰.۰۰۷ °/s/√Hz است — این برای ردیابی دقیق چرخشها کافی است.
| پارامتر | مقدار |
|---|---|
| فناوری | MEMS (ارتعاشی) |
| محدوده | ±۱۲۵ — ±۲۰۰۰ °/s |
| مصرف جریان | ۳–۶ میلیآمپر |
| ابعاد | ۲×۲×۱ میلیمتر |
| نویز | ۰.۰۰۷ °/s/√Hz |
اصل کار MEMS-ژیروسکوپ بر اساس اثر کوریولیس است. در داخل تراشه یک جرم سیلیکونی قرار دارد که با فرکانس معینی (۱۵–۳۰ کیلوهرتز) نوسان میکند. هنگامی که دستگاه میچرخد، نیروی کوریولیس متناسب با سرعت زاویهای بر جرم نوسانکننده وارد میشود.
عناصر کلیدی MEMS-ژیروسکوپ — الکترودهای محرک که نوسان ایجاد میکنند و الکترودهای حساس که انحراف را ثبت میکنند. بر اساس تحقیق IEEE «MEMS Gyroscopes for Consumer Electronics» (۲۰۲۳)، ساختار معمولی شامل ۴–۸ ساختار شانهای است که به صورت متقارن در اطراف جرم مرکزی قرار گرفتهاند.
ژیروسکوپهای مدرن دادهها را از طریق گذرگاه I²C یا SPI منتقل میکنند. کنترلکننده گوشی هوشمند مقادیر سهمحوره سرعت زاویهای — به ترتیب برای محورهای X (Pitch)، Y (Roll) و Z (Yaw) — دریافت میکند. ADC داخلی سیگنال خازنی را به مقادیر دیجیتال با وضوح ۱۶–۲۴ بیت تبدیل میکند. فرکانس بهروزرسانی در حالت بازی به ۴۰۰ هرتز میرسد.
شتابسنج شتاب خطی — تغییر سرعت جسم در امتداد محورها — را اندازهگیری میکند. ژیروسکوپ چرخش — سرعت تغییر زاویه — را اندازهگیری میکند. این حسگرها مکمل یکدیگرند: شتابسنج جهتگیری نسبت به بردار گرانش را میدهد، اما شیب را از حرکت خطی تشخیص نمیدهد. ژیروسکوپ چرخش را مستقل از گرانش دنبال میکند، اما مستعد دریفت است.
در کاربردهای واقعی از Sensor Fusion — الگوریتمی که دادههای ژیروسکوپ، شتابسنج و مغناطیسسنج را ترکیب میکند — استفاده میشود. فیلتر ماهونی یا فیلتر مکمل، کواترنیونهای جهتگیری را با دقت تا ۲ درجه در حالت ایستا و ۵ درجه در حالت پویا محاسبه میکند. Android حسگر مجازی TYPE_ROTATION_VECTOR را در سطح فریمورک ارائه میدهد.
val rotationVector = sensorManager
.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR)
val callback = object : SensorEventListener {
override fun onSensorChanged(event: SensorEvent) {
val quat = FloatArray(4)
SensorManager.getQuaternionFromVector(quat, event.values)
// quat[0..3] — کواترنیون جهتگیری
}
}
Android دو نوع حسگر ژیروسکوپ ارائه میدهد: TYPE_GYROSCOPE (کالیبره شده، بدون دریفت) و TYPE_GYROSCOPE_UNCALIBRATED (دادههای خام با تخمین دریفت). دسترسی به آنها از طریق SensorManager.getDefaultSensor() انجام میشود. دادهها بر حسب راد/ثانیه — رادیان بر ثانیه — بازگردانده میشوند.
ثبت شنونده ژیروسکوپ نیاز به تعیین تأخیر دارد: SENSOR_DELAY_GAME (۲۰ میلیثانیه) برای بازیها، SENSOR_DELAY_UI (۶۷ میلیثانیه) برای رابط کاربری، SENSOR_DELAY_FASTEST (۰ میلیثانیه) برای حداکثر فرکانس. بدون لغو ثبت در onPause() باتری در ۲–۳ ساعت تخلیه میشود.
class GyroActivity : AppCompatActivity() {
private lateinit var sensorManager: SensorManager
private var gyroscope: Sensor? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
gyroscope = sensorManager.getDefaultSensor(
Sensor.TYPE_GYROSCOPE
)
}
override fun onResume() {
super.onResume()
gyroscope?.let { sensor ->
sensorManager.registerListener(
this, sensor, SensorManager.SENSOR_DELAY_GAME
)
}
}
}
دادههای خام از event.values[0..2] به ترتیب با سرعت زاویهای در محورهای X، Y و Z مطابقت دارند. برای بهدست آوردن زاویه چرخش، باید سرعت زاویهای را بر حسب زمان انتگرال گرفت. در فرکانس ۵۰ هرتز، خطای انتگرالگیری حدود ۱ درجه در دقیقه است — این برای بازیها قابل قبول است، اما برای ناوبری بدون تصحیح کافی نیست.
دریفت صفر (bias drift) — مشکل اصلی MEMS-ژیروسکوپها. حتی در حالت سکون، حسگر ممکن است سرعت زاویهای غیرصفر (۰.۱–۲ °/s) نشان دهد. علت — تغییرات دما و تنشهای مکانیکی در ساختار سیلیکونی. تولیدکنندگان این اثر را در سطح سختافزاری جبران میکنند.
سیستم Android به طور خودکار ژیروسکوپ را در اولین روشن شدن یا هنگام تغییر دما کالیبره میکند. فرآیند کالیبراسیون ۱۰–۳۰ ثانیه طول میکشد و نیازی به دخالت کاربر ندارد — کافی است تلفن را روی سطح ثابت قرار دهید. متد calibrate() در همه دستگاهها در دسترس نیست. برای کالیبراسیون اجباری از TYPE_GYROSCOPE_UNCALIBRATED با دریافت bias offset از طریق event.values[3..5] استفاده میشود.
private fun handleUncalibratedGyro(event: SensorEvent) {
val rawX = event.values[0] // راد/ثانیه بدون کالیبراسیون
val biasX = event.values[3] // افست X
val calibratedX = rawX - biasX
applyCalibrationToFusion(
calibratedX,
event.values[1] - event.values[4],
event.values[2] - event.values[5]
)
}
ژیروسکوپ در دهها سناریو استفاده میشود — از تثبیت دوربین تا هدستهای VR Google Cardboard. ARKit اپل و ARCore گوگل از ژیروسکوپ به عنوان حسگر اصلی برای ردیابی چرخش سر استفاده میکنند. بر اساس Apple ARKit Technical Specification (۲۰۲۴)، ژیروسکوپ همراه با شتابسنج دقت ردیابی تا ۰.۵ درجه را فراهم میکند.
فراتر از الکترونیک مصرفی، ژیروسکوپها در رباتیک و پهپادها استفاده میشوند. رباتهای متحرک مبتنی بر Android Things و ROS (Robot Operating System) از MEMS-ژیروسکوپها برای تثبیت حرکت و ادومتری استفاده میکنند. بر اساس تحقیق IEEE «MEMS IMU in Robotics» (۲۰۲۴)، دقت موقعیتیابی ربات متحرک با ژیروسکوپ ۳–۵ برابر بیشتر از ادومتری تنها چرخهاست، به ویژه هنگام حرکت روی سطوح لغزنده. در پهپادهای مصرفی، ژیروسکوپ همراه با فشارسنج ارتفاع پرواز را با دقت ۰.۵ متر در باد تا ۱۰ متر/ثانیه حفظ میکند.
برای برنامههای AR ژیروسکوپ حسگر اصلی تعیینکننده موقعیت اشیاء مجازی نسبت به دنیای واقعی است. Google ARCore از ژیروسکوپ برای ردیابی حرکت دستگاه با فرکانس ۱۰۰۰ هرتز (از طریق نمونهبرداری داخلی، مستقل از فرکانس API) استفاده میکند. ARKit اپل به دقت موقعیتیابی ۰.۵ درجه در حین حرکت دست مییابد که برای قرار دادن مبلمان مجازی یا شخصیتهای بازی روی صحنه واقعی کافی است.
نسل جدید IMUهای ۶-محوره (InvenSense ICM-42688، ۲۰۲۴) ژیروسکوپ و شتابسنج را در یک تراشه با مصرف ۰.۴۵ میلیآمپر در حالت کممصرف ترکیب میکند. توسعه گرادیومترها و ژیروسکوپهای اتمی برای دستگاههای موبایل هنوز در مرحله نمونههای آزمایشگاهی باقی مانده است. نمونههای صنعتی MEMS-ژیروسکوپ با دقت ۰.۰۰۱ °/s تا سال ۲۰۲۸ انتظار میرود.
سوالات متداول
ژیروسکوپ چرخش و جهتگیری دستگاه را در فضا تعیین میکند. بدون آن حالت VR, چرخش خودکار صفحه با کج کردن، تثبیت ویدئو و برنامههای AR غیرممکن است. تلفنهای مدرن بدون ژیروسکوپ نمیتوانند کار کنند.
شتابسنج شتاب خطی (حرکت و شیب نسبت به گرانش) را اندازهگیری میکند. ژیروسکوپ سرعت زاویهای (چرخش) را اندازهگیری میکند. شتابسنج چرخش دستگاه را از جابجایی خطی آن تشخیص نمیدهد — ژیروسکوپ این مشکل را حل میکند.
در Android از کالیبراسیون خودکار استفاده میشود. برای کالیبراسیون دستی برنامههایی مانند «GPS Status & Toolbox» را دانلود کنید — آنها قرار دادن تلفن روی سطح صاف و انجام کالیبراسیون از طریق TYPE_GYROSCOPE_UNCALIBRATED را پیشنهاد میدهند.
این دریفت صفر — ویژگی طبیعی حسگرهای MEMS است. حتی ژیروسکوپهای گران قیمت در حالت سکون افست ۰.۱–۲ °/s دارند. کالیبراسیون این افست را کم میکند. اگر دریفت از ۵ °/s تجاوز کند — حسگر خراب است.
از SensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) استفاده کنید و SensorEventListener را ثبت کنید. دادهها بر حسب راد/ثانیه در سه محور میرسند. برای بازیها از SENSOR_DELAY_GAME (۲۰ میلیثانیه)، برای پسزمینه — SENSOR_DELAY_UI (۶۷ میلیثانیه) استفاده کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید