As I've already said, the world is fundementally dynamic and changing and
unknown to the robot, so it does not make sense to overplan and think very hardly
about how do you act optimally given these assumptions about what the world looks
like. That may make sense if your designing controllers for an industrial
robot at a manufacturing plant where the robot is going to repeat the same. Motion
over and over and over again. You're going to do spot welding, and you're going to
produce the same motion 10,000 times in a single day. Then you'll overplan. Then
you'll make sure that you're optimal. But if a robot is out exploring an area where
it doesn't know exactly what's going on, you don't want to spend all your
computational money on Finding the best possible way to move. Because, it's not
actually going to be best. Because the world is not what you thought it was. So
the key idea to overcome this that's quite standard in robotics, is to simply develop
a library of useful controllers. So these are controllers that do different things.
Like going to landmarks, avoiding obstacles. We saw one that tried to make
robots drive through center of gravity of their neighbors. Basically, we can have a
library of these useful controllers, behaviors if you will, and then we switch
among these behaviors in response to what the environment throws at us. If all of a
sudden an obstacle appears, then we avoid it. Then if we see a power outlet and
we're low on battery then we go and recharge. So we're switching to different
controllers in response to what is going on. So what I would like to do is to start
designing some Behaviors just to see how what we learned in module one, a little
bit about control design can be used to build some behaviors. So let's assume we
have our differential-drive mobile robot. And to make matters a little easier up
front, we're going to assume that the velocity. The speed is, is constant. So v
not. We're not going to change how quickly the robot is moving. So what we can change
i s how we're steering. So you're basically sitting in a car on cruise
control, where the velocities are changing, and you steer it. That's your
job. And the question is, how should you actually. >> Steer the robot around. So,
this is the equation then, that's governing how the input Omega, it's the
state that we're interested in, in this case pi, which is the heading of the
robot. So, pi dot is equal to Omega. Okay, so, let's say that we have our. >> Yellow
triangle robot, it's a unicycle or differential-drive robot. It's headed in
direction five, so this is the direction it's in. And, for some reason, we have
figured out that we want to go in this direction, five desired or 5 sum D. Maybe
there is something interesting over here, that were interested in. So, we want to
drive in this direction. Well, how should we actually do this? Well, pi dot is equal
to Omega. So, our job clearly is that of figuring out what Omega is equal to, which
is the control input. Alright, so, how do we do that? Well, you know what? We have a
reference, pi desired. Well, in module one. we called references r. Right? We
have an error, meaning, that compares the reference pi desired to what the system is
doing. In this case, pi. So it's comparing the headings. So we have an error, we have
a reference. You know what? We have a dynamics. pi dot is equal to Omega. So we
have everything we had towards the end of module one. So we even know how to design
controllers for that. How should we do that? Well, we saw PID, right? That's the
only controller we've actually seen. So, why don't we try a PID regulator? That
seems like a perfectly useful way of building a controller. So, you know what,
Omega is Kp times e, where Kp was the proportional gain. So this response to
what the error is right now. You make Kp large it responds quicker but you may
induce oscillations, then you have the integral of the error. So you take the e
of tau, the tau times k sub i, which is the integral gain. And this thing, this
integral, has the nice property that it's integrating up all these tiny little
tracking errors that we may have, and after a while this integral becomes large
enough that it pushes the system Up to no tracking errors, that's a very good
feature of the, the interval. Even though as we saw we need to be aware of the fact
that a big KI can actually also induce oscillations and then we could have a d
terms. A KD times e dot and that where KD is the, the gain for derivative part. This
makes the system. Very responsive but can become a little bit oversensitive to
noise. So will this work? No it won't. And I will now tell you why. In this case
we're dealing with angles. And angles are. Rather peculiar beasts. Let's say that phi
desired a 0 radiance. And my actual heading now, phi is 100 radiance. Then the
error is minus 100 radiance. Which means that this is a really, really large error.
So Omega is going to be ginormous. But, that doesn't seem right. Because 100 pi
radius is the same as zero radius, right? So, the error should actually be zero, so
we should not be niave when we're dealing with angles. And, in fact this is
something we should be aware of. Is angles are rather peculiar beasts. And we need to
be, be dealing with them. And there are famous robotic crashes that have been
caused by this. When the robot starts spinning like crazy. Even though it
shouldn't. But it's doing it because it thinks it's 200 pi off instead of zero
radius off. So what do we do about it? Well the solution is to ensure that the
error is always between minus pi and pi. So minus 100 pi, well that's the same
thing as zero. So we need to ensure that whatever we're doing is we're staying
within minus pi and pi. And there is a really easy way of doing that. We can use
a function, arc tangents two. Any language there is a library with and it operates in
the same way. It's a way of producing angles between minus pi and pi. C plus,
plus has it, Java has it, MATLAB has it, whatever you, Python has it. So you c an
always do this and how do you do that? Well you take the angle that's now
1,000,000 pi right and You take sine of it comma cosine of it. So this is the same as
saying that we're really doing arc tan. So I'm going to write this as tan inverse
sine e over cosine e. But arc tan or tan inverse. Doesn't, it's not clear what that
always returns but arc tan 2, where you have a coma in it, you always get
something that's within minus Pi and Pi. So here's what you need to do, whenever
you're dealing with angles and you're acting on them, it's not a bad idea to
wrap one of these arc tan two lines around it to ensure That you are indeed having
values that aren't crazy. So, with a little caveate that we're going to use e
prime instead of e, the PID regulator will work like a charm. Okay, so here is an
example problem. We've already seen this picture. this is the problem of driving
the robot, which is the little blue ball, to. The goal, which is the sun,
apparently, and lets see if we can use this PID control design on Omega to design
controllers that take us to the sun, or to the goal. and since we're dealing with
obstacles and we're dealing with goal locations, and we're also talking about
behaviors. at the minmum we really need two behaviors. Goal to goal, and avoid
obstacles. So what we're going to do over the next couple of lectures, is develop
these behaviors, and then deploy them on a robot and see if there any good or not.