Attendances: Carsten, Dan
Duration: 11:30 - 14:00
Goal
The goal this week is to experiment with robot positioning. We do this
by using the fact that our motors keep track of how many rotations it have done.
Plan
We start by a making a simple program to get a feel for how it
works. We can determine precision using our simple program. Then we
implement avoidance to understand challenges present when working with
motor rotations.
Testing precision: Testing how accurate the motor measurements are
Avoiding objects: Avoiding objects while traveling.
Improved navigation: Comparing 2 methods of computing position and
direction of the robot.
Robot
Our robot this week is the same as from lab 8. We use the motors (both
to move and as sensors of how much the wheels have moved) and the
sonic sensor to avoid objects. The 2 light sensors are not in use (but
still attached).
PICTURE
Testing precision
We couldn't find a ruler so we used a Lego block to measure with. Each
of our units is about 0.5 cm. We indicate the starting position by
placing a Lego block (a measuring block) on the ground.
We didn't attach a pencil or marker to the robot to record it's
path. To detect inconsistencies the robot needs to travel large
distances which would require a lot of paper to measure, which we
didn't have access to.
initial test
Go forward 200 then backwards. It is precise enough that we can't
measure an error.
We had a minor problem measuring because the robot front wheel is
heading different direction when the robot is going forwards and
backwards. We have to make sure the front wheel is in the same
position when starting as it is when the robot have finished moving.
Going in a square
When the robot was going in the path of a square of lengths 50 (with
four 90 degree turns). We measured an inconsistency of 1 to 2 cm.
The robot travels the same distance as our initial test (200) but it
has a inconsistency of 1-2 cm. compared to none (from the initial
test). This suggests the inconsistency is an effect of the turns.
Code
These experiments were done with a old version of our avoidance robot
software available later. The methods goStraightAndBack and goSquare
were used.
Avoiding objects
Here we make a robot that travels forwards a fixed distance, and if a
object is in the way, the robot will go around it but still end up
having moved forwards a fixed distance.
We assume objects blocking the robot can be circumvented by doing:
turn right, forward, turn left, forward, turn left, forward, turn
right.
Solution
We avoid objects using the pattern explained above. The avoidance
pattern has 2 segments going side-ways and 1 going forwards. The
side-ways segments should not be counted towards the distance
travelled by the robot.
When we reach an object we:
Save distance travelled (tmp1).
Turn right, go forward, turn left.
Reset the motor counter.
go forward.
Save distance travelled (tmp2).
turn left, go forward, turn right.
go forward a distance equal to the total distance - (tmp1 + tmp2).
In practice tmp2 isn't saved as it's part of the avoidance pattern so
we know the distance.
We set the 3 forward distance used in the avoidance pattern to 40.
We detected objects using the ultrasonic distance sensor and to
simulate a object we used a black laptop case.
Observations
We tested the robot with 0, 1 and 2 avoidance patterns. We estimated
the final distance travelled to be the same. Our robot would swerve to
the left which made estimating the actual distance travelled hard.
To account for the swerve, we initially though about turning the robot
around and going back to start. But the swerve would just make the
robot go further off course. To negate the swerve on the way backwards
would mean having the robot go backwards, but then we would need
another distance sensor.
To verify the distance travelled was the same despite objects in the
way, the final distance should just be precise within a distance of 20
(half of the forward distance of our avoidance pattern), which we
could do by eye.
If we assume the inconsistency from turning is the same as our initial
tests, the travelled distance with 1 and 2 objects in the way would be
off by 2-4 and 4-8, respectively.
Code
Improved navigation
Here we discuss 2 methods to estimate position and direction of a
robot from the motor rotations and diameter of the wheel and distance
between the 2 wheel.
Dead Reckoning
Dead reckoning uses simple geometry to calculate how much a rotation
is to determine how far the robot travels pr. rotation. It calculates
the direction by assuming the wheels turn in opposite direction for
some amount of rotations, then uses sin and cos to determine how the
direction have changed. This method looks at both wheels.
Forward Kinematics
Forward Kinematics saves poses, which determine the robots x,y
coordinate and heading at a given time. To determine a new pose a
matrix transformation based on angular rotation around a point is
used.
Ingen kommentarer:
Send en kommentar