Bỏ qua tới nội dung
LSLab

MAVLink gửi lệnh tới bộ điều khiển bay ra sao?

  • Cơ bản
  • Bài viết
  • Từ 14 tuổi
  • 6 phút đọc
Minh họa biên tập về MAVLink trong hệ thống drone.

MAVLink mang lệnh bằng cách đóng gói yêu cầu thành thông điệp có loại và trường dữ liệu, gửi qua liên kết tới hệ thống đích, rồi nhận phản hồi theo giao thức. Với một lệnh, phần mềm cần đối chiếu ACK và trạng thái hệ thống; với telemetry, người nhận thường quan tâm tới giá trị mới nhất. Lệnh có thể hợp lệ về cấu trúc mà vẫn bị từ chối nếu điều kiện vận hành không phù hợp.

Mục lục
MAVLink tổ chức thông tin thành bản tin trao đổi; bản tin không tự tạo ra liên kết vật lý.
  • Máy tính gửi và nhận
  • Khung bản tin có các phần
  • Drone trao đổi bản tin

Bạn sẽ học được gì

  • Theo dõi một thông điệp từ ứng dụng gửi tới bộ điều khiển và quay lại.
  • Phân biệt xác nhận giao thức với việc hoàn thành nhiệm vụ.
  • Hiểu vì sao cùng một giao thức có cách xử lý riêng cho telemetry và lệnh.

Cần biết trước

Không cần kinh nghiệm bay. ACK là thông điệp phản hồi rằng bộ nhận đã xử lý hoặc ghi nhận một yêu cầu theo quy tắc giao thức.

Thông điệp trở thành lệnh ra sao?

Phần mềm chọn loại thông điệp và điền các trường theo định nghĩa MAVLink. Thông điệp được đóng khung, định danh nguồn/đích và gửi qua kênh đã cấu hình; đầu nhận phân tích nó rồi quyết định có xử lý hay không. Bộ định tuyến có thể chuyển tiếp thông điệp giữa các kênh, nhưng không biến một lệnh sai điều kiện thành lệnh hợp lệ.

Một trao đổi lệnh thường có yêu cầu, phản hồi ACK và có thể lặp lại nếu phản hồi không tới trong thời gian chờ của bên gửi. ACK giúp phân biệt lệnh đã được nhận hay bị từ chối theo mã phản hồi. Nó không luôn chứng minh mục tiêu cấp cao đã hoàn tất: chẳng hạn, chấp nhận yêu cầu bắt đầu một tác vụ khác với báo cáo tác vụ đã kết thúc. Ứng dụng cần tiếp tục đọc trạng thái tương ứng.

Vì sao telemetry không giống lệnh cấu hình?

MAVLink mô tả telemetry như các luồng dữ liệu được gửi theo thiết kế multicast. Nhiều bên nhận có thể quan sát cùng một thông điệp; mẫu cũ thường kém hữu ích hơn mẫu mới. Ngược lại, một số giao dịch cấu hình hoặc đồng bộ nhiệm vụ cần giao đảm bảo và dùng trao đổi điểm-điểm có gửi lại. Khác biệt này cho phép hệ thống dành cơ chế đáng tin cậy hơn cho thao tác không nên âm thầm mất.

Từ “đảm bảo” ở đây mô tả hành vi giao thức cho giao dịch; nó không bảo đảm vô tuyến không bao giờ mất gói, cũng không bảo đảm ứng dụng chọn đúng lệnh. Cần timeout, kiểm tra phản hồi và cách xử lý khi không rõ kết quả.

Ví dụ: xác nhận một yêu cầu trong mô phỏng

Trong một mô phỏng, ứng dụng gửi một yêu cầu đọc tham số. Nó ghi thời gian gửi, chờ ACK hoặc lỗi, rồi kiểm tra giá trị tham số nhận lại. Nếu hết thời gian mà không có phản hồi, ứng dụng đánh dấu kết quả chưa biết và có thể gửi lại theo quy tắc phù hợp; nó không tự ghi rằng giá trị đã đổi. Khi nhận ACK báo chấp nhận, ứng dụng vẫn chờ trạng thái hoặc dữ liệu xác nhận kết quả mong muốn.

Đối với setpoint liên tục, phần mềm phát các giá trị mới và quan sát telemetry trạng thái. Bộ điều khiển có thể chấp nhận loại thông điệp nhưng không thể thực hiện nó nếu mode hiện tại hoặc dữ liệu định vị không đáp ứng yêu cầu. Vì vậy, chuỗi kiểm tra gồm thông điệp hợp lệ, phản hồi nhận được và trạng thái phù hợp.

Theo dõi lỗi theo từng chặng

Nếu không thấy phản hồi, kiểm tra xem ứng dụng có tạo thông điệp đúng định dạng không; sau đó kiểm tra cổng/giao thức, đích nhận, bộ định tuyến và trạng thái hệ thống. Nếu có ACK từ chối, đọc mã phản hồi thay vì thử gửi lặp vô hạn. Nếu ACK chấp nhận nhưng trạng thái không đổi, kiểm tra điều kiện mode, trạng thái tác vụ và loại dữ liệu đầu vào.

MAVLink định nghĩa cách trao đổi thông điệp; tài liệu của flight stack quy định từng lệnh có hỗ trợ không, cần trạng thái nào và phản hồi ra sao. Không thể suy ra hành vi PX4 hay ArduPilot chỉ từ tên một gói MAVLink.

Hiểu lầm thường gặp

ACK không đồng nghĩa nhiệm vụ hoàn tất. Đó là phản hồi về yêu cầu; cần theo dõi kết quả thực tế.

Thông điệp đúng cú pháp không đảm bảo được thực thi. Bộ điều khiển còn xét lệnh có phù hợp với trạng thái hiện tại hay không.

Câu hỏi thường gặp

Không. Nó định nghĩa thông điệp; flight stack và ứng dụng quyết định lệnh nào được hỗ trợ và khi nào.

Gửi lại lệnh có luôn an toàn không?

Không thể giả định như vậy. Bên gửi cần biết lệnh có tính lặp an toàn không và xử lý phản hồi trước khi thử lại.

Tôi cần đọc gì sau ACK?

Đọc trạng thái tác vụ hoặc telemetry liên quan để xác nhận yêu cầu đạt kết quả mong muốn.

Tóm tắt

  • Ứng dụng tạo thông điệp, liên kết chuyển nó, bộ điều khiển phản hồi và báo trạng thái.
  • ACK xác nhận giao thức nhưng không nhất thiết xác nhận hoàn tất nhiệm vụ.
  • Telemetry cập nhật liên tục và giao dịch cần đảm bảo có quy tắc gửi/nhận khác nhau.

Thuật ngữ trong bài

Tên tiếng Việt, tên tiếng Anh và nghĩa dùng trong bài. Di chuột, chạm hoặc dùng phím Tab tới từ có gạch chân chấm để xem giải thích ngay khi đọc.

quy tắc giao thứcprotocol rules
Quy tắc gửi lệnh MAVLink, nhận phản hồi và xử lý khi phản hồi không đến.
ACK
Thông điệp phản hồi ghi kết quả xử lý một lệnh.
telemetry
Luồng dữ liệu trạng thái được phát để hệ thống khác quan sát.
setpoint
Giá trị điều khiển mong muốn mà ứng dụng gửi tới flight stack.

Bài này chưa được đánh dấu là đã xem

Thấy nội dung sai hoặc chưa an toàn?

Báo cho quản trị viên qua email. Thư có sẵn tên bài và đường dẫn.

Báo lỗi bài này
Xem tất cả bài của chủ đề

Nguồn

Các nguồn này viết cho người đọc lớn hơn. Nếu thấy khó, hãy đọc cùng người lớn.