传动系统#
介绍#
传动系统控制机器人的运动,使其能够精确地前进、转弯和停止。
当配置陀螺仪传感器或脑惯性传感器时,它还可以用作智能传动系统。
以下是所有方法的列表:
方法——控制传动系统的运动和行为。
drive – 无限期地沿指定方向移动传动系统。
drive_for – 将传动系统移动一段设定的距离。
turn – 无限期地向左或向右转动传动系统。
turn_for – 将传动系统转动一段设定的距离。
turn_to_heading – 使用传感器将智能传动系统转向指定航向。
turn_to_rotation – 将智能传动系统转到特定的旋转值。
stop – 以可配置的行为停止传动系统。
set_drive_velocity – 设置传动系统的默认移动速度。
set_turn_velocity – 设置动力传动系统的转弯移动速度。
set_stopping – 设置停止行为(制动、滑行或保持)。
set_timeout – 限制传动系统功能在运动受阻时等待的时间。
get_timeout – 返回动力传动系统的当前超时持续时间。
set_heading – 将智能传动系统的航向设置为特定值。
set_rotation – 将智能传动系统的旋转值设置为特定值。
calibrate – 校准智能传动系统配置的陀螺仪传感器或脑惯性传感器。
is_moving – 返回传动系统当前是否正在移动。
is_turning – 返回传动系统当前是否正在转动。
is_done – 返回传动系统当前是否未移动。
heading – 返回智能传动系统的当前航向。
rotation – 返回智能传动系统的当前旋转值。
velocity – 返回传动系统的当前速度。
power – 返回传动系统使用的功率。
torque – 返回传动系统产生的扭矩。
效率 – 返回传动系统的效率。
set_turn_threshold - 设置智能传动系统的转弯阈值。
set_turn_constant - 设置智能传动系统的转弯常数。
set_turn_direction_reverse - 设置智能传动系统以反转其方向。
构造函数——手动初始化和配置传动系统。
DriveTrain – 创建基本传动系统。
SmartDrive – 创建配置有陀螺仪传感器或脑惯性传感器的动力传动系统。
驾驶#
“drive” 无限期地将传动系统沿指定方向移动。
用法:
drive(方向、速度、单位)
参数 |
描述 |
---|---|
方向 |
行驶方向:
|
速度 |
可选。动力传动系统移动的速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。 |
单位 |
可选。表示速度的单位:
|
# Drive forward then stop
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
# Drive slowly in reverse then stop
drivetrain.drive(REVERSE, 20, PERCENT)
wait(2, SECONDS)
drivetrain.stop()
驱动#
drive_for
将传动系统沿指定方向移动一段设定的距离。
用法:
drive_for(方向、距离、单位、速度、units_v、等待)
参数 |
描述 |
---|---|
方向 |
行驶方向:
|
距离 |
动力传动系统移动的距离,以浮点数或整数表示。 |
单位 |
表示距离的单位:
|
速度 |
可选。动力传动系统移动的速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。 |
单位 |
可选。表示速度的单位:
|
等待 |
可选
drive_for 完成。4 |
# Drive forward and backward
drivetrain.drive_for(FORWARD, 10)
drivetrain.drive_for(REVERSE, 10)
# Quickly drive forward and backward
drivetrain.drive_for(FORWARD, 200, MM, 100, PERCENT)
drivetrain.drive_for(REVERSE, 200, MM, 100, PERCENT)
转动#
turn
无限地向左或向右转动传动系统。
用法:
转弯(方向、速度、单位)
参数 |
描述 |
---|---|
方向 |
转弯方向:
|
速度 |
可选。动力传动系统的转动速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。 |
单位 |
可选。表示速度的单位:
|
# Turn right and left, then stop
drivetrain.turn(RIGHT)
wait(2, SECONDS)
drivetrain.turn(LEFT)
wait(2, SECONDS)
drivetrain.stop()
# Quickly turn right and left, then stop
drivetrain.turn(RIGHT, 100, PERCENT)
wait(2, SECONDS)
drivetrain.turn(LEFT, 100, PERCENT)
wait(2, SECONDS)
drivetrain.stop()
转向#
turn_for
turns the drivetrain left or right for a specified angle or rotations.
用法:
turn_for(方向、角度、单位、速度、units_v、等待)
参数 |
描述 |
---|---|
方向 |
转弯方向:
|
角度 |
传动系统转动的度数,以浮点数或整数表示。 |
单位 |
表示旋转值的单位:
|
速度 |
可选。动力传动系统的转动速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。 |
单位 |
可选。表示速度的单位:
|
等待 |
可选
turn_for 完成。4 |
# Turn the robot right and left
drivetrain.turn_for(RIGHT, 90, DEGREES)
wait(1, SECONDS)
drivetrain.turn_for(LEFT, 90, DEGREES)
# Quickly turn the robot right and left
drivetrain.turn_for(RIGHT, 90, DEGREES, 100, PERCENT)
wait(1, SECONDS)
drivetrain.turn_for(LEFT, 90, DEGREES, 100, PERCENT)
转向航向#
turn_to_heading
将智能传动系统转向指定的方向。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
用法:
turn_to_heading(角度、单位、速度、units_v、等待)
参数 |
描述 |
---|---|
角度 |
以浮点数或整数形式表示传动系统转向的方向。 |
单位 |
表示旋转值的单位:
|
速度 |
可选。电机或电机组的旋转速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。 |
单位 |
可选。表示速度的单位:
|
等待 |
可选
turn_to_heading 完成。4 |
# Turn to face the cardinal directions
drivetrain.turn_to_heading(90, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_heading(180, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_heading(270, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_heading(0, DEGREES)
# Turn twice slowly
drivetrain.turn_to_heading(90, DEGREES, 20, PERCENT)
wait(1, SECONDS)
drivetrain.turn_to_heading(180, DEGREES, 20, PERCENT)
转向旋转#
turn_to_rotation
将智能传动系统旋转至指定的旋转值。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
用法:
turn_to_rotation(角度、单位、速度、units_v、等待)
参数 |
描述 |
---|---|
角度 |
将传动系统转向的旋转值作为浮点数或整数。 |
单位 |
表示旋转值的单位:
|
速度 |
可选。电机或电机组的旋转速度,以浮点数或整数表示。如果未指定速度,则默认速度为 50%。 |
单位 |
可选。表示速度的单位:
|
等待 |
可选
turn_to_rotation 完成。4 |
# Turn left, then spin in a circle clockwise and face right
drivetrain.turn_to_rotation(-90, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_rotation(450, DEGREES)
# Turn left then slowly spin in a circle clockwise
drivetrain.turn_to_rotation(-90, DEGREES)
wait(1, SECONDS)
drivetrain.turn_to_rotation(450, DEGREES, 20, PERCENT)
停止#
stop
停止传动系统。
用法:
stop(mode)
参数 |
描述 |
---|---|
模式 |
可选。传动系统方式:
|
# Drive forward then stop
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
# Drive forward and coast to a stop
drivetrain.set_drive_velocity(100, PERCENT)
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop(COAST)
设置驱动速度#
set_drive_velocity
设置传动系统的默认移动速度。如果未提供具体速度,则此速度设置将用于后续调用任何传动系统函数。
用法:
set_drive_velocity(速度,单位)
参数 |
描述 |
---|---|
速度 |
动力传动系统移动的速度,以浮点数或整数表示。 |
单位 |
可选。表示速度的单位:
|
# Drive forward at different velocities
# Default velocity
drivetrain.drive_for(FORWARD, 150, MM)
wait(1, SECONDS)
# Drive slower
drivetrain.set_drive_velocity(20, PERCENT)
drivetrain.drive_for(FORWARD, 150, MM)
wait(1, SECONDS)
# Drive faster
drivetrain.set_drive_velocity(100, PERCENT)
drivetrain.drive_for(FORWARD, 150, MM)
设置转弯速度#
set_turn_velocity
设置传动系统的默认转弯速度。如果未提供具体速度,则此速度设置将用于后续调用任何传动系统函数。
用法:
set_turn_velocity(速度,单位)
参数 |
描述 |
---|---|
速度 |
动力传动系统转动的速度,以浮点数或整数表示。 |
单位 |
可选。表示速度的单位:
|
# Turn at different velocities
# Default velocity
drivetrain.turn_for(RIGHT, 360)
wait(1, SECONDS)
# Turn slower
drivetrain.set_turn_velocity(20, PERCENT)
drivetrain.turn_for(RIGHT, 360)
wait(1, SECONDS)
# Turn faster
drivetrain.set_turn_velocity(100, PERCENT)
drivetrain.turn_for(RIGHT, 360)
设置停止#
set_stopping
设置传动系统的停止模式。
用法:
set_stopping(mode)
参数 |
描述 |
---|---|
模式 |
传动系统如何:
|
# Drive forward and coast to a stop
drivetrain.set_drive_velocity(100, PERCENT)
drivetrain.set_stopping(COAST)
drivetrain.drive(FORWARD)
wait(2, SECONDS)
drivetrain.stop()
设置超时#
set_timeout
设置传动系统函数等待达到目标的时间限制。如果传动系统无法在设定的时间内完成运动,它将自动停止并继续执行下一个函数。
**注意:**传动系统的时间限制用于防止未达到目标位置的传动系统功能停止项目其余部分的执行。
用法:
set_timeout(值,单位)
参数 |
描述 |
---|---|
价值 |
运动功能在停止并移动到下一个功能之前运行的最大秒数(整数或浮点数)。 |
单位 |
可选。表示时间的单位:
|
# Turn right after driving forward
drivetrain.set_timeout(1, SECONDS)
drivetrain.drive_for(FORWARD, 25, INCHES)
drivetrain.turn_for(RIGHT, 90)
获取超时#
get_timeout
以毫秒为单位返回传动系统的当前超时时间。
用法:
get_timeout()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Display the timeout period after moving forward
drivetrain.set_timeout(1000, MSEC)
drivetrain.drive_for(FORWARD, 25, INCHES)
brain.screen.print("Waited " + "{:.0f}".format(drivetrain.get_timeout()) + " msec")
drivetrain.turn_for(RIGHT, 90)
设置标题#
set_heading
设置智能传动系统的航向。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
用法:
set_heading(heading, unit)
参数 |
描述 |
---|---|
标题 |
新的标题为浮点数或整数。 |
单位 |
可选。表示航向的单位:
|
# Face the new 0 degrees
drivetrain.set_heading(90, DEGREES)
drivetrain.turn_to_heading(0, DEGREES)
设置旋转#
set_rotation
方法设置智能传动系统的旋转。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
用法:
set_rotation(rotation, unit)
参数 |
描述 |
---|---|
旋转 |
新的旋转值为浮点数或整数。 |
单位 |
可选。表示航向的单位:
|
# Spin counterclockwise two times
drivetrain.set_rotation(720, DEGREES)
drivetrain.turn_to_rotation(0, DEGREES)
正在移动#
is_moving
返回一个布尔值,指示传动系统当前是否正在移动。
“真”——传动系统正在移动。
“错误”——传动系统没有移动。
用法:
is_moving()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Stop the Drivetrain after moving forward for some time
drivetrain.drive_for(FORWARD, 200, MM, wait=False)
while drivetrain.is_moving():
brain.screen.set_cursor(1, 1)
brain.screen.print("Still Moving...")
wait (0.1, SECONDS)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")
正在转弯#
is_moving
返回一个布尔值,指示智能传动系统当前是否正在转动。
“真实”——智能传动系统正在转动。
“错误”——智能传动系统没有转动。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
用法:
is_turning()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Detect when the Drivetrain is still turning
drivetrain.turn_for(RIGHT, 180, DEGREES, wait=False)
while drivetrain.is_turning():
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Turning...")
wait (0.1, SECONDS)
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")
完成()#
is_done
返回一个布尔值,指示传动系统当前是否没有移动。
“True”——传动系统没有移动。
“错误”——传动系统正在移动。
用法:
is_done()
参数 |
描述 |
---|---|
该方法没有参数。 |
# Stop the Drivetrain and turn right after moving
# forward for some time
drivetrain.drive_for(FORWARD, 200, MM, wait=False)
while True:
if drivetrain.is_done():
drivetrain.turn_for(RIGHT, 360)
break
else:
brain.screen.set_cursor(1, 1)
brain.screen.print("Still Moving...")
wait (0.1, SECONDS)
brain.screen.clear_screen()
标题#
heading
以浮点数形式返回智能传动系统的当前航向。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
用法:
标题(单位)
参数 |
描述 |
---|---|
单位 |
可选。表示旋转值的单位:
|
# Display the heading after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print("Heading: ")
brain.screen.print(drivetrain.heading())
旋转#
rotation
以浮点数形式返回智能传动系统的当前旋转值。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
参数 |
描述 |
---|---|
单位 |
可选。表示旋转值的单位:
|
# Display the rotation after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print("Rotation: ")
brain.screen.print(drivetrain.rotation())
速度#
velocity
以浮点数形式返回传动系统的当前速度。
参数 |
描述 |
---|---|
单位 |
可选。表示速度的单位:
|
# Display the robot's velocity before and after moving
brain.screen.print(drivetrain.velocity())
brain.screen.next_row()
drivetrain.drive(FORWARD)
wait(1, SECONDS)
brain.screen.print(drivetrain.velocity())
drivetrain.stop()
设置转弯阈值#
set_turn_threshold
方法设置智能传动系统的转弯阈值。该阈值用于判断转弯是否完成。如果阈值过大,转弯将不准确。如果阈值过小,转弯可能无法完成。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
用法:
set_turn_threshold(value)
参数 |
描述 |
---|---|
价值 |
以度为单位设置的转弯阈值,可以是浮点数或整数。默认转弯阈值为 1 度。 |
# Turn and display the heading with different turn thresholds
brain.screen.set_font(FontType.PROP20)
brain.screen.print("Default threshold: ")
drivetrain.turn_for(RIGHT, 90, DEGREES)
brain.screen.print(drivetrain.heading())
brain.screen.next_row()
wait(2, SECONDS)
brain_inertial.reset_heading()
brain.screen.print("20 degree Threshold: ")
drivetrain.set_turn_threshold(20)
drivetrain.turn_for(RIGHT, 90, DEGREES)
brain.screen.print(drivetrain.heading())
设置转弯常数#
set_turn_constant
设置智能传动系统的转弯常数。智能传动系统在转弯时使用一个简单的 P 控制器。这个常数,通常称为 kp,是将角度误差转换为电机速度的方程中使用的增益。
注意:此方法仅适用于配置了陀螺仪传感器或脑惯性传感器的传动系统。
用法:
set_turn_constant(value)
参数 |
描述 |
---|---|
价值 |
新的转弯常数,范围为 0.1 - 4.0。默认值为 1.0。 |
# Turn and display the heading with different turn constants
brain.screen.set_font(FontType.PROP20)
brain.screen.print("Default Constant: ")
drivetrain.turn_for(RIGHT, 90, DEGREES)
brain.screen.print(drivetrain.heading())
brain.screen.next_row()
wait(2, SECONDS)
brain_inertial.reset_heading()
brain.screen.print("0.2 Turn Constant: ")
drivetrain.set_turn_constant(0.2)
drivetrain.turn_for(RIGHT, 90, DEGREES)
brain.screen.print(drivetrain.heading())
构造函数#
构造函数用于手动创建“DriveTrain”和“SmartDrive”对象,这些对象对于在 VEXcode 之外配置动力传动系统是必需的。
对于下面的示例,配置的传动系统将被命名为“drivetrain_1”,并且在整个 API 文档的所有后续示例中引用“DriveTrain”和“SmartDrive”类方法时将使用它。
**注意:**为了创建动力传动系统,必须已经创建至少两个 Motor
或 MotorGroup
对象。
传动系统#
“DriveTrain” 创建了一个没有陀螺仪传感器或脑惯性传感器的动力传动系统。
用法:
DriveTrain(lm,rm,wheelTravel,trackWidth,wheelBase,units,externalGearRatio)
范围 |
描述 |
---|---|
|
|
|
|
|
可选。传动系统车轮的周长。默认值为 300 毫米。 |
|
可选。传动系统的轮距。默认值为 320 毫米。 |
|
可选。传动系统的轴距。默认值为 320 毫米。 |
|
可选。代表
|
|
可选。如果传动比为整数,则用于补偿驱动距离的传动比。 |
# Create the Motors
left_drive_smart = Motor(Ports.PORT1, 1.0, False)
right_drive_smart = Motor(Ports.PORT2, 1.0, True)
# Construct a 2-Motor Drivetrain "drivetrain" with the
# DriveTrain class
drivetrain = DriveTrain(left_drive_smart, right_drive_smart, 200, 173, 76, MM, 1)
drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.drive_for(REVERSE, 200, MM)
# Create the left Motors and group them under the
# MotorGroup "left_motors"
left_motor_a = Motor(Ports.PORT1, 1.0, False)
left_motor_b = Motor(Ports.PORT2, 1.0, False)
left_drive_smart = MotorGroup(left_motor_a, left_motor_b)
# Create the right Motors and group them under the
# MotorGroup "right_motors"
right_motor_a = Motor(Ports.PORT3, 1.0, True)
right_motor_b = Motor(Ports.PORT4, 1.0, True)
right_drive_smart = MotorGroup(right_motor_a, right_motor_b)
# Construct a 4-Motor Drivetrain "drivetrain" with the
# DriveTrain class
drivetrain = DriveTrain(left_drive_smart, right_drive_smart, 200, 173, 76, MM, 1)
drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.drive_for(REVERSE, 200, MM)
智能传动系统#
“SmartDrive”创建带有陀螺仪传感器或脑惯性传感器的传动系统。
用法:
SmartDrive(lm、rm、g、wheelTravel、trackWidth、wheelBase、units、externalGearRatio)
范围 |
描述 |
---|---|
|
|
|
|
|
|
|
可选。传动系统车轮的周长。默认值为 300 毫米。 |
|
可选。传动系统的轮距。默认值为 320 毫米。 |
|
可选。传动系统的轴距。默认值为 320 毫米。 |
|
可选。代表
|
|
可选。如果传动比为整数,则用于补偿驱动距离的传动比。 |
# Construct a SmartDrive Drivetrain with 2 motors
brain_inertial = Inertial()
left_drive_smart = Motor(Ports.PORT1, 1.0, False)
right_drive_smart = Motor(Ports.PORT6, 1.0, True)
drivetrain = SmartDrive(left_drive_smart, right_drive_smart, brain_inertial, 200)
drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.drive_for(REVERSE, 200, MM)
如果制作带有多个电机的智能传动系统,则需要先单独创建 电机,然后再将它们分组到 电机组中。
# Construct a SmartDrive Drivetrain with 4 motors
brain_inertial = Inertial()
left_motor_a = Motor(Ports.PORT1, 1.0, False)
left_motor_b = Motor(Ports.PORT2, 1.0, False)
left_drive_smart = MotorGroup(left_motor_a, left_motor_b)
right_motor_a = Motor(Ports.PORT5, 1.0, True)
right_motor_b = Motor(Ports.PORT6, 1.0, True)
right_drive_smart = MotorGroup(right_motor_a, right_motor_b)
drivetrain = SmartDrive(left_drive_smart, right_drive_smart, brain_inertial, 200)
drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.drive_for(REVERSE, 200, MM)