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:
MecanumDrivexử lý đầu vào gamepad, điều khiển 4 mô-tơ mecanum. - Odometry:
OdometryManagerdù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.ArmControllerhiển thị góc cánh tay. - Cánh tay:
ArmControllervớ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.1hoặ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.