

Tổ chức mã nguồn với lớp Robot và CommandOpMode
LƯU Ý: Chúng tôi khuyến nghị sử dụng CommandOpMode cho việc triển khai mô hình command-based, vì nó thân thiện hơn rất nhiều với các chương trình FTC.
The Robot Class
Lớp Robot
Lớp Robot giúp việc sử dụng CommandScheduler trở nên đơn giản hơn rất nhiều trong mã nguồn của người dùng. Tương tự như WPILib, lớp Robot cho phép xây dựng một mô hình Robot (Robot paradigm).
Mô hình này cho phép:
Tạo nhiều OpMode cùng liên kết tới một đối tượng Robot duy nhất
Làm nền tảng cho việc vô hiệu hóa robot (disable robot)
Việc vô hiệu hóa robot có nghĩa là:
Ngắt (interrupt) các command đang chạy
Không cho phép schedule command mới
Điều này được thực hiện thông qua hai phương thức tĩnh:
Creating a Robot Class
Tạo lớp Robot
Bước đầu tiên để sử dụng mô hình Robot là tạo một lớp con (subclass) của Robot.
Lớp này sẽ:
Quản lý toàn bộ command
Quản lý toàn bộ subsystem mà bạn muốn sử dụng
Ngoài ra, bạn vẫn có thể:
schedule()commandregister()subsystem
từ bên ngoài lớp Robot.
Hạn chế lớn của Robot class
Một nhược điểm lớn của lớp Robot là:
Nó chia sẻ chung command và subsystem cho mọi OpMode
👉 Khuyến nghị:
Tạo một enum bên trong Robot để phân biệt TeleOp và Autonomous
Khi khởi tạo Robot, sử dụng enum này để chọn CommandScheduler phù hợp
Ví dụ minh họa
Nhược điểm không thể khắc phục hoàn toàn
Vấn đề vẫn tồn tại khi:
Bạn muốn chạy nhiều OpMode khác nhau
Nhưng lại dùng cùng một tập subsystem
👉 Đây chính là lúc CommandOpMode phát huy tác dụng, và nó làm cho mô hình command-based phù hợp với FTC hơn rất nhiều.
Running the Robot in Your OpMode
Chạy Robot trong OpMode
Việc chạy robot trong OpMode khá đơn giản, chỉ cần vài dòng mã và gọi phương thức run().
CommandOpMode
CommandOpMode là trung tâm của mô hình command-based theo phong cách FTC.
Ưu điểm:
Làm mọi thứ đơn giản hơn rất nhiều
Giảm đáng kể số dòng code cần viết
Gắn trực tiếp với từng OpMode, không dùng chung subsystem như Robot class
Khác với Robot class:
CommandOpMode không lưu reference chung tới subsystem
Nếu muốn, người dùng có thể tự tạo map quản lý hardware
Đây chưa phải tính năng chính thức của FTCLib
Nhưng hoàn toàn được hỗ trợ
Người dùng có thể:
Override các phương thức của CommandOpMode
Vô hiệu hóa CommandOpMode bằng các phương thức tĩnh
(thực chất là disable Robot class – vì CommandScheduler tham chiếu Robot để xử lýrunsWhenDisabled())
Initializing your Hardware
Khởi tạo phần cứng
CommandOpMode là một abstract class, vì vậy người dùng bắt buộc phải tạo lớp con để triển khai.
Phương thức duy nhất bắt buộc phải override là:
Nhiệm vụ của initialize():
Khởi tạo toàn bộ hardware
Khởi tạo và schedule toàn bộ command
Lưu ý:
CommandOpModeđã tự implementrunOpMode()Scheduler được chạy tự động
Khi OpMode kết thúc hoặc có yêu cầu stop:
Scheduler singleton được reset
Instance mới sẽ được tạo khi gọi
getInstance()
👉 Cách này khá khó hiểu (non-intuitive), nhưng nó hoạt động đúng như thiết kế.
Ví dụ triển khai CommandOpMode
👉 Chỉ cần như vậy là đủ.
Mọi thứ còn lại đều được FTCLib xử lý nội bộ cho người dùng.
Bạn có thể tìm project mẫu sử dụng CommandOpMode tại tài liệu của FTCLib ở đây:link

