|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object lejos.navigation.TachoPilot
public class TachoPilot
The TachoPilot class is a software abstraction of the Pilot mechanism of a NXT robot. It contains methods to control
robot movements: travel forward or backward in a straight line or a circular path or rotate to a new direction.
Note: this class will only work with two independently controlled motors to steer differentially, so it can rotate
within its own footprint (i.e. turn on one spot).
It can be used with robots that have reversed motor design: the robot moves in the direction opposite to the the
direction of motor rotation. Uses the Motor class, which regulates motor speed using the NXT motor's built in
tachometer.
Some methods optionally return immediately so the thread that called the method can monitor sensors and call stop()
if necessary.
Uses the smoothAcceleration property of Motors to improve motor synchronization when starting a movement. Example:
Pilot pilot = new TachoPilot(2.1f, 4.4f, Motor.A, Motor.C, true); // parameters in inches
pilot.setRobotSpeed(10); // inches per second
pilot.travel(12); // inches
pilot.rotate(-90); // degree clockwise
pilot.travel(-12,true);
while(pilot.isMoving())Thread.yield();
pilot.rotate(-90);
pilot.rotateTo(270);
pilot.steer(-50,180,true);
while(pilot.isMoving())Thread.yield();
pilot.steer(100);
try{Thread.sleep(1000);}
catch(InterruptedException e){}
pilot.stop();
Field Summary | |
---|---|
protected Motor |
_left
Left motor. |
protected float |
_leftDegPerDistance
Left motor degrees per unit of travel. |
protected float |
_leftTurnRatio
Left motor revolutions for 360 degree rotation of robot (motors running in opposite directions). |
protected float |
_leftWheelDiameter
Diameter of left wheel. |
protected int |
_motorSpeed
Motor speed degrees per second. |
protected Motor |
_right
Right motor. |
protected float |
_rightDegPerDistance
Right motor degrees per unit of travel. |
protected float |
_rightTurnRatio
Right motor revolutions for 360 degree rotation of robot (motors running in opposite directions). |
protected float |
_rightWheelDiameter
Diameter of right wheel. |
protected float |
_robotMoveSpeed
Speed of robot for moving in wheel diameter units per seconds. |
protected float |
_robotTurnSpeed
Speed of robot for turning in degree per seconds. |
protected float |
_trackWidth
Distance between wheels. |
Constructor Summary | |
---|---|
TachoPilot(float leftWheelDiameter,
float rightWheelDiameter,
float trackWidth,
Motor leftMotor,
Motor rightMotor,
boolean reverse)
Allocates a TachoPilot object, and sets the physical parameters of the NXT robot. |
|
TachoPilot(float wheelDiameter,
float trackWidth,
Motor leftMotor,
Motor rightMotor)
Allocates a TachoPilot object, and sets the physical parameters of the NXT robot. Assumes Motor.forward() causes the robot to move forward. |
|
TachoPilot(float wheelDiameter,
float trackWidth,
Motor leftMotor,
Motor rightMotor,
boolean reverse)
Allocates a TachoPilot object, and sets the physical parameters of the NXT robot. |
Method Summary | |
---|---|
void |
backward()
Moves the NXT robot backward until stop() is called. |
void |
forward()
Moves the NXT robot forward until stop() is called. |
float |
getAngle()
|
Motor |
getLeft()
|
int |
getLeftActualSpeed()
|
int |
getLeftCount()
|
float |
getMoveMaxSpeed()
|
float |
getMoveSpeed()
|
Motor |
getRight()
|
int |
getRightActualSpeed()
|
int |
getRightCount()
|
float |
getTravelDistance()
|
float |
getTurnMaxSpeed()
|
float |
getTurnRatio()
|
float |
getTurnSpeed()
|
boolean |
isMoving()
|
void |
regulateSpeed(boolean yes)
Sets motor speed regulation (default is true). Allows steer() method to be called by (for example) a line tracker or compass navigator so direction control is from sensor inputs. |
void |
reset()
Resets tacho count for both motors. |
void |
rotate(float angle)
Rotates the NXT robot through a specific angle. |
void |
rotate(float angle,
boolean immediateReturn)
Rotates the NXT robot through a specific angle. |
void |
setMoveSpeed(float speed)
also sets _motorSpeed |
void |
setSpeed(int speed)
Sets speed of both motors, as well as moveSpeed and turnSpeed. |
void |
setTurnSpeed(float speed)
Sets the turning speed of the robot. |
boolean |
stalled()
|
void |
steer(int turnRate)
Moves the NXT robot in a circular path at a specific turn rate. |
void |
steer(int turnRate,
int angle)
Moves the NXT robot in a circular path at a specific turn rate. |
void |
steer(int turnRate,
int angle,
boolean immediateReturn)
Moves the NXT robot in a circular path at a specific turn rate. |
void |
stop()
Stops the NXT robot. |
void |
travel(float distance)
Moves the NXT robot a specific distance in an (hopefully) straight line. A positive distance causes forward motion, a negative distance moves backward. |
void |
travel(float distance,
boolean immediateReturn)
Moves the NXT robot a specific distance in an (hopefully) straight line. A positive distance causes forward motion, a negative distance moves backward. |
void |
turn(float radius)
Moves the NXT robot in a circular path with a specified radius. |
void |
turn(float radius,
int angle)
Moves the NXT robot in a circular arc through the specificd angle; The center of the turning circle is on the right side of the robot iff parameter radius is negative. |
void |
turn(float radius,
int angle,
boolean immediateReturn)
Move in a circular arc with specified radius; the center of the turning circle is on the right side of the robot if the radius is negative. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final Motor _left
protected final Motor _right
protected final float _leftDegPerDistance
protected final float _rightDegPerDistance
protected final float _leftTurnRatio
protected final float _rightTurnRatio
protected float _robotMoveSpeed
protected float _robotTurnSpeed
protected int _motorSpeed
protected final float _trackWidth
protected final float _leftWheelDiameter
protected final float _rightWheelDiameter
Constructor Detail |
---|
public TachoPilot(float wheelDiameter, float trackWidth, Motor leftMotor, Motor rightMotor)
wheelDiameter
- Diameter of the tire, in any convenient units (diameter in mm is usually printed on the tire).trackWidth
- Distance between center of right tire and center of left tire, in same units as wheelDiameter.leftMotor
- The left Motor (e.g., Motor.C).rightMotor
- The right Motor (e.g., Motor.A).public TachoPilot(float wheelDiameter, float trackWidth, Motor leftMotor, Motor rightMotor, boolean reverse)
wheelDiameter
- Diameter of the tire, in any convenient units (diameter in mm is usually printed on the tire).trackWidth
- Distance between center of right tire and center of left tire, in same units as wheelDiameter.leftMotor
- The left Motor (e.g., Motor.C).rightMotor
- The right Motor (e.g., Motor.A).reverse
- If true, the NXT robot moves forward when the motors are running backward.public TachoPilot(float leftWheelDiameter, float rightWheelDiameter, float trackWidth, Motor leftMotor, Motor rightMotor, boolean reverse)
leftWheelDiameter
- Diameter of the left wheel, in any convenient units (diameter in mm is usually printed on
the tire).rightWheelDiameter
- Diameter of the right wheel. You can actually fit intentionally wheels with different
size to your robot. If you fitted wheels with the same size, but your robot is not going straight, try
swapping the wheels and see if it deviates into the other direction. That would indicate a small
difference in wheel size. Adjust wheel size accordingly. The minimum change in wheel size which will
actually have an effect is given by minChange = A*wheelDiameter*wheelDiameter/(1-(A*wheelDiameter) where A
= PI/(moveSpeed*360). Thus for a moveSpeed of 25 cm/second and a wheelDiameter of 5,5 cm the minChange is
about 0,01058 cm... The reason for this is, that different while sizes will result in different motor
speed. And that is given as an integer in degree per second.trackWidth
- Distance between center of right tire and center of left tire, in same units as wheelDiameter.leftMotor
- The left Motor (e.g., Motor.C).rightMotor
- The right Motor (e.g., Motor.A).reverse
- If true, the NXT robot moves forward when the motors are running backward.Method Detail |
---|
public Motor getLeft()
public Motor getRight()
public int getLeftCount()
public int getRightCount()
public int getLeftActualSpeed()
public int getRightActualSpeed()
public float getTurnRatio()
public void setSpeed(int speed)
setSpeed
in interface Pilot
speed
- The wanted speed in degrees per second.public void setMoveSpeed(float speed)
setMoveSpeed
in interface Pilot
speed
- The speed in wheel diameter units per second.Pilot.setMoveSpeed(float)
public float getMoveSpeed()
getMoveSpeed
in interface Pilot
Pilot.getMoveSpeed()
public float getMoveMaxSpeed()
getMoveMaxSpeed
in interface Pilot
Pilot.getMoveMaxSpeed()
public void setTurnSpeed(float speed)
Pilot
setTurnSpeed
in interface Pilot
speed
- The speed in degree per second.Pilot.setTurnSpeed(float)
public float getTurnSpeed()
getTurnSpeed
in interface Pilot
Pilot.getTurnSpeed()
public float getTurnMaxSpeed()
getTurnMaxSpeed
in interface Pilot
Pilot.getTurnMaxSpeed()
public void forward()
forward
in interface Pilot
Navigator.stop()
public void backward()
backward
in interface Pilot
Navigator.stop()
public void rotate(float angle)
rotate
in interface Pilot
angle
- The wanted angle of rotation in degrees. Positive angle rotate left (clockwise), negative right.public void rotate(float angle, boolean immediateReturn)
rotate
in interface Pilot
angle
- The wanted angle of rotation in degrees. Positive angle rotate left (clockwise), negative right.immediateReturn
- If true this method returns immediately.public float getAngle()
getAngle
in interface Pilot
public void stop()
stop
in interface Pilot
Navigator.forward()
public boolean isMoving()
isMoving
in interface Pilot
public void reset()
reset
in interface Pilot
public float getTravelDistance()
getTravelDistance
in interface Pilot
public void travel(float distance)
travel
in interface Pilot
distance
- The distance to move. Unit of measure for distance must be same as wheelDiameter and trackWidth.public void travel(float distance, boolean immediateReturn)
travel
in interface Pilot
distance
- The distance to move. Unit of measure for distance must be same as wheelDiameter and trackWidth.immediateReturn
- If true this method returns immediately.public void steer(int turnRate)
steer
in interface Pilot
turnRate
- If positive, the left wheel is on the inside of the turn. If negative, the left wheel is on the
outside.public void steer(int turnRate, int angle)
steer
in interface Pilot
turnRate
- If positive, the left wheel is on the inside of the turn. If negative, the left wheel is on the
outside.angle
- The angle through which the robot will rotate. If negative, robot traces the turning circle backwards.public void steer(int turnRate, int angle, boolean immediateReturn)
steer
in interface Pilot
turnRate
- If positive, the left wheel is on the inside of the turn. If negative, the left wheel is on the
outside.angle
- The angle through which the robot will rotate. If negative, robot traces the turning circle backwards.immediateReturn
- If true this method returns immediately.public boolean stalled()
public void regulateSpeed(boolean yes)
yes
- Set motor speed regulation on = true or off = false.public void turn(float radius)
turn
in interface Pilot
radius
- of the circular path. If positive, the left wheel is on the inside of the turn. If negative, the left
wheel is on the outside.public void turn(float radius, int angle)
turn
in interface Pilot
radius
- radius of the turning circleangle
- The sign of the angle determines the direction of robot motionpublic void turn(float radius, int angle, boolean immediateReturn)
turn
in interface Pilot
radius
- radius of the turning circleangle
- The sign of the angle determines the direction of robot motionimmediateReturn
- If true this method returns immediately.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |