Đế truyn đng

Đế truyn đng

Các lớp drivebase hỗ trợ điều khiển robot theo nhiều kiểu truyền động khác nhau.

Các lớp drivebase hỗ trợ điều khiển robot theo nhiều kiểu truyền động khác nhau.

Level

Intermediate

Source

Source

Author

Author

FTC Lib

FTC Lib

Translator

Translator

FTC26749 aDudu

FTC26749 aDudu

Date Published

Date Published

Jan 18, 2026

Jan 18, 2026

package com.arcrobotics.ftclib.drivebase
package com.arcrobotics.ftclib.drivebase

Tất cả các lớp drivebase trong FTCLib đều được xây dựng dựa trên lớp trừu tượng RobotBase. Về mặt chức năng, lớp này tương tự với RobotDriveBase trong WPILib. Nó bao gồm:

  • Một enum cho các loại motor khác nhau (tức là các chỉ số của motor trong mảng)

  • Tốc độ tối đa có thể đạt được của drivebase

  • Một phương thức giới hạn (clipping) giữa giá trị nhỏ nhất và lớn nhất

  • Chuẩn hóa tốc độ bánh xe

  • Phương thức stop()

  • Phương thức bình phương đầu vào (square input method)

Tất cả các kiểu drive sau đây đều có sẵn để sử dụng trong FTCLib. Người dùng chỉ cần truyền các giá trị vào khi khởi tạo đối tượng.

Differential

Differential drive là kiểu drive có hai motor hoặc hai nhóm motor ở hai bên robot. Mỗi bên hoạt động như một tập kết nối hoặc một motor group. Có hai kiểu điều khiển có thể sử dụng với differential drive: tankarcade.

CAD bởi Hrithik và Sanjay từ FTC Team 16439

Việc tạo đối tượng drivetrain rất đơn giản:

DifferentialDrive m_drive = new DifferentialDrive(m_left, m_right);
DifferentialDrive m_drive = new DifferentialDrive(m_left, m_right);

Constructor có hai tham số: leftright. Với differential drive, mỗi bên được xem như một motor duy nhất. Do đó, bạn cần truyền vào một đối tượng MotorGroup.

Arcade

Arcade drive sử dụng một giá trị trục y từ tay điều khiển và một giá trị từ cần xoay (turn stick). Ta biết rằng khi cần xoay được đẩy sang trái, phía bên phải robot sẽ di chuyển về phía trước và phía bên trái sẽ di chuyển lùi lại. Do đó, vì đẩy cần xoay sang trái trả về một giá trị âm, giá trị này sẽ được cộng vào tốc độ bên trái và trừ khỏi tốc độ bên phải.

Dưới đây là cách gọi phương thức arcade drive. Có một tham số boolean bổ sung là squareInputs (tùy chọn). Mặc định, giá trị này là false.

m_drive.arcadeDrive(forwardSpeed, turnSpeed);
m_drive.arcadeDrive(forwardSpeed, turnSpeed);

Tank

Tank drive sử dụng giá trị trục y từ joystick trái và phải. Mỗi joystick điều khiển trực tiếp bên tương ứng của robot.

m_drive.tankDrive(leftSpeed, rightSpeed);
m_drive.tankDrive(leftSpeed, rightSpeed);

Holonomic

Trong FTCLib, holonomic drive được rút gọn thành thuật ngữ chung là H-Drive.
Holonomic drive là kiểu drive có khả năng di chuyển theo không gian đa hướng (omnidirectional), vì vậy nó thường được gọi là omnidirectional drive. Có nhiều kiểu con khác nhau của holonomic drivebase.

Holonomic Drivebases

Holonomic ba bánh (Three Wheel Holonomic)

Một drivebase holonomic ba bánh, còn được gọi là “Kiwi” hoặc “Killough”, là một drivetrain có khả năng chuyển động đa hướng bằng cách sử dụng ba bánh omni.

Rendered bởi Pranay từ FTC 16236, CAD được thực hiện bởi Eric từ FTC 18246

Bạn có thể tạo kiwi drive như sau:

// dùng khi các bánh được đặt ở các góc 60 độ,
// 120 độ và 270 độ
HDrive kiwi_A = new HDrive(left, right, slide);
// dùng khi các bánh được đặt ở các góc khác
HDrive kiwi_B = new HDrive(left, right, slide,
                           leftAngle, rightAngle, slideAngle);
// dùng khi các bánh được đặt ở các góc 60 độ,
// 120 độ và 270 độ
HDrive kiwi_A = new HDrive(left, right, slide);
// dùng khi các bánh được đặt ở các góc khác
HDrive kiwi_B = new HDrive(left, right, slide,
                           leftAngle, rightAngle, slideAngle);

Motor slide thường nằm ở phía sau của kiwi drive, còn các motor khác là hiển nhiên. Lưu ý rằng các góc motor ở trên được tính bằng radian. Đảm bảo rằng bạn gán đúng motor/bánh xe tương ứng với từng tham số, vì chúng không được sắp xếp theo thứ tự vòng quanh robot. Hướng tiến (forward) là 0 độ.

X-Drive

X-drive là một drivebase holonomic có bốn bánh omni được bố trí theo hình chữ “X” như hình bên dưới.

Một concept X-Drive từ VEX

Bạn có thể tạo x-drive như sau:

// nhập các motor đúng theo thứ tự như bên dưới
HDrive xDrive = new HDrive(frontLeft, frontRight,
                           backLeft, backRight);
// nhập các motor đúng theo thứ tự như bên dưới
HDrive xDrive = new HDrive(frontLeft, frontRight,
                           backLeft, backRight);

Mecanum

Mecanum drivebase là một loại holonomic drive sử dụng bánh mecanum để di chuyển.

Một drivetrain mecanum song song dạng custom

Để biết thêm thông tin về mecanum drive, vui lòng xem video này.Applications of Drivetrains - Mecanum

Bạn có thể tạo mecanum drive như sau:

// nhập các motor đúng theo thứ tự như bên dưới
MecanumDrive mecanum = new MecanumDrive(frontLeft, frontRight,
                                        backLeft, backRight);
// nhập các motor đúng theo thứ tự như bên dưới
MecanumDrive mecanum = new MecanumDrive(frontLeft, frontRight,
                                        backLeft, backRight);

Sơ đồ điều khiển (Control Scheme)

Giống như differential drive có hai sơ đồ điều khiển khác nhau, holonomic drive cũng có hai sơ đồ: field-centricrobot-centric. Sự khác biệt duy nhất là có hay không việc nội suy theo heading của robot (hướng mà mặt trước của robot đang chỉ theo hệ quy chiếu toàn cục).

Robot-Centric

Robot-centric giả định rằng mỗi thao tác đẩy joystick đều liên quan đến vị trí cục bộ của robot. Điều này có nghĩa là mỗi khi người dùng đẩy joystick điều khiển tiến lên phía trước, robot sẽ di chuyển theo hướng mặt trước của nó.

Với tất cả các loại holonomic drive, bạn thực hiện điều này bằng cách gọi phương thức .driveRobotCentric(), phương thức này nhận đầu vào từ gamepad và chuyển đổi chúng thành các giá trị hướng.

m_drive.driveRobotCentric(strafeSpeed, forwardSpeed, turnSpeed)
m_drive.driveRobotCentric(strafeSpeed, forwardSpeed, turnSpeed)

Field-Centric

Field-centric giả định rằng mỗi thao tác đẩy joystick đều liên quan đến vị trí toàn cục của robot. Điều này có nghĩa là mỗi khi người dùng đẩy joystick tiến lên phía trước, robot sẽ di chuyển ra xa người điều khiển bất kể robot đang quay theo hướng nào. Điều này được thực hiện bằng cách xoay hướng của joystick theo chiều kim đồng hồ một góc bằng với heading toàn cục của robot.

Với tất cả các loại holonomic drive, bạn thực hiện điều này bằng cách gọi phương thức .driveFieldCentric(), phương thức này nhận đầu vào từ gamepad và chuyển đổi chúng thành các giá trị hướng. Ngoài ra, bạn cần truyền vào giá trị heading tính bằng độ.

m_drive.driveFieldCentric(strafeSpeed, forwardSpeed, turn, heading);
m_drive.driveFieldCentric(strafeSpeed, forwardSpeed, turn, heading);

Tham số heading là heading hiện tại của robot, thường lấy từ IMU. Lưu ý rằng giá trị này được tính bằng độ, không phải radian.

Ví dụ (Sample)

BasicDriveOpMode.java

@TeleOp
public class BasicDriveOpMode extends OpMode {
    private Motor fL, fR, bL, bR;
    private MecanumDrive drive;
    private GamepadEx driverOp;
    @Override
    public void init() {
        /* khởi tạo motor */
        
        drive = new MecanumDrive(fL, fR, bL, bR);
        driverOp = new GamepadEx(gamepad1);
    }
    
    @Override
    public void loop() {
        drive.driveRobotCentric(
            driverOp.getLeftX(),
            driverOp.getLeftY(),
            driverOp.getRightY()
        );
    }
}
@TeleOp
public class BasicDriveOpMode extends OpMode {
    private Motor fL, fR, bL, bR;
    private MecanumDrive drive;
    private GamepadEx driverOp;
    @Override
    public void init() {
        /* khởi tạo motor */
        
        drive = new MecanumDrive(fL, fR, bL, bR);
        driverOp = new GamepadEx(gamepad1);
    }
    
    @Override
    public void loop() {
        drive.driveRobotCentric(
            driverOp.getLeftX(),
            driverOp.getLeftY(),
            driverOp.getRightY()
        );
    }
}

ADUDU

A proud team of passionate Robotics Enthusiasts competing in nation-wide Technology competitions in Vietnam, the FIRST Tech Challenge and the FIRST Robotics Competition.

Copyright ©

, all rights reserved

Made by aDudu's Programming Department

made by aDudu

made by aDudu

Đế truyền động