Bài 7: mpu6050 + motor mixing + hiệu chỉnh → drone phản hồi đúng roll / pitch / yaw

Thương hiệu: (Đang cập nhật ...) Loại: (Đang cập nhật ...)

Liên hệ
Bài 7: MPU6050 + Motor Mixing + Hiệu chỉnh → Drone phản hồi đúng Roll / Pitch / Yaw Sau khi hoàn thành Bài 6, chúng ta đã truyền được lệnh từ Joystick → ESP-NOW → ESP32 Drone. Tuy nhiên, để Drone có thể bay ổn định, chỉ nhận lệnh từ tay cầm là chưa đủ. Drone cần biết chính xác nó đang nghiêng the...

Bài 7: MPU6050 + Motor Mixing + Hiệu chỉnh → Drone phản hồi đúng Roll / Pitch / Yaw

Sau khi hoàn thành Bài 6, chúng ta đã truyền được lệnh từ Joystick → ESP-NOW → ESP32 Drone.

Tuy nhiên, để Drone có thể bay ổn định, chỉ nhận lệnh từ tay cầm là chưa đủ. Drone cần biết chính xác nó đang nghiêng theo hướng nào, xoay như thế nào và cần điều chỉnh tốc độ từng motor ra sao.

Đây là nhiệm vụ của MPU6050, thuật toán điều khiển và Motor Mixing.


1. Mục tiêu của bài học

Sau bài này, học viên sẽ hiểu được:

  • MPU6050 hoạt động như thế nào.
  • Accelerometer và Gyroscope dùng để làm gì.
  • Roll, Pitch, Yaw là gì.
  • Cách hiệu chỉnh MPU6050.
  • Cách xác định đúng chiều trục cảm biến.
  • Motor Mixing là gì.
  • Vì sao 4 motor phải thay đổi tốc độ khác nhau.
  • Nguyên lý phản hồi vòng kín.
  • Cách kiểm tra chiều phản hồi Roll/Pitch/Yaw.
  • Những bước cần kiểm tra trước khi bay.

Luồng điều khiển:


Joystick
   ↓
ESP32 Controller
   ↓
ESP-NOW
   ↓
ESP32 Drone
   ↓
MPU6050
   ↓
Control Algorithm
   ↓
Motor Mixing
   ↓
4 Motor


2. MPU6050 là gì?

MPU6050 là cảm biến chuyển động tích hợp:

  • 3 trục Accelerometer
  • 3 trục Gyroscope

Cảm biến giao tiếp với ESP32 thông qua I2C.


        MPU6050
     ┌───────────┐
     │ ACC X Y Z │
     │           │
     │ GYRO X Y Z│
     └─────┬─────┘
           │
          I2C
           │
           ↓
         ESP32

Trong Drone, MPU6050 đóng vai trò như một bộ cảm nhận chuyển động.


3. Roll – Pitch – Yaw

Drone có 3 chuyển động góc chính.

Roll

Nghiêng trái/phải:


       Roll
←────────────→

Pitch

Nghiêng trước/sau:


       Pitch
   ↑          ↓

Yaw

Xoay quanh trục đứng:


       ↻
      Yaw
       ↺

Ba thông tin này rất quan trọng đối với bộ điều khiển Drone.


4. Accelerometer và Gyroscope

Accelerometer

Accelerometer đo gia tốc trên 3 trục.

Khi Drone đứng yên, gia tốc trọng trường có thể được sử dụng để xác định hướng nghiêng của Drone đối với Roll/Pitch.

Gyroscope

Gyroscope đo tốc độ quay quanh các trục.


GX → tốc độ quay quanh X
GY → tốc độ quay quanh Y
GZ → tốc độ quay quanh Z

Gyroscope có ưu điểm phản ứng rất nhanh, nhưng nếu tích phân để tính góc lâu dài sẽ xuất hiện drift.

Accelerometer ổn định hơn theo trọng lực nhưng dễ bị ảnh hưởng bởi rung động và gia tốc của Drone.

Vì vậy, hệ thống thường kết hợp hai nguồn dữ liệu.


5. Sensor Fusion

Một phương pháp đơn giản để hiểu nguyên lý là Complementary Filter.


Gyroscope
     │
     ├──────┐
     │      │
     ↓      ├──→ Góc ước lượng
Accelerometer
            │
            ↓

Công thức khái quát:


Angle =
α × (Angle + Gyro × dt)
+
(1 - α) × AccelAngle

Trong đó:

  • Gyro: tốc độ góc.
  • dt: thời gian giữa hai lần đọc.
  • AccelAngle: góc tính từ accelerometer.
  • α: hệ số lọc.

Giá trị α cần được lựa chọn và thử nghiệm trên hệ thống thực tế.


6. Kết nối MPU6050 với ESP32

MPU6050 sử dụng I2C:


ESP32              MPU6050
─────              ───────
SDA  ───────────── SDA
SCL  ───────────── SCL
GND  ───────────── GND
VCC  ───────────── VCC

GPIO SDA/SCL phải sử dụng đúng theo PCB Drone Mini ESP32 thực tế.

Không nên tự giả định GPIO nếu chưa kiểm tra schematic hoặc firmware của board.


7. Kiểm tra MPU6050

Trước khi lập trình thuật toán điều khiển, cần kiểm tra ESP32 có nhận được MPU6050 hay không.

Có thể sử dụng I2C Scanner:


#include <Wire.h>

void setup()
{
    Serial.begin(115200);

    Wire.begin(SDA_PIN, SCL_PIN);
}

void loop()
{
    for (uint8_t address = 1; address < 127; address++)
    {
        Wire.beginTransmission(address);

        if (Wire.endTransmission() == 0)
        {
            Serial.print("I2C Device: 0x");
            Serial.println(address, HEX);
        }
    }

    delay(3000);
}

MPU6050 thường sử dụng địa chỉ 0x68, nhưng địa chỉ có thể thay đổi tùy cấu hình chân AD0.


8. Hiệu chỉnh Gyroscope

Khi Drone nằm yên, lý tưởng:


GX = 0
GY = 0
GZ = 0

Nhưng cảm biến thực tế có thể đọc:


GX = +1.2
GY = -0.8
GZ = +2.1

Các giá trị này tạo ra sai số offset.

Ta lấy nhiều mẫu khi Drone đứng yên:


GX1
GX2
GX3
...
GXN

Sau đó tính trung bình:


GX_OFFSET = Average(GX)

Tương tự với:


GY_OFFSET
GZ_OFFSET

Sau đó:


GX_corrected = GX - GX_OFFSET


9. Hiệu chỉnh Accelerometer

Accelerometer cũng cần được kiểm tra offset.

Khi Drone đặt nằm phẳng, cảm biến sẽ chịu tác động của trọng lực.

Ví dụ lý tưởng:


X ≈ 0g
Y ≈ 0g
Z ≈ 1g

Tuy nhiên, dấu và trục thực tế phụ thuộc vào hướng lắp MPU6050 trên PCB.

Vì vậy cần xác định trước:


Sensor X → Drone Axis nào?
Sensor Y → Drone Axis nào?
Sensor Z → Drone Axis nào?


10. Xác định đúng hướng trục MPU6050

Đây là bước rất quan trọng.

Ví dụ MPU6050 trên PCB được xoay:


MPU6050
   ↻ 90°

thì trục cảm biến có thể không trùng với trục Drone.

Khi đó phải thực hiện mapping:


Sensor X → Drone Y
Sensor Y → Drone X
Sensor Z → Drone Z

hoặc có thể phải đảo dấu.

Cách kiểm tra đơn giản:

Nghiêng Drone sang phải

Quan sát Roll.

Nếu:


Nghiêng phải
     ↓
Roll tăng

thì chiều đang đúng theo quy ước đã chọn.

Nếu:


Nghiêng phải
     ↓
Roll giảm

thì cần đảo dấu hoặc kiểm tra lại axis mapping.


11. Vì sao phải có Feedback?

Giả sử tay cầm yêu cầu:


Roll = 0°

Nhưng Drone đang nghiêng:


Roll = +8°

Hệ thống cần biết:


Target = 0°
Actual = +8°
Error = -8°

Sau đó tạo correction để đưa Drone trở lại.

Đây gọi là điều khiển vòng kín – Closed Loop Control.


Target
  ↓
Controller
  ↓
Motor
  ↓
Drone
  ↓
MPU6050
  ↓
Feedback
  └──────────────→ Controller


12. Motor Mixing là gì?

Quadcopter có 4 motor.

Ví dụ:


          FRONT

       M1       M2


       M3       M4

           REAR

Đây chỉ là sơ đồ minh họa. Vị trí M1–M4 thực tế phải xác định theo PCB của Drone.

Khi Drone muốn:

  • Tăng Throttle
  • Roll
  • Pitch
  • Yaw

thì không phải lúc nào cả 4 motor đều tăng giống nhau.

Bộ điều khiển phải tạo ra các mức motor khác nhau.

Đó là Motor Mixing.


13. Ví dụ Motor Mixing

Một công thức minh họa:


M1 = Throttle + Roll + Pitch + Yaw
M2 = Throttle - Roll + Pitch - Yaw
M3 = Throttle + Roll - Pitch - Yaw
M4 = Throttle - Roll - Pitch + Yaw

Không được áp dụng trực tiếp công thức này cho mọi Drone.

Công thức phụ thuộc vào:

  • Vị trí motor.
  • Kiểu frame.
  • Chiều quay motor.
  • Hướng trục IMU.
  • Quy ước dấu Roll/Pitch/Yaw.

Do đó phải kiểm tra chính xác Drone Mini ESP32 trước khi đưa vào firmware.


14. Chiều quay của 4 motor

Quadcopter thường sử dụng kết hợp motor:


CW
CCW
CW
CCW

Mục đích là tạo sự cân bằng moment xoắn.

Ví dụ minh họa:


M1 → CW
M2 → CCW
M3 → CCW
M4 → CW

Đây không phải cấu hình mặc định cho board của bạn.

Phải xác định chiều quay thực tế trước khi lắp cánh.


15. Kiểm tra từng motor

Trước khi kiểm tra thuật toán bay:


M1 → Test
M2 → Test
M3 → Test
M4 → Test

Xác nhận:


M1 đúng vị trí
M2 đúng vị trí
M3 đúng vị trí
M4 đúng vị trí

Sau đó kiểm tra:


CW / CCW

Nên thực hiện bước này khi tháo cánh quạt.


16. PID trong điều khiển Drone

Một bộ điều khiển phổ biến là PID:


P = Proportional
I = Integral
D = Derivative

Công thức:


Output =
Kp × Error
+
Ki × Integral
+
Kd × Derivative

P

Phản ứng theo sai số hiện tại.

Sai số càng lớn → correction càng lớn.

I

Tích lũy sai số theo thời gian.

Giúp xử lý sai lệch kéo dài.

D

Phản ứng với tốc độ thay đổi của sai số.

Giúp giảm xu hướng dao động.


17. Không nên tuning PID khi phần cứng chưa đúng

Trình tự nên là:


MPU6050
   ↓
Calibration
   ↓
Axis Mapping
   ↓
Motor Mapping
   ↓
Motor Direction
   ↓
Motor Mixing
   ↓
Feedback
   ↓
PID Tuning

Nếu Motor Mixing sai mà cố chỉnh PID thì rất khó đạt được kết quả đúng.


18. Kiểm tra phản hồi Roll

Đặt Drone cố định và tháo cánh quạt.

Nghiêng Drone sang phải.


Drone nghiêng phải
       ↓
MPU6050
       ↓
Roll thay đổi
       ↓
Controller
       ↓
Roll Correction
       ↓
Motor Mixing

Mục tiêu là correction phải tạo ra mô-men đưa Drone về hướng ngược lại với sai lệch.

Nếu correction lại làm Drone nghiêng thêm, hệ thống đang bị đảo chiều feedback.


19. Kiểm tra Pitch

Thực hiện tương tự với Pitch:


Nghiêng Drone về trước
        ↓
MPU6050
        ↓
Pitch thay đổi
        ↓
Pitch Correction
        ↓
Motor Mixing

Kiểm tra xem phản hồi có đúng chiều hay không.


20. Kiểm tra Yaw

Yaw cần kiểm tra:


Gyro Z
   ↓
Yaw Rate
   ↓
Yaw Controller
   ↓
Motor Mixing

Lưu ý:

MPU6050 không có magnetometer, vì vậy chỉ dùng gyro để tích phân yaw lâu dài sẽ có hiện tượng drift.

Trong một drone nhỏ, có thể sử dụng yaw rate để điều khiển phản hồi xoay thay vì cố duy trì một hướng yaw tuyệt đối.


21. Failsafe vẫn phải hoạt động

Bài 7 không thay thế Failsafe của Bài 6.

Nếu mất tín hiệu:


Controller
    X
    ↓
Drone
    ↓
Timeout
    ↓
Failsafe

Drone phải chuyển sang trạng thái an toàn theo thiết kế.

Đây là điều kiện cần kiểm tra trước khi thử bay.


22. Kiểm tra toàn bộ hệ thống

Quy trình test nên đi theo từng bước:

Bước 1

Kiểm tra MPU6050.

Bước 2

Calibration.

Bước 3

Kiểm tra Roll/Pitch/Yaw.

Bước 4

Kiểm tra M1–M4.

Bước 5

Kiểm tra CW/CCW.

Bước 6

Kiểm tra Motor Mixing.

Bước 7

Kiểm tra Joystick.

Bước 8

Kiểm tra ESP-NOW.

Bước 9

Kiểm tra Failsafe.

Bước 10

Chỉ sau khi các bước trên đạt yêu cầu mới chuyển sang quy trình thử bay có kiểm soát.


23. Checklist Bài 7

Hạng mục Kiểm tra
MPU6050 nhận I2C ☐
Calibration Gyro ☐
Calibration Accelerometer ☐
Xác định đúng trục ☐
Roll đúng chiều ☐
Pitch đúng chiều ☐
Yaw Rate đúng chiều ☐
M1–M4 đúng vị trí ☐
CW/CCW đúng ☐
Motor Mixing đúng ☐
Joystick đúng chiều ☐
ESP-NOW ổn định ☐
Failsafe hoạt động ☐
Test khi tháo cánh quạt ☐

24. Kết luận

Sau Bài 7, chúng ta đã kết nối được ba thành phần quan trọng:


        JOYSTICK
            ↓
      Lệnh điều khiển
            ↓
         ESP-NOW
            ↓
       ESP32 DRONE
            ↓
         MPU6050
            ↓
    Control Algorithm
            ↓
       Motor Mixing
            ↓
       M1 M2 M3 M4

Điểm quan trọng nhất cần ghi nhớ:

Joystick đưa ra yêu cầu. MPU6050 cho biết trạng thái thực tế. Bộ điều khiển tính toán sai số và Motor Mixing biến kết quả đó thành lệnh cho 4 motor.

Khi Roll, Pitch, Yaw, Motor Mapping, Motor Direction và Feedback đều đúng, chúng ta mới có nền tảng để hoàn thiện hệ thống Drone.

🚀 Bài 8: Hoàn thiện & Cất cánh Drone

Ở bài cuối cùng, chúng ta sẽ tích hợp toàn bộ hệ thống:

Tay cầm ESP32 → ESP-NOW → MPU6050 → Control → Motor Mixing → 4 Motor → kiểm tra trước bay → cất cánh thử nghiệm.

popup

Số lượng:

Tổng tiền: