MecanumOdometryControl là bài nộp cho bài kiểm tra FTC, triển khai OpMode MecanumDriveOpMode
để điều khiển robot mecanum, sử dụng goBILDA Pinpoint Odometry Computer với 2 bánh odometry, hiển thị X, Y, heading và góc cánh tay qua telemetry, và điều khiển cánh tay đến 45°/90° bằng gamepad. Dự án được phát triển bằng Android Studio và FTC SDK 10.1.
Yêu cầu:
- Điều khiển drivetrain mecanum bằng gamepad (left stick: X/Y, right stick: xoay).
- Theo dõi X, Y, heading bằng goBILDA Pinpoint với 2 pod odometry.
- Hiển thị X, Y, heading qua telemetry.
- Điều khiển cánh tay đến 45° (nút A) và 90° (nút B).
Giải pháp:
- Drivetrain:
MecanumDrive
xử lý đầu vào gamepad, điều khiển 4 mô-tơ mecanum. - Odometry:
OdometryManager
dùngGoBildaPinpointDriver
để tính X, Y, heading, tích hợp bộ lọc bổ sung (alpha = 0.98
) cho heading mượt hơn. - Telemetry:
TelemetryManager
(Singleton) hiển thị X, Y, heading, encoder ticks, trạng thái thiết bị, tần số Pinpoint/vòng lặp.ArmController
hiển thị góc cánh tay. - Cánh tay:
ArmController
vớiPreciseAngleControlStrategy
điều khiển servo đến 45°/90°. - Code dùng các pattern OOP (Builder, Singleton, Strategy, Dependency Injection, Abstract Factory) để dễ bảo trì.
- Drivetrain: 4 mô-tơ mecanum (goBILDA 5202 Series), tên:
frontLeft
,frontRight
,backLeft
,backRight
. Bánh tạo hình chữ X. - Odometry: goBILDA Pinpoint (
pinpoint
) với 2 pod 4-Bar (X pod: tiến/lùi, Y pod: trái/phải). Offset:-84.0 mm
(X),-168.0 mm
(Y). - Cánh tay: 1 servo (goBILDA Dual Mode Servo), tên:
armServo
. - Control Hub: REV Robotics Control Hub.
- Driver Station: Điện thoại Android với FTC Driver Station.
- Gamepad: Logitech F310/Xbox controller (USB/Bluetooth).
- Pin: 12V (>11.5V).
- Android Studio: 2024.x.
- FTC SDK: 10.1, có
GoBildaPinpointDriver
. - Git: Để clone.
- Java: JDK 11.
git clone https://github.com/KienPC1234/MecanumOdometryControl.git
cd MecanumOdometryControl
- Mở Android Studio, chọn Open an existing project, chọn
MecanumOdometryControl
. - Nhấn
Sync Project with Gradle Files
. - Kiểm tra
build.gradle
:implementation 'org.firstinspires.ftc:robotcore:latest' implementation 'org.firstinspires.ftc:hardware:latest'
- Kết nối Control Hub (Wi-Fi:
192.168.43.1
hoặc USB). - Truy cập
192.168.43.1:8080
, vào Configure Robot. - Thêm:
- Mô-tơ (cổng 0–3):
frontLeft
,frontRight
,backLeft
,backRight
. - Servo (cổng 0):
armServo
. - I2C Device (cổng I2C 0):
pinpoint
.
- Mô-tơ (cổng 0–3):
- Lưu cấu hình.
- Drivetrain: Gắn 4 mô-tơ, kết nối cổng 0–3. Bánh mecanum tạo hình chữ X.
- Odometry: Gắn Pinpoint, kết nối I2C. Gắn pod (X: cổng X, Y: cổng Y). Cập nhật offset nếu khác:
robot.getPinpoint().setOffsets(xOffset, yOffset, DistanceUnit.MM);
- Cánh tay: Gắn servo (
armServo
), kết nối cổng 0. - Pin: Sạc đầy (>11.5V).
- Kết nối Control Hub (Wi-Fi/USB).
- Nhấn
Run > Run 'TeamCode'
trong Android Studio. - Kiểm tra lỗi:
NoClassDefFoundError
: Xác nhậnGoBildaPinpointDriver
.- Kết nối lỗi: Kiểm tra Wi-Fi/USB.
- Mở FTC Driver Station, kết nối Control Hub.
- Chọn
TeleOp
→MecanumDriveOpMode
. - Nhấn
Init
:- Telemetry:
Status: Initialized
,X offset (mm): -84.0
,Y offset (mm): -168.0
,Device Version
.
- Telemetry:
- Nhấn
Start
.
- Điều khiển: Left stick (tiến/lùi, trái/phải), right stick X (xoay).
- Kiểm tra: Tiến 1m (thẳng), dịch trái 1m (không xoay), xoay 360° (mượt).
- Sửa lỗi: Sai hướng → sửa
RobotHardware.java
(REVERSE
/FORWARD
). Không chạy → kiểm tra cổng 0–3, pin.
- Telemetry:
X (in)
(~39.37 inch/m khi tiến),Y (in)
(dịch trái),Heading (deg)
(0°→360°),Encoder X/Y (ticks)
,Device Status: READY
. - Kiểm tra: Tiến 1m, dịch trái 1m, xoay 360° → telemetry khớp.
- Sửa lỗi: X/Y sai → sửa
EncoderDirection
. Heading lệch → tăngalpha
(0.99).
- Kiểm tra: Hiển thị
X (in)
,Y (in)
,Heading (deg)
,Encoder X/Y
,Arm Angle (deg)
,Device Status
,Pinpoint Frequency
,Loop Frequency
. - Sửa lỗi: Không hiển thị → kiểm tra Driver Station,
telemetry.update()
.
- Điều khiển: Nút A (45°), nút B (90°).
- Kiểm tra: A → 45°, B → 90°. Telemetry
Arm Angle (deg)
khớp. - Sửa lỗi: Góc sai → sửa
ANGLE_RANGE
(ví dụ: 170.0) trongPreciseAngleControlStrategy
. Servo lỗi → kiểm tra cổng 0.