Reverse is negative speed
Steering the brick backwards (in reverse) is simple. Reverse is just a negative speed setting. To steer the brick to the left in reverse at 75% speed:
motors.largeBC.steer(-15, -75)
Steer the brick in one direction using a turn ratio between two motors.
motors.largeAB.steer(0, 0)
A brick driving with two motors can steer itself by changing the speed of one motor compared to the speed of the other. To make a slow turn to the left, you might make the right motor run slightly faster than the left one. To make a fast, or sharp, turn to the right, the left motor could run at least twice as fast as the right one.
The EV3 Brick steers by using a percentage value of follow for one of the motors. This means that the motor in the turn direction will rotate slower than the other. It is the follower motor and the other motor is the drive motor. The drive motor runs at a percentage of full speed set in speed. The follower motor runs at a percentage of speed of the drive motor. So, it runs at a percentage of a percentage of full speed.
To make the turn happen you give a turn ratio which is a percentage value of steer to the left or right. If you want to steer to the left at 30% of the of the drive motor speed, use the value of -30
for turnRatio. Left turns use negative values and right turns use positive values. A really sharp turn to the right might use a turn ratio value of 80
.
The speed setting is a pecentage of the motor’s full speed. Full speed is the speed that the motors run when the brick supplies maximum output voltage to the port.
If you use just the speed number, the motors run continously and won’t stop unless you tell them to. You can also give a value for a certain amount of distance you want the motors to rotate for. The value can be an amount of time, a turn angle in degrees, or a number of full rotations.
If you decide to use a value of rotation distance, you need to choose a type of movement unit. Also, if you use a number of milliseconds as movement units, then you don’t need to include the unit type. The description in run shows how to use different movement units.
-200
and 200
.0
means run the motor continuously.milliseconds
, seconds
, degrees
, or rotations
. If the number for value is 0
, this parameter isn’t used.Turn to the right with a turn ratio of 10%.
motors.largeBC.steer(10, 55)
Turn sharply to the left.
motors.largeBC.steer(-80, 40)
Use steer but go straight ahead.
motors.largeBC.steer(0, 100)
Steer the brick in a snake pattern for a short time.
for (let i = 0; i < 4; i++) {
motors.largeBC.steer(30, 30)
pause(5000)
motors.largeBC.steer(-30, 30)
pause(5000)
}
motors.stopAll()
This program lets you change the values of speed and turn ratio with the buttons.
let speed = 0;
let turnRatio = 0;
brick.showString(`steer tester`, 1)
brick.showString(`connect motors BC`, 7)
brick.showString(`up/down for speed`, 8)
brick.showString(`left/right for turn ratio`, 9)
forever(function () {
brick.showString(`motor B speed ${motors.largeB.speed()}%`, 4)
brick.showString(`motor C speed ${motors.largeC.speed()}%`, 5)
pause(100)
})
function updateSteer() {
motors.largeBC.steer(turnRatio, speed);
brick.showString(`speed ${speed}%`, 2)
brick.showString(`turnRatio ${turnRatio}`, 3)
}
brick.buttonUp.onEvent(ButtonEvent.Pressed, function () {
speed += 10
updateSteer()
})
brick.buttonDown.onEvent(ButtonEvent.Pressed, function () {
speed -= 10
updateSteer()
})
brick.buttonLeft.onEvent(ButtonEvent.Pressed, function () {
turnRatio -= 10
updateSteer()
})
brick.buttonRight.onEvent(ButtonEvent.Pressed, function () {
turnRatio += 10
updateSteer()
})
updateSteer()