|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object java.lang.Thread lejos.robotics.navigation.Segoway lejos.robotics.navigation.SegowayPilot
public class SegowayPilot
Allow standard moves with a Segoway robot. Currently the robot has a 5 second delay between moves to allow it some time to rebalance and straighten out uneven tacho rotations. This can be changed with setMoveDelay().
This code will work with any Segway-style robot, but tall robots will have problems balancing when the robot is moving. To counteract this, use larger wheels and/or slow down the speed using setTravelSpeed(). Make sure the battery is fully charged. The robot is more stable on carpet than hardwood at higher speeds.
The default speed is 50, which can be changed with setTravelSpeed().
Segoway
Nested Class Summary |
---|
Nested classes/interfaces inherited from class java.lang.Thread |
---|
Thread.UncaughtExceptionHandler |
Field Summary | |
---|---|
static int |
ARC_B
|
static int |
ARC_F
|
static int |
BACKWARD_T
|
static int |
FORWARD_T
|
static int |
ROTATE_L
|
static int |
ROTATE_R
|
int |
SPEED
|
static int |
STOP
|
Fields inherited from class lejos.robotics.navigation.Segoway |
---|
left_motor, right_motor |
Fields inherited from class java.lang.Thread |
---|
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY |
Fields inherited from interface lejos.robotics.navigation.MoveController |
---|
WHEEL_SIZE_NXT1, WHEEL_SIZE_NXT2, WHEEL_SIZE_RCX |
Fields inherited from interface lejos.robotics.navigation.MoveController |
---|
WHEEL_SIZE_NXT1, WHEEL_SIZE_NXT2, WHEEL_SIZE_RCX |
Constructor Summary | |
---|---|
SegowayPilot(EncoderMotor left,
EncoderMotor right,
Gyroscope gyro,
double wheelDiameter,
double trackWidth)
Creates an instance of SegowayPilot. |
Method Summary | |
---|---|
void |
addMoveListener(MoveListener m)
Adds a MoveListener that will be notified of all movement events. |
void |
arc(double radius,
double angle)
Moves the NXT robot along an arc with a specified radius and angle, after which the robot stops moving. |
void |
arc(double radius,
double angle,
boolean immediateReturn)
Moves the NXT robot along an arc with a specified radius and angle, after which the robot stops moving. |
void |
arcBackward(double radius)
Starts the NXT robot moving backward along an arc with a specified radius. |
void |
arcForward(double radius)
Starts the NXT robot moving forward along an arc with a specified radius. |
void |
backward()
Starts the NXT robot moving backwards. |
void |
forward()
Starts the NXT robot moving forward. |
float |
getAngleIncrement()
|
double |
getMaxTravelSpeed()
Returns the maximum speed at which this robot is capable of traveling forward and backward. |
double |
getMinRadius()
The minimum steering radius this vehicle is capable of when traveling in an arc. |
Move |
getMovement()
Returns the move made since the move started, but before it has completed. |
double |
getMovementIncrement()
|
double |
getRotateMaxSpeed()
returns the maximum value of the rotation speed; |
double |
getRotateSpeed()
Returns the value of the rotation speed |
double |
getTravelSpeed()
Returns the speed at which the robot will travel forward and backward (and to some extent arcs, although actual arc speed is slightly less). |
boolean |
isMoving()
true if the robot is moving |
void |
rotate(double angle)
Rotates the NXT robot the specified number of degrees; direction determined by the sign of the parameter. |
void |
rotate(double degrees,
boolean immediateReturn)
Rotates the NXT robot the specified number of degrees; direction determined by the sign of the parameter. |
void |
setMinRadius(double radius)
Set the radius of the minimum turning circle. |
void |
setMoveDelay(int millis)
Set the delay between movements which allows the Segoway to recover balance. |
void |
setRotateSpeed(double arg0)
sets the rotation speed of the robot (the angular velocity of the rotate() methods) |
void |
setTravelSpeed(double speed)
Currently this method isn't properly implemented with the proper units. |
void |
steer(double turnRate,
double angle,
boolean immediateReturn)
Moves the robot along a curved path for a specified angle of rotation. |
void |
stop()
Halts the NXT robot |
void |
travel(double distance)
Moves the NXT robot a specific distance. |
void |
travel(double distance,
boolean immediateReturn)
Moves the NXT robot a specific distance. |
void |
travelArc(double radius,
double distance)
Moves the NXT robot a specified distance along an arc of specified radius, after which the robot stops moving. |
void |
travelArc(double radius,
double distance,
boolean immediateReturn)
Moves the NXT robot a specified distance along an arc of specified radius, after which the robot stops moving. |
Methods inherited from class lejos.robotics.navigation.Segoway |
---|
run, wheelDriver |
Methods inherited from class java.lang.Thread |
---|
currentThread, getDefaultUncaughtExceptionHandler, getName, getPriority, getUncaughtExceptionHandler, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, start, yield |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public int SPEED
public static final int STOP
public static final int FORWARD_T
public static final int BACKWARD_T
public static final int ROTATE_L
public static final int ROTATE_R
public static final int ARC_F
public static final int ARC_B
Constructor Detail |
---|
public SegowayPilot(EncoderMotor left, EncoderMotor right, Gyroscope gyro, double wheelDiameter, double trackWidth)
left
- The left motor.right
- The right motor.gyro
- A generic gyroscopewheelDiameter
- The diameter of the wheel. For convenience, use the WHEEL_SIZE_XXX constants.trackWidth
- Distance between the center of the right tire and left tire. Use the same units as wheelDiameter.Method Detail |
---|
public void steer(double turnRate, double angle, boolean immediateReturn)
arc(double radius, double angle, boolean immediateReturn)
method except it uses the turnRate()
parameter to determine the curvature of the path and therefore has the ability to drive straight.
This makes it useful for line following applications. This method has the ability to return immediately
by using the immediateReturn
parameter set to true.
The turnRate
specifies the sharpness of the turn. Use values between -200 and +200.
For details about how this parameter works, see DifferentialPilot.steer(double, double)
The robot will stop when its heading has changed by the amount of the angle
parameter.
If angle
is positive, the robot will move in the direction that increases its heading (it turns left).
If angle
is negative, the robot will move in the direction that decreases its heading (turns right).
If angle
is zero, the robot will not move and the method returns immediately.
For more details about this parameter, see DifferentialPilot.steer(double, double)
Note: If you have specified a drift correction in the constructor it will not be applied in this method.
turnRate
- If positive, the left side of the robot is on the inside of the turn. If negative,
the left side is on the outside.angle
- The angle through which the robot will rotate. If negative, robot traces the turning circle backwards.immediateReturn
- If immediateReturn is true then the method returns immediately.public void arc(double radius, double angle, boolean immediateReturn)
ArcMoveController
immediateReturn
parameter.
If radius
is positive, the robot arcs left, and the center of the turning circle is on the left side of the robot.
If radius
is negative, the robot arcs right, and the center of the turning circle is on the right side of the robot.
If radius
is zero, is zero, the robot rotates in place.
The robot will stop when the degrees it has moved along the arc equals angle
.
If angle
is positive, the robot will move travel forwards.
If angle
is negative, the robot will move travel backwards.
If angle
is zero, the robot will not move and the method returns immediately.
Postcondition: Motor speeds are unpredictable.
Note: If you have specified a drift correction in the constructor it will not be applied in this method.
arc
in interface ArcMoveController
radius
- of the arc path. If positive, the left side of the robot is on the inside of the turn. If negative, the left
side of the robot is on the outside of the turn.angle
- The sign of the angle determines the direction of robot motion. Positive drives the robot forward, negative drives it backward.immediateReturn
- If immediateReturn is true then the method returns immediately.ArcMoveController.travelArc(double, double, boolean)
public void forward()
MoveController
forward
in interface MoveController
public void backward()
MoveController
backward
in interface MoveController
public void setMoveDelay(int millis)
public void stop()
MoveController
stop
in interface MoveController
public void travel(double distance, boolean immediateReturn)
MoveController
travel
in interface MoveController
distance
- The positive or negative distance to move the robot, in wheel diameter units.immediateReturn
- If immediateReturn is true then the method returns immediately.public void rotate(double degrees, boolean immediateReturn)
RotateMoveController
rotate
in interface RotateMoveController
degrees
- The angle to rotate in degrees. A positive value rotates left, a negative value right (clockwise).immediateReturn
- If immediateReturn is true then the method returns immediatelypublic double getMaxTravelSpeed()
MoveController
getMaxTravelSpeed
in interface MoveController
public double getMovementIncrement()
public double getTravelSpeed()
MoveController
getTravelSpeed
in interface MoveController
public void setTravelSpeed(double speed)
setTravelSpeed
in interface MoveController
speed
- The speed to travel.public boolean isMoving()
MoveController
isMoving
in interface MoveController
public void travel(double distance)
MoveController
travel
in interface MoveController
distance
- The positive or negative distance to move the robot.public void addMoveListener(MoveListener m)
MoveProvider
addMoveListener
in interface MoveProvider
m
- the move listenerpublic Move getMovement()
MoveProvider
getMovement
in interface MoveProvider
public float getAngleIncrement()
public double getRotateMaxSpeed()
RotateMoveController
getRotateMaxSpeed
in interface RotateMoveController
public double getRotateSpeed()
RotateMoveController
getRotateSpeed
in interface RotateMoveController
public void rotate(double angle)
RotateMoveController
rotate
in interface RotateMoveController
angle
- The angle to rotate in degrees. A positive value rotates left, a negative value right (clockwise).public void setRotateSpeed(double arg0)
RotateMoveController
setRotateSpeed
in interface RotateMoveController
arg0
- in degrees per secondpublic void arc(double radius, double angle)
ArcMoveController
angle
degrees along the arc.
If radius
is positive, the robot arcs left, and the center of the turning circle is on the left side of the robot.
If radius
is negative, the robot arcs right, and the center of the turning circle is on the right side of the robot.
If radius
is zero, is zero, the robot rotates in place.
Robot will stop when the degrees it has moved along the arc equals angle
.
If angle
is positive, the robot will move travel forwards.
If angle
is negative, the robot will move travel backwards.
If angle
is zero, the robot will not move and the method returns immediately.
Postcondition: Motor speeds are unpredictable.
Note: If you have specified a drift correction in the constructor it will not be applied in this method.
arc
in interface ArcMoveController
radius
- of the arc path. If positive, the left side of the robot is on the inside of the turn. If negative, the left
side of the robot is on the outside of the turn.angle
- The sign of the angle determines the direction of robot motion. Positive drives the robot forward, negative drives it backward.ArcMoveController.travelArc(double, double)
public void arcBackward(double radius)
ArcMoveController
If radius
is positive, the robot arcs left, and the center of the turning circle is on the left side of the robot.
If radius
is negative, the robot arcs right, and the center of the turning circle is on the right side of the robot.
If radius
is zero, the robot rotates in place.
Postcondition: Motor speeds are unpredictable.
Note: If you have specified a drift correction in the constructor it will not be applied in this method.
arcBackward
in interface ArcMoveController
radius
- of the arc path. If positive, the left side of the robot is on the inside of the turn. If negative, the left
side of the robot is on the outside of the turn.public void arcForward(double radius)
ArcMoveController
If radius
is positive, the robot arcs left, and the center of the turning circle is on the left side of the robot.
If radius
is negative, the robot arcs right, and the center of the turning circle is on the right side of the robot.
If radius
is zero, the robot rotates in place.
Postcondition: Motor speeds are unpredictable.
Note: If you have specified a drift correction in the constructor it will not be applied in this method.
arcForward
in interface ArcMoveController
radius
- of the arc path. If positive, the left side of the robot is on the inside of the turn. If negative, the left
side of the robot is on the outside of the turn.public double getMinRadius()
ArcMoveController
getMinRadius
in interface ArcMoveController
public void setMinRadius(double radius)
ArcMoveController
setMinRadius
in interface ArcMoveController
radius
- the radius in degreespublic void travelArc(double radius, double distance)
ArcMoveController
distance
along the arc. The units (inches, cm) for distance
must be the same as the units used for radius
.
If radius
is positive, the robot arcs left, and the center of the turning circle is on the left side of the robot.
If radius
is negative, the robot arcs right, and the center of the turning circle is on the right side of the robot.
If radius
is zero, the robot rotates in place
The robot will stop when it has moved along the arc distance
units.
If distance
is positive, the robot will move travel forwards.
If distance
is negative, the robot will move travel backwards.
If distance
is zero, the robot will not move and the method returns immediately.
Postcondition: Motor speeds are unpredictable.
travelArc
in interface ArcMoveController
radius
- of the arc path. If positive, the left side of the robot is on the inside of the turn. If negative, the left
side of the robot is on the outside of the turn.distance
- to travel, in same units as radius
. The sign of the distance determines the direction of robot motion. Positive drives the robot forward, negative drives it backward.ArcMoveController.arc(double, double)
public void travelArc(double radius, double distance, boolean immediateReturn)
ArcMoveController
immediateReturn
parameter.
The units (inches, cm) for distance
should be the same as the units used for radius
.
If radius
is positive, the robot arcs left, and the center of the turning circle is on the left side of the robot.
If radius
is negative, the robot arcs right, and the center of the turning circle is on the right side of the robot.
If radius
is zero, the robot rotates in place.
The robot will stop when it has moved along the arc distance
units.
If distance
is positive, the robot will move travel forwards.
If distance
is negative, the robot will move travel backwards.
If distance
is zero, the robot will not move and the method returns immediately.
Postcondition: Motor speeds are unpredictable.
travelArc
in interface ArcMoveController
radius
- of the arc path. If positive, the left side of the robot is on the inside of the turn. If negative, the left
side of the robot is on the outside of the turn.distance
- to travel, in same units as radius
. The sign of the distance determines the direction of robot motion. Positive drives the robot forward, negative drives it backward.immediateReturn
- If immediateReturn is true then the method returns immediately.ArcMoveController.arc(double, double, boolean)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |