The following content is provided under a Creative
Commons license.
Your support will help MIT OpenCourseWare
continue to offer high-quality educational resources for free.
To make a donation or to view additional materials
from hundreds of MIT courses, visit MIT OpenCourseWare
at ocw.mit.edu.
PRESENTER 1: The basic concepts of reachability--
I'm talking about how we can represent reach
sets in continuous spaces.
[INAUDIBLE] is going to take it over and talk
about some applications in robust motion planning.
And then Gerard is going to talk about how we compute reach sets
and focus on these two, on flow tubes and funnels.
So reachability is a task of figuring out
what stage a dynamical system can possibly reach
or be at at a certain time.
So for example, if we have these two systems,
we have a finite state machine on this reach system
and a continuous system.
And these are the starting points.
And these are our axes.
We can move east or north here.
And we can move east or north with these velocities.
[INAUDIBLE]
So after one second or one time step,
we can be in either of these two states.
Or we can be anywhere in this area--
and after two seconds, after three seconds, and so on.
OK?
So this is what reachability does.
And the motivation for this--
one of the applications for reachability
is for verification.
Verification is just the task of making sure that we are never
going to reach any bad states.
So for instance, let's say we have a microwave.
A bad state is the microwave being open and on.
We want to make sure that these bad states are never reachable.
So what we do is we compute the reachable sets,
and we check for intersection with the bad states
to see if the microwave is on and open.
Or like over here, let's say we have these obstacles.
Let's say we have a wall or somewhere else over here.
We want to-- this is bad, right?
Because we can reach this state, and it's the same as a wall.
Any questions so far?
Feel free to interrupt me any time.
Another motivation for reachability
is for robust motion planning, which
[INAUDIBLE] talk more about.
And I have a video of this.
So what we can do with reachability
is stuff like this.
So this is done using flow tubes, which
is reach sets, reachability.
Gerard is going to talk more this example.
So now before we talk more about these cool examples, let's
just formalize concepts.
Let's define some things.
So let's go back to the same system that we
had earlier, this state machine, with a finite set of states, X;
a finite set of inputs, U, which in this case
are east and north; and a transition function.
And let's say this is just [INAUDIBLE]
to keep things simple.
And we have a set of initial states, X0,
which I didn't label as red.
So the reach set is defined as the set of states
that we can possibly be in at time t.
So more formally, there exists a sequence of t control inputs
that will take us from this initial state
to the corresponding reach set.
So let's say, for example, you have bad state,
it's in the reach set at time 3 because there exists
a sequence of three inputs.
In this case this is one such sequence.
There is two more that will take us from the initial state
to that.
OK?
And then the reachable set, the reach set reachable set
is defined as the union of all reach sets for time less than
or equal to t.
So the reachable set of time 0 is just
the initial set of states.
And time 1, we have the unit and so on.
So the reachable set is what we use
to test for intersection with bad states
because that's all the states that we can possibly reach
from time 0 to time something.
OK?
Now as some of you may have figured out by now,
there's a simple way for finding segmenting
so we can compute reach sets.
So for example, let's say we wanted the reach set of time 2.
One way-- the easiest way we can do
this is to break this up into time steps,
into single time steps.
So instead of computing it straight for time 2,
let's first compute it for time 1.
And now we can use these two states
as the set of initial states and compute the reach set for one
more time step.
And that gave us this reachable-- the reach set.
OK?
Any questions?
OK, and the reason why these works is because reach sets are
semi-groups.
And semi-groups satisfy this equality.
So we can not just break it up into single time sets.
We can break into any two times, s and t.
OK, so all of this was for finite state machines.
But for continuous systems, things
get a little more complicated.
It's a lot of the same concepts, but we
need to handle a very important issue,
and that is how to represent reach sets,
or just set, regions in space for continuous systems.
Because in a finite state machine,
we can just enumerate the list of states in the reach set
or reachable set.
In a continuous system, we need some other way.
We can't just say it's every point for which there exists
a sequence of control inputs, because there
can be infinitely many points.
So what we do, we have two types of representations
that we like.
One is convex polytopes.
And that's just a generalization of a convex polygon into n
space, into n dimensions.
And we have two basic ways that we can represent
these complex polygons.
One is with these hull vertices, like this, AB to F. [INAUDIBLE]
And then the convex polytope is defined as the convex hull.
And in case someone doesn't remember what a convex hull is,
let's say we have just a list of points.
The convex hull, imagine have a rubber band
and you are going to stretch it out, and you let it go.
And what that's going to do is this.
And the convex hull is just the whole area inside this--
the rubber band.
OK?
And then another way we can represent
convex polytope is with a set of inequalities,
so for example, here we have four lines.
Here's the equation for each line.
So let's say this red line, we want anything
below the red line.
This blue line, we want anything to the right, so anything
greater than, and so on.
So this area is the intersection of all these inequalities.
OK?
And each of these representations
has an advantage over the other.
Vertices are good to test for emptiness because when
our set of vertices is empty, then our convex polytope
is going to be empty.
And this inequalities is very useful for testing membership,
because for any points, we can just
plug it in to every inequality.
And if it's true for every inequality,
then it is in the whole group.
And convexity, I'll just explain it briefly.
Convexity means that any two points inside our region--
our region is not non-convex is for the line connecting
these two points.
All the points in that line are going to be in the region.
So here you can see that this is convex.
And here, this red area is outside the region,
so this other region is non-convex.
And convexity is going to be important for the algorithms
later on.
Gerard will talk more about them.
OK?
Other than convex polytopes, we can also
use ellipsoids to represent reach sets.
So ellipsoids are just the extension of ellipses
to n spaces, n dimensions.
And a convex polytope is defined by this.
x is just all the points inside the polytopes,
inside the ellipse.
v is the center.
And A just tells us about this, how deform the ellipsis.
Any questions?
OK.
And one of the reasons why we like
convex polytopes, why we like ellipsis, ellipsoids,
is because of their enclosure under linear operators.
So let's say we have P that is convex
polytope or an ellipsoid.
Then, if we have a matrix A, then A times
P will be defined that way.
It is still going to be a convex polytope or an ellipsoid.
So if we have something like this,
then this can maybe getting formed,
but it's still going to be convex, a convex polytope.
And the reason why this is nice is that,
if we have a linear system defined this way or this way,
and then if we start with a--
basically, if we started with a convex set of states, then
our reach sets are always going to be convex because we're just
multiplying by A. And this is very nice
to represent-- this tells us that our representation
is going to be good because we can just use convex polytopes,
ellipsoids, and stick with those.
And then just a technical--
OK, so even though the reach sets are going to be convex,
the reachable set might not be convex.
But it will always be a union of convex polytopes or ellipsoids.
For example, let's say, in the previous example,
we started here.
Then we need, after one time set, we were here.
So these are the two things.
And then our reachable set is the union of both of them.
This is clearly not convex.
But it is a union of convex polytopes.
So we can represent everything within it.
OK?
Any questions before I move on to [INAUDIBLE]??
OK, thank you.
PRESENTER 2: OK, so now that have understood
what reachability is and how [INAUDIBLE] represents,
and before we dwell into more theoretical aspects
of [INAUDIBLE].
Here are some cool applications of reachability.
So there are many applications of reachability to robots
are like complex systems [INAUDIBLE] systems.
One of the applications that has been talked about before
is the robust motion planning.
The early idea is to more of a glider or an airplane
through lots of obstacles, even in the presence of [INAUDIBLE]
these and [INAUDIBLE].
They're already crashing into obstacles,
even when they are [INAUDIBLE].
[INAUDIBLE] applications of reachability
to control complex systems like by parallel working robots.
Here you can see that we are controlling [INAUDIBLE] simple
soccer ball with something.
And more importantly, reachability
is used for very fine safety properties, for safety reasons,
like aircraft collision avoidance.
So in those [INAUDIBLE] we're going [INAUDIBLE],,
robust motion planning.
If you're interested in other things, there are papers
and there are [INAUDIBLE].
So the goal of motion planning is
to find a set of control inputs that take you from the start
state to the goal state.
So in this example-- without colliding
with any of the obstacles.
So here, this is one possible path from the start
state to the goal state.
So it just looks nice.
[INAUDIBLE] collective things of the obstacles.
But if you get the controls to this cart
and then give it a real robot, you
might find it going-- doing something like this.
So this is because of the path that you-- algorithm
that you use for planning this path is-- that's not taking
into account any of the uncertain areas
in the environment or [INAUDIBLE]..
So there are different kinds of uncertainties.
One of them is environmental disturbances,
like there is wind here.
So that can move you over off your planned path.
And there can be modeling errors.
The model that you use to represent your complex system
might just be an approximate.
So the real world is different.
And there are state uncertainty.
So the things that you used for measuring your position
or velocity are also approximate, so there
are uncertainties.
[INAUDIBLE] there can be some randomness
in the initial conditions.
You are thinking of starting the robot at 0,0,
but in practice, you might actually
be starting at [INAUDIBLE] 0, [INAUDIBLE]..
So there is randomness in initial conditions.
The goal of robust motion planning
is to have some guarantees with some confidence
that the system will reach the goal set without getting on
with the obstacles even in presence
of these uncertainties.
So this is the problem.
So let's look at some of the solutions that
come up for solving robust motion [INAUDIBLE]..
So this is a timeline.
So there are three different systems.
And all of them have a goal concept
where they use some representation to represent
the reach sets, the set of possible state
that the system be.
And then instead of searching for a single trajectory
to a state, they search for these representations
so that each final self-serviced representations that
can go from the start state to the goal state,
you won't hit any of the obstacles.
So earlier Bradley and Zhao and Frazzoli
came up with this concept called the flow tubes.
It's [INAUDIBLE] presenting makes sense.
And we will know all about the [INAUDIBLE] of the [INAUDIBLE]..
So one approach that we use is that we
have a set of initial states and we have a set of goal states.
So flow tube is a combination of all the possible paths that
will get you from any point in the initial state
and point in goal state.
So this is kind of representing all possible [INAUDIBLE]..
So and then you search for these flow tubes
to be a path to get your [INAUDIBLE]..
And [INAUDIBLE] constraints so that you can also
reason about complex systems and revise
spatial and temporal coordinations like the walking
robot that you have seen before.
An [INAUDIBLE] about for using funnels for motion planning.
So funnels is also a similar concept to produce.
It's kind of like a [INAUDIBLE] region around your path.
So that if you are inside a funnel,
you're guaranteed to be inside the funnel.
So in this picture, we're going to [INAUDIBLE]
motion planning using funnels.
Again, there are references for the other people's [INAUDIBLE]..
So instead, you'll be using funnels [INAUDIBLE]
for every path, you compute some region
around the path that is a stable region.
And that's called a funnel.
[INAUDIBLE] your funnels [INAUDIBLE],,
but for this part of the lecture,
we are assuming we don't have a hundred of funnels,
and that you'll see how to use these funnels to do motion
planning.
So the previous example is here.
The [INAUDIBLE] funnel [INAUDIBLE] flied by.
You see that it collides with the trees and [INAUDIBLE]..
Then [INAUDIBLE] like these funnels
are [INAUDIBLE] uncertainty in the world that you have.
If [INAUDIBLE] everything with uncertainties, [INAUDIBLE]
and then you compare funnels for that.
Any questions so far?
AUDIENCE: Can you please say again definition of funnel?
PRESENTER 2: So it's kind of something that [INAUDIBLE]
around [INAUDIBLE] around--
like you have a [INAUDIBLE] around there.
So I think Gerard with explain more about it.
So the [INAUDIBLE] with funnels is
that you are inside the funnel at the point.
When you [INAUDIBLE].
It's like [INAUDIBLE].
AUDIENCE: Yeah, you have an [INAUDIBLE]..
So a funnel is basically--
it's kind of like a reach set around a certain point too.
So the way that you do it is you have some [INAUDIBLE]
trajectory.
And then at each node point in that trajectory,
you compute some kind of reachable
set at that node point.
And so you blow it up, and it becomes some kind of ellipsoid.
And as long as you're within that ellipsoid,
no matter what disturbance you get,
you're going to go back towards the nominal path.
And then so, when you join all of those ellipsoids
over the trajectory, then you get a certain kind of funnel.
And as long as you're inside that funnel,
you're going to stay on that funnel.
And you're going to be on the path you
want to be at with some disturbance in this
[INAUDIBLE].
So that the great thing that there would
be an example of a funnel.
As long as you're in the funnel, you're
going to stay in the funnel, basically.
AUDIENCE: So is this considered the control, or is
it only the dynamics?
PRESENTER 1: It's the dynamics with the control.
So it's the flow tube system.
PRESENTER 2: Yeah, so, you'll learn
more of those [INAUDIBLE].
AUDIENCE: Let me just quickly add.
So a funnel is type of flow tube, right?
I mean, just different people either use
the same terminology, use different terminology.
Each of the applications of flow tubes
has some invariant, which is different.
And the particular invariant on this one
is that if you are you in the funnel
and you apply the LQR component, [INAUDIBLE] then
you're guaranteed to stay within that tube.
AUDIENCE: But I thought the flow tube is actually
like getting smaller and smaller in the funnel [INAUDIBLE]..
AUDIENCE: Not necessarily.
In general, a flow tube is simply
a bundle of trajectories, which capture some common features.
And then maybe that they move to a limit of cycle,
and maybe they stabilize to a point, and maybe that the move
to a goal, maybe that they always maintain.
They're stable within a tube.
In a funnel they focus particularly on stability
to disturbance and then staying within the tube.
PRESENTER 2: OK, so the [INAUDIBLE] example
is kind of useful to combine the reachability motion planning.
So here is another situation where
getting to the goal from the start [INAUDIBLE]
and there are a couple of sort of trees lined up.
But there is a path that goes in between the [INAUDIBLE]..
This path looks kind of risky because it's
pretty close to the two trees.
But there is another path we can take
which travel around the trees.
And so if you don't need the [INAUDIBLE] safe.
But maybe that's [INAUDIBLE] too.
So that's why we do the combined reachability
with motion planning.
So if you combine that, you might
find that the first path, if you compute a flow
tube for the first path, [INAUDIBLE] it
does not hit any of the trees.
And it's indeed safe.
But it might happen that the second path
is more susceptible to the disturbances in [INAUDIBLE]..
So that's why [INAUDIBLE] and also [INAUDIBLE]
combined motion planning.
Because what's intuitive is not actual.
So far it's all about [INAUDIBLE] planning.
So the [INAUDIBLE] everything about the environment,
like where the obstacles are.
So that's not always true.
[INAUDIBLE]
So you don't always know all the obstacles beforehand.
You can't [INAUDIBLE] as you [INAUDIBLE]..
So one problem with doing online planning,
there is that you can not do any expensive computations
during runtime.
And all of these funnels can be places that are very expensive.
[INAUDIBLE] solving an optimization problem.
It takes a couple of hours to finish them.
So you can not compute funnels on the fly.
So the idea here is that you compute the funnels offline
and do all possible funnels from the start state
to the end state, and then use this library to [INAUDIBLE]..
So you have the same [INAUDIBLE] going from the start state
[INAUDIBLE] the goal state in the archives.
So these are the set of possible paths from start state
to goal state.
And then from each possible trajectory,
you compute the funnel.
And the idea of online planning is
to now find the sequence of these funnels
that you can compose that takes you from the start state
to end state without hitting any of the obstacles.
So an important component here is
finding a sequential composition of funnels [INAUDIBLE]..
AUDIENCE: So why plan--
you're doing a forward search with funnels.
Why use funnels instead of something like RIT?
PRESENTER 2: I actually don't know what RITs are.
AUDIENCE: Can I guess at the answer?
AUDIENCE: [INAUDIBLE] thing.
AUDIENCE: Why use funnels instead of RITs.
AUDIENCE: Well, or why use funnels as opposed
to anything else.
AUDIENCE: Well, I guess RITs, you
have like the classical example, where
you want to go through a very--
well, if you want to go through a very narrow region.
Well, first of all, I guess RITs are
going to have a hard time finding
the narrow region because you'd need like a point
to go through that.
And then, RITs by themselves don't really
account for errors, maybe some extension.
But funnels, you can be sure that you're always going
to stay inside the funnel.
So this if for [INAUDIBLE].
This is to make sure that we don't crash into anything.
Does that answer your question?
AUDIENCE: Do you want to answer it?
AUDIENCE: Yeah, I think what he just said, it's--
the point of the funnels is that they provide a control policy.
The actual reference trajectory that you have on the left
is the motion planning.
But with the funnels, you get a control policy.
Because when you start executing a motion plan
there's always going to be a disturbance.
So you want a control policy that
keeps you on that trajectory.
And there's all sorts of control policies.
You could use simple EID controllers.
They work in some cases.
But funnels provide better guarantees
for the power plants.
PRESENTER 2: Yeah, so the idea is
that you have trajectory [INAUDIBLE] funnels
[INAUDIBLE].
You're using this funnels compliance.
You compose them to find your path to those presets
that you wanted to go in.
So you can not always compose funnels.
Some [INAUDIBLE] positions that are legal, and some of those
are not legal.
So [INAUDIBLE] example, a time going from left to right.
So you have a situation where there is a funnel.
You're trying to compose a bigger funnel with a smaller
funnel.
And you have another situation where
you're going to compose a smaller funnel with a bigger
funnel.
So what if I would have said, [INAUDIBLE]..
So which of these combinations do you
think is a legal composition?
[INAUDIBLE]
Legal or illegal, I mean that which of these [INAUDIBLE]
do not receive the [INAUDIBLE]?
AUDIENCE: The bottom [INAUDIBLE]..
PRESENTER 2: The bottom one is--
AUDIENCE: --is actually marked because--
with the top one, if you're at the very top [INAUDIBLE]..
PRESENTER 2: Yeah, that's true.
So the first one is like illegal.
And the second one is a legal composition.
So why is that?
So if you are inside this funnel,
what this guarantees that you will stay inside the funnel.
But it could happen that you can go through the funnel
and make your outside [INAUDIBLE] funnel.
And after this step, you can go anywhere.
So you can [INAUDIBLE].
But if you're inside the second case,
after you're through the first part,
you're still set at the second part
then we can decide [INAUDIBLE].
So now let's actually look at those online planning
algorithms.
So this the case of your planning [INAUDIBLE]..
First you can [INAUDIBLE] with quantum's chronicles.
It makes our analysis easier.
So this is the algorithm that's going through each of the steps
one-by-one.
So this is online planning.
You will always one information beforehand.
[INAUDIBLE]
And you get to know more about it as we go.
But you still have the initial planned funnel sequence
that takes you from the start state to goal state.
And then you check for any new obstacles information
when you go out from the sensor.
So this is the region that you can sense some obstacles.
And you also get the current state of your robot.
This is also something concern [INAUDIBLE]..
And you check if your current funnel path
collides with any of the obstacles you have seen so far.
And in this case, the answer is no.
So then you apply the control corresponding
to this funnel for this [INAUDIBLE] location and time.
That take your one [INAUDIBLE] problem.
Then you put Goto and then do this again and again.
So [INAUDIBLE] update from certain information.
And one obstacle is here.
You can differentiate the other one.
When we check at the Replan collides
with any of the obstacles-- in this case, yes.
So since it collides with the obstacles,
you need to [INAUDIBLE] funnels.
So how do you delete funnels?
You have all this library funnels.
So you go to each of them, and then you
find one set of funnels that has--
you find a set of funnels that starts
with your current location and [INAUDIBLE] of the obstacles.
So this was a point, first of all, of a new funnel sequence.
And then, again, you apply controls
corresponding to the new sequence
and doing it two dimensional [INAUDIBLE],, In the position,
if it collides, and again collides,
so you redirect [INAUDIBLE] apply
the control for that funnel.
And get a full solution.
And then it collides, so you have to replan that part.
Then you're OK.
So now you reached the goal.
So those are the planning plan using funnel libraries.
And questions about it?
AUDIENCE: Can you say more about the connotation
of the funnel libraries?
So they generate a set of funnels, which
covered the complete set space?
PRESENTER 2: Yeah, so that's like--
there's every possible [INAUDIBLE] end point.
And so then you can make [INAUDIBLE]
or least, have it for every initial [INAUDIBLE]
you can compose all these [INAUDIBLE]..
So if you're doing it for every initial [INAUDIBLE]..
So you might have a funnel that exactly starts
at your initial position.
If there is a funnel that already started somewhere,
where it goes through the funnel-- goes
through your initial funnel, you can use that.
So it's a truncation of your funnel.
[INAUDIBLE]
Any other questions?
AUDIENCE: Why can't you use--
if it really is an online problem
that you're not going to run out of a funnel,
that you won't reach a dead end, will it be adaptable enough
to make a U-turn at all times, either
that there's come latency that would perfectly time it.
And the robustness, that you'll always be able to find a path,
even if we have guarantees that you'll always
stay within a funnel.
PRESENTER 2: So are you asking what the situation,
like the funnel, if you're going [INAUDIBLE] backtrack?
AUDIENCE: Yeah, just because these obstacles come out
of nowhere, seemingly, that you don't have a guaranteed
that the funnel is safe through the entire duration
of our execution.
PRESENTER 2: Yeah, so that's a valid point.
[INAUDIBLE] you can use the adaptive [INAUDIBLE] backtrack
[INAUDIBLE] combined with the [INAUDIBLE]..
AUDIENCE: Even if the robots can't actually backtrack?
PRESENTER 2: If the robots can what?
Come back, or--
AUDIENCE: I mean, I guess, it's just like a UAB,
it couldn't do that.
I'm just saying, what guarantees do you need to have about
the obstacles , since it's an online setup, right?
PRESENTER 2: Maybe you'd have some initial information
about some kind of obstacles.
You can find a [INAUDIBLE] trajectory--
you can find a trajectory that goes from the start sequence.
It's like [INAUDIBLE].
AUDIENCE: Well, I'm just going to say.
If you're in some kind of glider that can't necessarily--
like a quart of stop, go backwards,
stuff like that, depending on how funnels
you can plan backwards.
But if you're in some kind of glider going straight
at a wall, there's no guarantee.
You're just screwed up.
I mean, even humans, they make errors.
There's situations that humans can't dynamically get out of.
So if your system is dynamically not
going to be able to make a sharp enough turn
or go straight into something, no matter
how smart your planning algorithm is,
no matter if you're like, there's a wall right there.
Stop.
If you can't stop, and you just go straight at it.
There's obviously situations where
you can pretty much [INAUDIBLE] algorithm [INAUDIBLE]..
You're just going to crash.
Hopefully you're in a situation where you're not [INAUDIBLE]..
It's also based on how far away your sets are received.
Your sensor can only see 5 meters ahead,
and you're going 5 meters per second, [INAUDIBLE]..
You're going to have make perfect decisions.
But if your sensor has perfect information
about the environment, then what seems like the initial best
path may not actually be once you know the full [INAUDIBLE]..
So it depends on the [INAUDIBLE] sensors.
PRESENTER 2: Any other questions?
OK, so finally I have some demos showing simulations
of [INAUDIBLE].
Let's see how [INAUDIBLE].
So the [INAUDIBLE] applications.
So we have seen how to use funnels
to do robust motion planning.
We also have the offline planning
and come to do online planning using a sequence funnels
and the funnel libraries.
I will talk more about computing these funnels and flow tubes
and other kind of reach sets.
PRESENTER 3: Yeah, so I'm going to talk
about how to actually compute flow tubes
and funnels generally.
I'm going to give an example of what each one is used for.
So we had the question before, how are flow tubes and funnels
different?
Flow tubes are-- so easiest way is
they're both some kind of way to guarantee that you're going
to-- the robustness guarantees.
So say you are here.
You want to be here.
They're both going to-- in most planning algorithms,
you've got some kind of path from here to here.
But say there's some disturbance [INAUDIBLE]
down here or something.
You don't know if you're going to be
able to reach there or not.
What a flow tube is is it's some kind
of set of trajectories that will basically
go from some initial state, which are here,
to some goal states over here.
And basically, [INAUDIBLE] if you're within this flow tube,
and you get pushed out on a different trajectory,
you know how to get from here to here anyway.
So you don't really care if you're pushed,
as long as you're still within here.
A funnel-- let's see.
So a funnel is, say you compute some nominal trajectory
around here.
Using the system theory and stability theory,
you know that, with your control inputs,
you're going to stay at each of these points.
And you're going to stay within here within these circles.
So if you get pushed out here, you
know you're going to be able to get back onto your path
when you're going to try to converge back
to your nominal path.
So you have some sort of funnel.
Yes?
AUDIENCE: I have a question.
How complete is the funnel?
It sort of related to what Brian was saying.
PRESENTER 3: Completeness as in like these edges are--
AUDIENCE: Well, if you have a high dimensional state space,
does the funnel cover it completely?
AUDIENCE: There's a set of funnels.
PRESENTER 3: A set of funnels--
AUDIENCE: So the question wasn't about if the individual funnel,
but in the particular [INAUDIBLE]..
When he generates a set of funnels,
does the set of funnels completely cover the space?
PRESENTER 3: It depends how much time you
want to put into it, generally.
If you only compute two funnels, one of them goes over here
and one of them goes here, then you're not you're
not going to be covered in these states.
So it depends on how much computation you
want to do offline previously.
So you get a set of funnels that's here,
another one that's right here, another one that's here.
And you have your big library of funnels
that cover the whole space.
AUDIENCE: I think I skimmed that paper.
And, yeah, I think it is probabilistically [INAUDIBLE]..
PRESENTER 3: OK, yeah.
All right, yeah, but I mean, as far as computing
where you're going to go, if you compute that path of it,
you should be good.
But yes, you're right.
The probabilistically--
So here is what I explained.
Normally you have your optimal trajectory.
But if you get pushed off of it, you
may not get back to the goal state.
But if you have a set of trajectories
that go from some initial states to your goal state,
and you stay within that, you know
how to get to your goal state, even if you get pushed.
Again, so some ways to approximate flow tubes,
you can use some kind of polytope,
which is as Gabriel explained previously,
as long as it's a convex polytope,
you can take that cross-sectional area
and you can propagate it down here for the tube.
You can also use ellipsoids or rectangles as cross-sections.
And important point is to know that they're
intercross-sectional approximations.
So as you see here, you may--
this would be your actually flow tube.
But your approximation has to be an inter one,
because that guarantees that you're with a flow tube.
But it means you may also miss some of the outer trajectories
, which also, if you want to compute a more thorough
approximation area you get better flow tube
representation.
OK, so robust planning, you plan a trajectory from here to here,
and that should be good.
But then you get disturbed.
You're still within the trajectory,
so you're still good.
But some work done by Professor Williams and Hoffman
shows that--
so what do you do when you're actually outside of the flow?
Now what you can do is temporal planning.
So we're using the algorithm that we previously
learned in class.
You can take your goal state and move the timeline back
to a different time.
So here, this flow tube is, if you're here
in a certain amount of time, can you get to here?
And if you get outside of it, then you can't do that anymore.
But you can just use our algorithm
and move back the goal time.
And then when you move the goal time,
the whole funnel shifts because now you're
going to be over here.
And you don't care about getting here at this time.
You can here at this time now.
So then you move over.
And now where you, you get back into it
because you're now inside the flow tube again.
OK, so one example is a humanoid footstep planning.
So this take a complex systems.
You have a bunch of different parts of the system.
You have your center of mass dynamics.
You have your leg dynamics, foot dynamics.
So what you're trying to do is plan your footsteps forward
and through time.
So you have your original plan of where
you want your footsteps to be for different parts.
So there's discrete things that happen in the system,
as we've previously seen in a lecture.
So one thing that can happen is your left foot hits the ground,
and then your right foot lifts off.
You're left foot lifts off-- or your right foot
hits the ground, and then your left foot lifts off.
So those are different things that can happen.
So you have certain temporal constraints
on the system that you want to [INAUDIBLE] by.
And so as you start planning, you
have flow tubes to get you from one step to another step.
And that guarantees that you're going to stay within those.
Even if you get disturbed and get pushed,
your feet can still get from one step to the other.
But then also, with the thing that we
saw in the previous slide, you can move the timeline
back and forth, as long as you're
withing your temporal constraints that you had.
So those are flow tubes for the feet.
And that would guarantee that your feet
go where they want to.
But you can decompose the system to also
have flow tubes for the center of mass.
So what the center of mass does is
to be broken down into separate flow tubes.
So does that make sense?
So this is the humanoid footstep planning
that we saw previously.
And now you're going to understand
how the feet are planned to go to each of the blocks.
[INAUDIBLE] go video.
AUDIENCE: I have a quick question.
You said that you have a separate flow
tube for the center of mass.
But aren't they really just the same flow tube,
like a high dimensional--
PRESENTER 3: Yes, but that's-- when you decompose this
and then you [INAUDIBLE] flow tube rather than a full system
high dimensionality.
AUDIENCE: Is it hard to recouple them?
How do you know that they're consistent [INAUDIBLE]??
PRESENTER 3: Well, it still adheres
to the dynamics of the system.
So you can couple how you want, how you want it to move.
And you want to move any basic constraints.
But eventually, as you said, when you move your feet,
your center of mass is going to move.
When you step forward, you're center of mass
is going to move.
[INAUDIBLE] analysis of it.
AUDIENCE: Can I make a comment about that?
Yeah, there's a technique called feedback linearization that
can be used to decompose a complex non-linear dynamics
assuming to the set of linear ones.
And that allows you to treat the center of mass
as a [INAUDIBLE] separately from a control in the flow tube
computations and while guaranteeing that [INAUDIBLE]..
PRESENTER 3: So this is work done
by Professor Williams experiment, which is actually
[INAUDIBLE].
This is the robot doing the same kind of thing on Mars.
This is walking on stones and planning its footsteps
through a pretty complicated environment.
The stones are not exactly in the path
where you would normally want to walk.
But moving them around, as long as you're within the flow tube,
you'll get to wherever [INAUDIBLE] Awesome.
So that was how to compute flow tubes and-- oh,
and another way you can also compute flow tubes
is by learning.
So you can have some kind of example,
move through trajectories from one state to the other.
And you can estimate a flow tube based
on where the trajectories are, as long as the flow
tube encompasses all the possible trajectories.
AUDIENCE: Is the dynamics always linear?
Because I though if your polytope,
and it would be like kind of, is it a complex proposal when
you would use a non-linear dynamic,
then you move a little bit.
Then you would move a little bit, not being the convex shape
then.
PRESENTER 3: I mean, you can plan non-linear systems too.
But as far as I'm concerned, [INAUDIBLE]..
AUDIENCE: So, yeah, the polytopes
generally require linearization with the system.
And there's a limit to the validity of the-- the range
of the linearization.
And that's concluded in--
that's one of the things that limits
the size of the polytopes.
AUDIENCE: But it is the case--
I mean, you've just got to understand.
The thing that you do for non-linear systems,
which is a piece-- if you're making a piece-wise linear,
but you are--
you are linearizing them at the w step.
And there's other techniques that people
have developed with flow tubes where you do require the input
system to be linear.
Right here it can be non-linear.
But... it's an approximation.
PRESENTER 3: OK, so funnels, the goal
is basically to find a region that guarantees you safety
on a bounded uncertainty.
So there are regions of finite time variance
throughout all time during that trajectory that you've defined.
And so in practice, there's a trade-off between computation
time and guarantees.
So if your trajectory, if you compute more nodes,
then you're going to be able to fill in these little gaps
between each of the ellipsoid.
Whereas, if you lessen them, it's
going to take less time to compute each ellipsoid.
But it's also going to not be as guaranteed.
And especially important when planning
is that, if you're planning in some kind of point cloud,
then some of the points may be right here, where one ellipsoid
doesn't intersect the other.
And you might think that's a safe path, when actually it's
not at all.
Yeah, so an example is this little glider,
which is given in the paper by Anirudha and Russ.
And so what you start doing is you create your system,
your function.
And this is dependent on your state, time,
and w, which is some kind of bounded uncertainty.
And you choose the bounded uncertainty,
which means that you choose some kind of reasonable estimate
of how much can happen to your system
that you didn't account for.
So you start it.
Your velocity can be different from what you want.
Say your nominal velocity is 10 meters per second.
You can have some kind of drag, or you
can have some inconsistency in your motors.
And so what you expect is that there's
a plus or minus 0.5 meters per second to your nominal.
So when you start running your equations,
this is what you expect your robot to do.
And then that can vary forward and backwards depending
on what your actual was.
But then you add some kind of wind on your system, which--
some kind of cross-sectional wind, [INAUDIBLE]
direction, which we see there.
And so what that ends up doing is pushing you
system away from where you want it to actually be.
So now you have some kind of velocity uncertainty.
And you also have wind that can push you one way or the other.
So how do you deal with that?
Well, you start with your nominal trajectory
that has a plane flying perfectly straight.
There's no uncertainty.
Everything is deterministic.
And it acts like you want it to.
And then, so right there the wind hits it.
So what do you do?
You have to have some kind of control,
some kind of controller to bring you back
to your nominal trajectory and try to control you
around the system.
So a standard way to do that is to have a cause function
and create your optimal trajectory.
And this cause function basically,
it kind of mirrors a LQR controller.
And by solving a lot of these equations, which
is a pretty standard process, and to find out how to do that,
you get a controller that tried to bring you back
to your nominal trajectory.
And so you get back.
You're happy.
But you don't have any guarantees
just with the controller.
You don't have any guarantees on how far you can get pushed.
You don't have any guarantees on where you're going to go
and where your system really can be pushed.
So when you compute the funnel, what you do
is you choose a Lyapunov function.
And I'll explain what that is in the next slide.
And you try to minimize the space around that function
that tried to bring it back.
So what this is is--
so you have some kind of your initial state.
This would be the initial state.
And the whole region, what you're trying to do
is minimize it around it.
So does that makes sense why you do that?
So your trajectory is basically going
to go anywhere around here.
And what you're trying to do is find the region of space
that minimizes--
that encompasses all of the places
that your system is going to get to.
So that's easy to do when you it out
and you know exactly where your system's going to go.
It's easy to just shrink your ball around it.
But you actually compute that.
No, forget it.
OK.
So when you have that for each point in the trajectory,
you know that you're going to stay within here,
because you're going to have some kinds
of-- from your nominal trajectory,
you're going to have different places where your system can
go under the given conditions of velocity and wind uncertainty.
You're going to go anywhere withing that.
But as long as you know you're still in that ellipsoid,
then you're going to stay within those ellipsoids
as you go down the path.
Does it make sense?
Good.
So the reason they use Lyapunov functions
is there's different ways to measure stability.
And so I'll move forward to this.
So there's different ways to measure stability
in a non-linear system.
So in a linear system, you're either unstable
or you're globally exponentially stable.
So you're going to converge back to your--
to whatever stability equilibrium,
what you have at an exponential rate.
But there is also, in non-linear systems,
there's global exponential stability.
There asymptotic stability.
And there's stability in the sense of Lyapunov,
which is what we care about.
So the difference between that is--
so say this is your nominal.
And globally exponentially stable
means that no matter where you start anywhere on the board,
you're going to be converging back to this equilibrium
going at an exponential rate.
So that's the best case scenario.
That's what you want.
Asymptotic stability means that you're
going to be going from somewhere on the board,
within a certain region, back to this nominal trajectory.
But it doesn't have to be an exponential rate.
So you can do something like that, as long as eventually
you sort of converging back to it.
And then there's stability in the sense of Lyapunov,
which is-- so, say you're here.
Your system can be doing anything, anything crazy,
as long as it stays within some certain thing, which
in the 1D case we saw was the little ball going around it.
So imagine there's like a ball for each of these.
and this is where your trajectory could possibly go.
As long as it stays within that, you can say your system
is stable in the sense Lyapunov.
Does that make sense?
Cool.
So know this, does that--
AUDIENCE: I just have a basic question.
So the Lyapunov function is around a stable set point.
But the trajectory has non-zero velocity.
So what is the point that it's stabilizing around?
PRESENTER 3: You can stabilize around a trajectory, which also
what the funnels do.
So we have your little point here.
And this is your nominal trick, some kind of state.
And you're wind can knock you this way.
Your velocity difference can knock you this way or this way.
But as long as you're still within that,
You've got to converge back to it.
And this is the value for your Lyapunov function.
And these are the different states you can have.
An important thing to notice is the derivative
is a negative definite-- or negative semi-definite
in the case.
And that means that basically all your trajectories,
no matter where you go, they're going
to be going down this cone.
And eventually they're going to to down to some value.
So does that make sense?
That's like pretty amazing stuff and your system stuff.
Cool.
So once you know that, it makes sense
to use Lyapunov functions as candidates
for computing funnels.
So an ellipsoid is actually defined by a quadratic Lyapunov
function, which is down here.
[INAUDIBLE] shown the equation for an ellipsoid
is some V times S. So that was the equation for an ellipsoid
that Gabriel showed previously.
The quadratic Lyapunov function has the same structure,
where you have this being x to [INAUDIBLE],, which is basically
the error of you state.
So it's some kind of exact mean of the state
that you're actually in minus x0, which is the nominal point
that you want to reach.
So this defines the region around your--
the nominal point, which would be somewhere in there.
And the ellipsoid is computed by doing that minimization
that I showed you on the previous slides.
And then you can figure out the region inside of it
by solving that equation.
And if it's less than 1, I believe you inside.
And those are all the red dots that
show that you're inside of it.
So that's used when computing trajectories.
You solve for-- say that you're inside a point cloud,
you know which points you're going to get inside
of this ellipsoid.
So when you're planning, you solve that equation
for each of the ellipsoids.
And you know if you're going to hit something or not.
All right, so this is a video that [? Ani ?] did.
And this is using the funnel libraries
for collision avoidance.
This is showing for just one funnel.
The glider dynamics were shown in one of the previous slides.
They were pre-set by the glider dynamics.
But [INAUDIBLE].
So you see right there that there's objects,
and the glider plans a path around them.
So the funnels-- this is one possible one.
Right here, I'm pretty sure they tell it where objects are,
even though they're not actually there.
And it finds that funnel being the one the guy wants.
And you see that throughout the entire path,
the glider will stay within the funnel.
And then when you're searching with the online planning
algorithm that was shown previously,
it goes through all of these funnels
and eventually finds the best safe one.
You won't always find a safe one, as discussed.
In this case you did.
But it finds the best one around the path.
So one way that it finds the best one
is by finding all of-- so if you're planning a point cloud,
you find all the points that lie with the ellipsoids.
And the one with the least amount of points
is probably going to be the safest one.
So here's a bunch of different obstacles.
And it safely maneuvers all.
And there's some pretty dynamic movements, which is cool too.
So within that there is--
let's see.
I'm going to back to--
is there a way to get back to the full screen [INAUDIBLE]??
AUDIENCE: [INAUDIBLE]
PRESENTER 3: [INAUDIBLE]
So with the online planning algorithm,
here's one of the possible paths.
You have your point cloud of trees.
And those were shown in the previous, the little round
thing with the green foxy tree-looking things.
Using a sensor model, you get a point of that.
And as you're going, you plan your path.
And the way that this works is every five meters,
you plan a path.
And then as you're flying through it,
you get new sensor information.
And you can replan your path using the algorithm.
And that will guarantee you that you're safe.
And when you're flying, obviously you
don't see the funnels.
But right here you can see there's probably
one funnel here and then another funnel
that plans this way, another funnel that goes to here,
and then another one that goes there.
And that's a full path.
And there's also a cool one , because it shows that you go
through the tree.
And that's where one of the funnels
is rather than going around.
It is possible that you start computing a new funnel--
or you start searching a new library here.
And you may not be able to make it up the way in time,
given what speed you're going at.
Does anyone have any questions?
And this is the online planning algorithm
that we saw before written out.
And some of the references, the paper
from the video that we just saw, that's given here.
And that also go to the example [INAUDIBLE]..
Frazzoli was one of the original people
that computed a flow tube.
Hoffman and Williams did the temporal planning for footsteps
and decoupled humanoid system.
And I did most of the stuff on [INAUDIBLE] for that years ago.
Another important thing to note that was a big thing
in my personal research was that even though you may note be
able to compute-- or that you may not find a funnel that
necessarily goes--
finds a safe path, you can shift that funnel around.
You could even move it slightly up and down,
as long as the first ellipsoid is still within--
as long as your initial state is still within better ellipsoid.
And that's easy to do because you can just
give it a simple transformation between one
state and the other.
And if you transform this S matrix,
then that will transform your entire funnel
and it will shift it around.
So you can find your best funnel,
even though it may hit something.
If it was slightly shifted to the left,
you can just shift it using that transformation.
So that's one of the [INAUDIBLE] funnels too.
Does everyone understand funnels and flow tubes now?
AUDIENCE: So I have two questions.
So the side of that funnel is computed
by the transform script.
Is that right?
PRESENTER 3: Yeah, if you want to get it some ridiculous wind,
like 1,000 miles per hour, then you're
going to get huge funnels.
But that's under some kind of reasonable--
you know in this region of the forest or something
there's only three mile per hour winds or something like that.
Yeah, that's based a lot on what your counts are.
AUDIENCE: So do you have any algorithm that in your mind
that is not using offline [INAUDIBLE]??
So this is like mostly you do the offline
and the you do the online search.
But if you were in a wild environment, you do nothing.
Then do you have any [INAUDIBLE] that isn't--
PRESENTER 3: I mean, there are algorithms that will--
well, just the basic controller will try to get you back
to nominal trajectory.
But there's nothing that I know of at least
that will guarantee you safety and will give you
an all-encompassing region like flow tube or a funnel.
So flow tube you find there's an infinite number of paths
that will get you from here to here
with your system, basically every little minute
change that you have.
And that obviously takes awhile to compute and approximate.
And the funnels, it takes awhile to compute the regions
where it can go.
So I don't know anything that will online
compute this region.
But online you will be able to compute some trajectory.
And then let your controller will take your state error
and control it.
But it won't guarantee [INAUDIBLE]..
AUDIENCE: With the funnels, how do you
compute your initial set of states,
or the allowed initial set of states?
You have these uncertainties, like for the wind and velocity,
but what about the initial state before those disturbances
happen?
You'd probably want more than one initial state.
AUDIENCE: Here's and eraser.
PRESENTER 3: Yeah, that'd be good.
Cool.
Thanks.
So with the funnels, so you have your nominal trajectory again,
and then your ellipsoids around it.
So when your system starts, you have your initial state.
And your initial state is just-- it's
going to be here at time t0.
But over the time computed, you can
go over here, or anywhere around here really,
depending on what happens.
AUDIENCE: But I just me that you'd
want to apply the funnel multiple times.
And you're initial state may not be exactly the same.
So it should be possible to use the same funnel even
though the initial state is off by a little bit.
PRESENTER 3: Yeah, OK.
So say that you chose this funnel first.
And eventually what actually happens is you do this
and you get pushed around.
And then you end up here instead of this funnel.
As long as your next funnel that you plan--
so you can start a new funnel at any point in this trajectory,
as long as the next funnel is also--
as long as you have V intersection between the point
and the next funnel.
And if you're within this region,
and you plan the next funnel, what do you do
is you plan the next funnel with this being the original x0.
So as long as that's you next x0,
and then this will take on a new nominal trajectory.
AUDIENCE: Yeah, I'm just saying, asking
how you, like for the one all the way on the left, that one,
yeah, how do you define how big that initial region is?
PRESENTER 3: Oh, OK, so that one, say, if you start,
say, not moving or something and you got pushed?
Is that what you're asking for--
AUDIENCE: Well, I mean, I understand
that you're using the V for uncertainty,
and V and W. So that essentially defines
how big those funnels are.
Do the also define how big the first one is?
PRESENTER 3: Yes.
Yeah, the do.
AUDIENCE: OK.
PRESENTER 3: So what you're doing, because what you want
to do is use the funnels and have some funnel library
and be able to use those throughout all time.
So you don't want--
so I guess what you're asking, the first funnel,
you're going to start at some initial state
0 with no velocity, stuff like that.
And so you're not going to have any uncertainty
on the first thing because you know where you start,
the initial state.
AUDIENCE: Yeah, I'm just asking independent
of the wind and stuff like that, you
might just be starting at a point
other than what that nominal point is.
So you may want to define that initial funnel size
by some other criteria besides wind.
Is there--
AUDIENCE: So [INAUDIBLE] sensor how sure
you are about where initial location is.
AUDIENCE: Yeah, and then--
I mean, there's sensor uncertainty.
But you just may happen to be in the-- if you're
doing the glider experiment 10 times,
you may not start it from exactly the same position
every time.
PRESENTER 3: Yeah, you should--
your funnel, every time you plan a new funnel,
you start at the nominal trajectory
above that new funnel.
So you're not going to have this funnel.
And you're never going to start over here on the first one.
You're always going to start at this point.
[INTERPOSING VOICES]
AUDIENCE: I though the point of the funnel
was so that you can reuse it without having to replan.
PRESENTER 3: Yeah, you can move the funnels around.
AUDIENCE: Oh, you can move?
OK.
PRESENTER 3: Yeah, yeah, that was-- so
every time you start a new funnel,
you start at this nominal trajectory.
But the next time you use the same funnel,
you could be over here and just shift the funnel down
to exactly the point.
So the initial state is never going to be anywhere starting
at t0, it's not going to be somewhere other
than the nominal trajectory.
But at t1 it could be over here.
And so you just shift the whole funnel around.
And as long as your t0 starts at the new funnel,
and as long as t0 is within the funnel above t-- last funnel,
then you just shift it around.
You can also turn it, as long as you can multiply this and this.
AUDIENCE: It seems like the shifting
and turning is a pretty complex search problem in itself.
Is that a hard problem?
PRESENTER 3: No, that was actually the--
[INAUDIBLE] I got rid of the slide.
I might have gotten rid of that slide.
I shouldn't because that was the work
that I did for the [INAUDIBLE].
Let's see [INAUDIBLE].
But, yeah, there's a bunch of different ways to do it.
I did a pretty not very smart search,
where I just looked for the funnels, the safest funnel
being the one with the least number of points in the point
cloud within that entire funnel.
And then-- oh, man, I did get rid of this.
But basically what I did was find the safest funnel.
And if there still was a collision within the safest
funnel, the I admit I had a minimization problem
as you shifted back and forth.
And there was a cost function that--
see if I can bring it up.
AUDIENCE: So you're doing an optimization
of the online running of the--
PRESENTER 3: Yeah.
That was an input that was implemented
in realtime simulation.
But that wasn't implemented on the actual glider as of
[INAUDIBLE].
So let's see, all right [INAUDIBLE]..
And you also want--
I also made is so you minimize the amount that you
shift it to.
So you don't want to shift it completely somewhere
else because it won't be in your path.
And you'll end up doing some dynamic [INAUDIBLE]..
Like, you'll be flying, and then if you compute a funnel that's
here that's kind of safe, but you
shift it all the way down to here.
Then you're gliders going to be doing something crazy.
And that may-- I guess it would be [INAUDIBLE]..
But I minimized that for at least [INAUDIBLE] shift it.
Does anybody have other questions?
Yeah, so does anybody have any questions on--
AUDIENCE: Can I ask one?
So you've given us models of bounded uncertainty
in your dynamics.
So if you use probabilistic models,
then your funnels start looking like risk allocations.
Is there an interpretation of one
in terms of the [INAUDIBLE]?
PRESENTER 3: I don't know.
No, but I'm sure if you look it up, yeah.
I'm sure somebody's been working on that.
I'm not really sure that fits--
I know I haven't done that.
AUDIENCE: Talk a little bit about the interaction
between the flow tube selection or the funnel selections
and the underlying [INAUDIBLE].
So let's say you have something that's planning the reference
trajectory that's separate from your flow tube
selection or your funnel selection.
And then you have to select the funnels and flow
tubes that allow you to follow that trajectory the best
you can.
How do the interact if you have a flow tube--
or don't have a safe flow tube or funnel [INAUDIBLE] reference
trajectory?
PRESENTER 3: So you're asking basically the difference
between planning with a funnel laddering
and trajectory laddering.
AUDIENCE: Yeah, kind of sort of-- well, because I
know the checkoff planner that uses an incremental pathfinder,
so the planned path or something like that.
And then you fit-- are you fitting flow tuber
to the reference trajectory?
PRESENTER 3: Oh, you do that off and on.
So you compute-- they're called funnel libraries.
Or usually they're trajectory libraries.
So ever computing a trajectory in realtime
for a fast-moving dynamic system is going to be expensive.
And then computing a funnel on top of that
is going to be even more expensive.
So what a lot of people do is they
compute the library offline for a trajectory and plan using
that.
But on this one, you compute your trajectory,
compute the funnel around that trajectory offline.
And then you search through the funnel library.
You don't search through trajectories
and then try to fit a funnel around that one.
You just search through the funnel storage.
PRESENTER 2: If you don't have a very good library,
then you will not get a very good trajectory.
PRESENTER 3: Also, a cool thing about funnels
versus trajectories is a lot of trajectories
will be discretized for speed, so you have your nodes.
And so, say this is what your trajectory does, and you have
node points here, and you're trying to fly past a wall
or something.
If your wall goes here, you're algorithm
is going to search these points, and it's going to say,
OK, well, this is a safe path because none of the node point
intersect with this wall.
So you fly [INAUDIBLE] a little [INAUDIBLE]..
But a funnel, since you have this region around it, you--
no, I did a bad job of drawing that, but OK.
When we search the algorithm and see
if it's less than or greater than 1,
you're going to find all these points being in that region
also.
I guess that depends on how well you want to discretize it.
If your trajectory is [INAUDIBLE] of really, really
small points, then you're not going to run into that issue.
AUDIENCE: Seems like you could-- like
when you're building a normal RIT without funnels,
from concave points, if you say, yeah, they're illegal,
it seem that if you're automatically
adding on to that funnel instead of generating
an entire trajectory and then making a funnel,
you could save computational time for [INAUDIBLE] things
like that.
Do you know if that's done?
PRESENTER 3: No, I don't.
I do know that, I mean, computing,
you obviously want to minimize computation time.
But it's not a critical thing when computing, I guess,
funnels and flow tubes, because you do that all offline.
And you want to--
I don't think it's even close to the point
where you go to online to compute a funnel.
It takes like six hours to compute it, so--
depending on how many dimensions your state has.
So, yeah, it's not like you're flying
and you can compute one of these things.
You'll crash like [INAUDIBLE].
OK.
[APPLAUSE]