Line Following Lets review portions of Line Following

  • Slides: 19
Download presentation
Line Following • Let’s review portions of Line Following Exercise. • First we used

Line Following • Let’s review portions of Line Following Exercise. • First we used “bang-bang” control to follow a line’s edge (right side and left side). • Then we got both motors going by using hysteresis (transition overlap). • Let’s introduce proportional control by using the motor() function. motor (motor # , percent full power); We might achieve smoother transitions.

Follow Left Edge of Line Definitions White = 25 Black = 125 port_motor =

Follow Left Edge of Line Definitions White = 25 Black = 125 port_motor = 1 Buggy starboard_motor = 3

Control Strategy Plot

Control Strategy Plot

Pseudo-code sensor = analog(3); /*read the sensor*/ If (sensor < 75) { pmp =

Pseudo-code sensor = analog(3); /*read the sensor*/ If (sensor < 75) { pmp = 100; /*set port motor power*/ smp = 0; } /*set starboard motor power*/ else { pmp = 0; /*set port motor power*/ smp = 100; } /*set starboard motor power*/ motor (port_motor , pmp); motor (starboard_motor, smp);

Follow Right Edge of Line Definitions White = 25 Black = 125 port_motor =

Follow Right Edge of Line Definitions White = 25 Black = 125 port_motor = 1 Buggy starboard_motor = 3

Control Strategy Plot

Control Strategy Plot

Pseudo-code sensor = analog(3); /*read the sensor*/ If (sensor < 75) { pmp =

Pseudo-code sensor = analog(3); /*read the sensor*/ If (sensor < 75) { pmp = 0; /*set port motor power*/ smp = 100; } /*set starboard motor power*/ else { pmp = 100; smp = 0; } /*set port motor power*/ /*set starboard motor power*/ motor (port_motor , pmp); motor (starboard_motor, smp);

Follow Left Edge of Line (Get both motors going with hysteresis) Definitions White =

Follow Left Edge of Line (Get both motors going with hysteresis) Definitions White = 25 Black = 125 port_motor = 1 Buggy starboard_motor = 3

Control Strategy Plot

Control Strategy Plot

Pseudo-code sensor = analog(3); /*read the sensor*/ If (sensor < 50) { pmp =

Pseudo-code sensor = analog(3); /*read the sensor*/ If (sensor < 50) { pmp = 100; /*set port motor power*/ smp = 0; } /*set starboard motor power*/ else if (sensor > 100) { else pmp = 0; /*set port motor power*/ smp = 100; } /*set starboard motor power*/ { pmp = 100; smp = 100; } motor (port_motor , pmp); motor (starboard_motor, smp);

Follow Left Edge of Line (Use proportional control for smooth transitions) Definitions White =

Follow Left Edge of Line (Use proportional control for smooth transitions) Definitions White = 25 Black = 125 port_motor = 1 Buggy starboard_motor = 3

Control Strategy Plot

Control Strategy Plot

Pseudo-code sensor = analog(3); /*read the sensor*/ pmp = 100 -1 * (sensor –

Pseudo-code sensor = analog(3); /*read the sensor*/ pmp = 100 -1 * (sensor – 25); smp = 1 * (sensor – 25); motor (port_motor , pmp); motor (starboard_motor, smp);

Follow Left Edge of Line (Get both motors going with hysteresis) (Use proportional control

Follow Left Edge of Line (Get both motors going with hysteresis) (Use proportional control for smooth transitions) Definitions White = 25 Black = 125 port_motor = 1 Buggy starboard_motor = 3

Control Strategy Plot

Control Strategy Plot

Pseudo-code sensor = analog(3); /*read the sensor*/ If (sensor < 75) { pmp =

Pseudo-code sensor = analog(3); /*read the sensor*/ If (sensor < 75) { pmp = 100; /*set port motor power*/ smp = 2 * (sensor – 25); } else { pmp = 100 -2 * (sensor -75); smp = 100; } /*set starboard motor power*/ motor (port_motor , pmp); motor (starboard_motor, smp);

Proportional Control (Careful algebra can avoid floats. Save the divide for last. ) Definitions

Proportional Control (Careful algebra can avoid floats. Save the divide for last. ) Definitions White = 25 Black = 100 port_motor = 1 Buggy starboard_motor = 3

Use Careful Algebra (y = mx+b) to Avoid Floats Inside parentheses executes first –

Use Careful Algebra (y = mx+b) to Avoid Floats Inside parentheses executes first – save the divide for last

Pseudo-code sensor = analog(3); /*read the sensor*/ pmp = (100 * (sensor – white))

Pseudo-code sensor = analog(3); /*read the sensor*/ pmp = (100 * (sensor – white)) / (black – white); smp = 100 - pmp; motor (port_motor , pmp); motor (starboard_motor, smp);