MAVLink là giao thức serial kết nối giữa thiết bị bay và trạm điều khiển mặt đất.
- Giao thức quy định các bản tin theo common.xml và ardupilot.xml.
- Bản tin MAVLink chuyển được theo bất kỳ giao tiếp serial nào không phụ thuộc công nghệ (wifi, 900mhz radio ...)
- Bản tin không được đảm bảo đã đi đến bên nhận, do đó trạm mặt đất hoặc máy tính trên thiết bị bay phải kiểm tra trạng thái để xem lệnh đã được thực thi chưa.
Định dạng bản tin
Bản tin không quá 263 byte (Mavlink phiên bản 1.0) hoặc 280 byte (Mavlink phiên bản 2.0).
Bên gửi sẽ điền thông tin vào trường System ID và Component ID để bên nhận biết gói tin đến từ đâu. System ID là dãy ID duy nhất cho mỗi thiết bị hoặc trạm mặt đất. Mặc định trạm mặt đất dùng ID "255" còn thiết bị dùng ID "1" (có thể đổi được dùng tham số MAV_SYSID). Component ID cho trạm mặt đất và thiết bị thường là 1. MAVLink cho phép System ID giống như Component ID, nhưng nên chọn giá trị khác.
Trường Message ID trong common.xml và ardupilot.xml bên cạnh tên bản tin.
Phần Data trong bản tin lưu giá trị trường riêng lẻ gửi đi.
Luồng trao đổi bản tin mức cao
- Khi kết nối được mở tại mỗi thiết bị, Hệ thống "System" sẽ gửi bản tin HEARTBEAT tại tần số 1hz.
- Trạm mặt đất hoặc máy tính sẽ gửi yêu cầu dữ liệu mong muốn, tốc độ truyền bằng bản tin có cấu trúc sau:
- REQUEST_DATA_STREAM thiết lập tốc độ nhóm bản tin.
- COMMAND_LONG chứa lệnh SET_MESSAGE_INTERVAL kiểm soát chính xác bản tin được gửi và tốc độ gửi (nhưng chỉ được hỗ trợ từ phiên bản ArduPilot 4.0 hoặc cao hơn).
- Trạm mặt đất hoặc máy tính đồng hành gửi lệnh đến phương tiện bay. Chi tiết các lệnh cho trực thăng và máy bay phản lực được quy định trong phụ lục.
So sánh MAVLink1 với MAVLink2
MAVLink2 có độ dài 280 byte vì hỗ trợ thêm flag tương thích và chữ ký.
MAVLink2 là phiên bản mở rộng của MAVLink1 vì bổ sung thêm trường dữ liệu vào thông điệp MAVLink1 có sẵn, hỗ trợ thông điệp kiểu mới có độ dài (Message ID) quá 255 và thông điệp chữ ký.
MAVLink2 tương thích ngược MAVLink1, có nghĩa là nếu thiết bị đọc được thông điệp MAVLink2 thì cũng hiểu được thông điệp MAVLink1.
Nếu thiết bị tương thích MAVLink1 khi nhận được thông điệp MAVLink2 thì nó chỉ đọc được các trường gốc trong định dạng MAVLink1, không đọc được các trường mở rộng.
Cổng serial thiết bị điều khiển bay đặt sang dùng MAVLink2 bằng đặt tham số SERIALx_PROTOCOL “2”. Trong đó x là số thứ tự cổng serial.