Accelerometer, Gyroscope, Magnetometer dùng để làm gì?

Mình đang làm về 1 dự án mà ở đấy vận dụng Accelerometer, Gyroscope, Magnetometer thu thâp được từ thiết bị di động để phục vụ cho Machine Learning. Là dân mới bắt đầu làm việc với những loại dữ liệu này, mình thấy khá lơ mơ về 3 loại sensor data trên. Vì thế, mình viết bài viết này hy vọng sẽ giúp đưa ra cái nhìn rõ hơn về sự giống và khác nhau, và tính ứng dụng của từng loại sensor.

Hình 1: Hệ thống tọa độ được dùng trong Sensor API của điện thoại Android. (Android developer guide)

Nhìn về mặt tổng quát, Accelerometer, Gyroscope và Magnetometer là 3 loại raw sensor data chính được thu thập từ điện thoại. Bài viết này, đầu tiên, mình sẽ giới thiệu nhanh về hệ thống tọa độ được sử dụng trong điện thoại. Sau đấy mình sẽ giới thiệu sơ qua về tính vật lý và tính ứng dụng của từng loại sensor. Cuối cùng, mình sẽ nói thêm về việc kết hợp các loại sensor với nhau để mang lại hiểu quả trong một số ứng dụng.

Hệ thống tọa độ dùng trong Sensor API

Đầu tiên, vì không gian sống là không gian 3 chiều, nên dữ liệu của cả 3 loại sensors sẽ được thu thập theo 3 trục x, y, z. Trong điện thoại Android, x,y,z được định vị như hình 1. Cụ thể là, giả sử khi bạn cầm điện thoại thẳng đứng hướng về phía bạn:
- Trục y là truc hướng lên trên của điện thoại
- Trục x là trục hướng về phía bên phải cạnh của điện thoại
- Trục z là trục hướng về phía màn hình vào phía bạn

Accelerometer

Về mặt vật lý, đây có lẽ là loại sensor gần gũi và phổ biên nhất. Nó dùng để đo gia tốc của 1 vật trong không gian 3 chiều. Trong Android, bạn có thể nhận được giá trị gia tốc của 2 loại sensor khác nhau, đấy là Acceleration sensorLinear acceleration sensor. Acceleration sensor đo gia tốc dưới tác động của trọng trường, còn cái còn lại đo gia tốc không tính trọng trường (proper accelerometer: gia tốc của vật ấy so với chính nó của trạng thái nghỉ, bỏ qua gia tốc trọng trường).

Để dễ hiểu thì trong điện thoại, khi điện thoại của bạn ở trạng thái tĩnh thì acceleration sensor sẽ có magnitude value là khoảng 9.8 (m/s2), còn Linear acceleration sensor sẽ có magnitude value là 0 (m/s2).

Hình 2: Ví dụ về Accelerometer data khi điện thoại ở trạng thái nghỉ (không có ngoại lực tác động)

Như bạn thấy ở ví dụ trên, vì là không gian 3 chiều nên sẽ có 3 trục x, y, z. Nhưng x và y là 0 vì mình không di chuyển nó. còn z bị tác dụng của trọng lực kéo xuống, nên giá trị của nó bằng chính giá trị gia tốc trọng lực tại vị trí của điện thoại. (Bạn cũng có thể dựa vào 3 con số này để đoán được vị trí của điện thoại đấy! Ví dụ như trong hình 2, dựa vào 3 giá trị x, y, z = 0, 0, 9.96, mình có thể kết luận là điện thoại đang được nằm trên mặt phẳng, với màn hình hướng lên trời. Bạn thử nhìn lại Hình 1, rồi giải thích xem vì sao? 🤓)

Về mặt ứng dụng, Accelerometer là sensor được sử dụng phổ biến nhất. Bắt nguồn từ việc nó có thể giúp bạn nhận dạng được gia tốc chuyển động của điện thoại, Accelerometer được dùng trong rất nhiều các ứng dụng khác nhau, từ nghiên cứu cho đến ứng dụng hàng ngày mà bạn đang sử dụng trong thiết bị điện thoại của bạn. Nổi bật nhất là dùng Accelerometer để phân biệt motions. Ví dụ như Machine Learning sử dụng Accelerometer có thể phân biệt được là bạn đang đi bộ, đang chạy, hay đang tập thể dục. Hay việc nó giúp smartphone nhận diện được bạn đang cầm điện thoại theo tư thế nào, để từ đấy tự động xoay màn hình (bạn xem thử cái ví dụ đơn giản mình nói ở phía trên, sẽ thấy vì sao lại thế 😉).

Ngoài ra, Accelertometer còn rất nhiều ứng dụng khác mà Accelerometer được sử dụng, từ authentication, đến activity tracking, và nhiều ứng dụng cool khác nữa. Trong quy mô bài viết này, mình không thể liệt kê hết, nhưng bạn có thể tìm đọc thêm ở đây chẳng hạn.

Gyroscope

Accelerometer rất hữu dụng. Tuy nhiên, nó lại không giải quyết được một số trường hợp. Ví dụ như nó chỉ có thể giúp bạn nhận ra điện thoại có đang di chuyển hay không (bản chất là nếu sensor trong điện thoại di chuyển có nghĩa là điện thoại di chuyển). Tuy nhiên, trong tình huống: ví dụ bạn lấy sensor làm tâm, xoay điện thoại quay tâm ấy, thì điều gì xảy ra? Giá trị x, y, z của Accelerometer không đổi phải không? Hãy phân tích nhanh xem vì sao lại thế bằng cách phân tích lực tác động lên x, y, z:

Hình 3: Accelerometer khi xoay điện thoại, lấy điểm giữa điện thoại làm tâm
  • Khi xoay điện thoại lấy sensor làm tâm, khi đấy độ cao của điện thoại không đổi. Vì thế gia tốc trục z không đổi. (mình đang để điện thoại nằm ngang, mặt điện thoại hướng lên trời)
  • Sensor cũng không di chuyển sang phải, và cũng không bị dịch chuyển lên trên. Vì thế gia tốc trên trục x, và y cũng không đổi.

Trong Hình 3, bạn thấy đồ thị hơi rung vì khi mình xoay mình không giữ im điện thoại tại 1 điểm. Tuy nhiên nó sẽ là 3 đường thẳng nếu thí nghiệm được làm 100% chuẩn xác.

Vậy thì làm cách nào để nhận dạng được là điện thoại đang xoay hoặc để giải quyết được những vấn đề tương tự?

Thật may là Gyroscope có thể giải quyết vấn đề này được.

Hình 4: Gyroscope (wiki)

Về mặt vật lý, Gyroscope là 1 thiết bị dùng để đo hướng (orientation) và vận tốc góc (angular velocity). Lí thuyết vật lý về Gyro khá thú vị, nhưng nó nằm ngoài phạm vi của bài, nên mình sẽ không đề cập ở đây. Nhưng mình sẽ để links ở phía cuối bài cho bạn nào quan tâm. Trong Android và IOS, Gyroscope sensor sẽ trả lại giá trị vận tốc góc trên 3 trục x, y, z. Hãy nhìn qua ví dụ để xem nó nhìn như thế nào nhé.

Hình 5: Xoay 90 điện thoại 90 độ

Trong hình 5, mình thực hiện thí nghiệm giống với thí nghiệm làm trong hình 3. Tức là mình để điện thoại trên mặt bàn và xoay điện thoại 180 độ (tuy nhiên, như bạn thấy trong hình thì mình xoay thành 2 lần 90 độ vì như thế dễ xoay hơn 😅). Như vậy là vận tốc góc trên trục z thay đổi khi mình xoay trên mặt phẳng.

Hình 6: lật ngược điện thoại

Như bạn thấy trên hình 5 và 6, Gyroscope giải quyết rất tốt việc nhận diện việc xoay hoặc điều chỉnh điện thoại (nhất là khi điện thoại của bạn không chuyển động, lúc mà accelerometer không làm gì được).

Nhờ vậy, Gyroscope được dùng ứng dụng rộng rãi để xác định hướng chuyển động của vật, ví dụ như xác định hướng bay, hướng rẽ, giữ thăng bằng trong máy bay, drone hoặc trong cả ngành hàng không vũ trụ.

Magnetometer

Lại giả sử 1 tình huống. Ví dụ khi máy bay đang bay, nó đã lấy độ cao và cân bằng, khi đấy cả Accelerometer và Gyroscope đều trả gía trị bằng 0. Như thế thì làm sao để xác định được hướng của máy bay (Đông, Tây, Nam, Bắc)?

Thật may, lúc đấy ta lại có thể dùng Magnetometer. Về mặt vật lý, magnetometer dùng để đo lực từ trường tại 1 địa điểm (hướng, độ lớn, độ biến đổi). Và bằng việc dùng sử dụng magnetometer để đo từ trường của trái đất, magnetometer sẽ được ứng dụng như 1 la bàn cho máy bay.

Trong Android, magnetometer gửi giá trị từ trường xung quanh (Ambient magnetic field), và cũng được đo đạt trên 3 trục x, y, z với đơn vị là micro-Tesla (uT).

Tính ứng dụng của Magnetometer không rộng rãi bằng Accelerometer và Gyroscope. Tuy nhiên, Magnetometer có thể dùng để làm công cụ bổ trợ cho Accelerometer và Gyroscope.

Kết hợp Accelerometer, Gyroscope và Magnetometer

3 sensors được đo từ 3 chips vật lí khác nhau. Tuy nhiên, nó lại có giá trị hỗ trợ lẫn nhau. Trong Smartphone, rất nhiều soft sensor được tạo nên từ 3 raw sensors này để hộ trợ developers. Bảng thống kê dưới đây đưa ra 1 vài ví dụ cụ thể và khá hữu dụng.

Một số loại soft sensor trong Android

Tùy vào mục đích sử dụng và bài toán cụ thể, bạn có thể kết hợp các physical sensor với nhau, hoặc sử dụng những loại soft sensors được hỗ trợ sẵn từ hệ điều hành. Tuy nhiên, việc sử dụng soft sensors thường khá tốn pin và computational power, vì đơn giản là nó được tính toán từ các physical sensors khác.

Mình hy vọng bài viết này giải thích phần nào được khái niệm và tính ứng dụng của 3 loại sensors này trong smartphones.

Work hard, stay humble

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store