

FTCLib cung cấp các wrapper động cơ đầy đủ tính năng nhằm giúp người dùng dễ sử dụng hơn. Ẩn phía sau, thư viện này tận dụng các tính năng nâng cao của FTCLib để tạo ra một triển khai mạnh mẽ hơn cho các đối tượng DcMotor được cung cấp trong SDK.
Tương tự, FTCLib có các đối tượng Motor và MotorEx, mỗi đối tượng cho phép người dùng truy cập trực tiếp instance từ hardware map trong trường hợp muốn làm việc trực tiếp với nó.
Tạo một đối tượng Motor (Creating a Motor Object)
Việc tạo một motor đơn giản chỉ là truyền vào hardware map, tên của thiết bị trong cấu hình robot controller, và một tham số thứ ba tùy chọn là loại motor GoBILDA. Điều này là cần thiết vì các motor goBILDA trong cấu hình không chỉ rõ các giá trị RPM tối đa (rotations per minute) và CPR (counts per revolution) khác nhau.
Ngoài ra còn có tùy chọn sử dụng giá trị CPR và RPM tùy chỉnh.
Sử dụng RunMode (Using a RunMode)
RunMode là phương thức vận hành motor khi được cấp nguồn. Có ba chế độ: VelocityControl, PositionControl, và RawPower.
RawPower đặt công suất motor trực tiếp thông qua một giá trị trong khoảng
[−1,1][-1, 1][−1,1]
trong đó giá trị biểu thị phần trăm tốc độ tối đa của motor. Đây cũng là điều khiển vòng hở (open loop control), nghĩa là không có điều khiển phản hồi. Đây là chế độ mặc định của motor.
Position control cho motor chạy tới một vị trí mong muốn dựa trên tốc độ đầu vào và khoảng cách giữa vị trí hiện tại của motor và vị trí mục tiêu (tính theo tick). Chế độ này sử dụng một bộ điều khiển P với hệ số có thể thay đổi bằng phương thức setPositionCoefficient(double). Đây là một giá trị cần được tinh chỉnh. Để tinh chỉnh, hiện tại chúng tôi khuyến nghị sử dụng FTC Dashboard.
Velocity control cho motor chạy theo vận tốc (tính bằng tick trên giây), sử dụng cả bộ điều khiển phản hồi (feedback) và feedforward thay vì chỉ đặt tốc độ theo phần trăm của tốc độ tối đa. Điều này có thể mang lại điều khiển mượt mà hơn cho motor và được khuyến nghị mạnh mẽ cho các chương trình autonomous.
Thiết lập hành vi (Setting Behaviors)
FTCLib, giống như SDK, có các phương thức wrapper để thiết lập ZeroPowerBehavior và hướng quay của motor. ZeroPowerBehavior thường được dùng cho các cơ cấu khác ngoài drivetrain; ví dụ như cách bạn sử dụng chế độ BRAKE cho một cơ cấu nâng (lift).
Encoder tích hợp (The Built-In Encoder)
Nhiều motor có encoder tích hợp sẵn. FTCLib cung cấp một lớp lồng Motor.Encoder sử dụng các cơ chế nâng cao và hiệu chỉnh hiện tượng tràn vận tốc (velocity overflow). Một điểm rất hữu ích khác là việc reset encoder không yêu cầu phải dừng motor. Thư viện sẽ tính toán một offset và trừ offset đó khỏi vị trí hiện tại. Offset này được đặt bằng vị trí hiện tại của encoder mỗi khi phương thức reset() được gọi.
Đối tượng Motor cũng có các phương thức thao tác với encoder, vì vậy bạn không cần phải lấy instance encoder bên trong.
Bạn cũng có thể sử dụng encoder tích hợp như một encoder độc lập khi dùng encoder ngoài.
Đối tượng MotorEx (The MotorEx Object)
MotorEx là một triển khai của lớp Motor với khả năng điều khiển vận tốc được tích hợp tốt hơn. Không giống như đối tượng Motor, nó sử dụng vận tốc đã được hiệu chỉnh (corrected velocity) theo mặc định thay vì vận tốc thô do SDK ước lượng từ encoder. Nó cũng sử dụng đối tượng DcMotorEx thay cho DcMotor. Gọi getVelocity() sẽ trả về vận tốc.
Bạn cũng có thể đặt vận tốc trực tiếp bằng setVelocity(). Bạn có thể truyền vào tốc độ góc và đơn vị góc (tùy chọn). Nếu chỉ truyền tốc độ góc, vận tốc sẽ được đặt theo đơn vị tick trên giây. Nếu truyền thêm đơn vị góc, vận tốc sẽ được đặt theo đơn vị trên giây tương ứng với đơn vị được truyền vào.
Bulk Reading
Bulk read đọc toàn bộ dữ liệu cảm biến (ngoại trừ I2C) trên một module Lynx để tiết kiệm thời gian chu kỳ. Bulk read được giới thiệu trong SDK phiên bản 5.4. Vì FTCLib sử dụng các wrapper, chúng ta có thể xử lý chúng giống như các cảm biến khác.
Dưới đây là một ví dụ triển khai auto-caching.
Bạn cũng có thể xem ví dụ này trong SDK.
CRServo
Lớp CRServo chỉ là một đối tượng motor được thiết kế để sử dụng cho servo quay liên tục (continuous rotation servo). Mục đích chung của nó là dùng trong các lớp FTCLib yêu cầu đầu vào là Motor. Nó hoạt động giống như một motor thông thường, không bao gồm các chức năng liên quan đến encoder.
MotorGroup
Đối tượng MotorGroup nhận nhiều motor và vận hành chúng song song như một motor duy nhất. Motor group có một leader và một tập các follower. Với mọi group, bắt buộc phải có một leader, còn số lượng follower có thể bằng 0. Điều này giúp việc tạo các profile điều khiển khác nhau trở nên đơn giản hơn. Constructor của MotorGroup như sau:
Số lượng follower là biến đổi. Các phương thức khác của MotorGroup giống với các phương thức trong Motor. Bạn có thể xử lý một đối tượng MotorGroup giống hệt như một đối tượng Motor đơn lẻ. Ví dụ flywheel trong thư mục examples cho thấy một số phương thức khác mà bạn có thể sử dụng với MotorGroup.

