WEBVTT

00:00:01.580 --> 00:00:03.920
The following content is
provided under a Creative

00:00:03.920 --> 00:00:05.340
Commons license.

00:00:05.340 --> 00:00:07.550
Your support will help
MIT OpenCourseWare

00:00:07.550 --> 00:00:11.640
continue to offer high-quality
educational resources for free.

00:00:11.640 --> 00:00:14.180
To make a donation or to
view additional materials

00:00:14.180 --> 00:00:18.110
from hundreds of MIT courses,
visit MIT OpenCourseWare

00:00:18.110 --> 00:00:19.090
at ocw.mit.edu.

00:00:22.090 --> 00:00:24.186
PRESENTER 1: The basic
concepts of reachability--

00:00:24.186 --> 00:00:27.040
I'm talking about how
we can represent reach

00:00:27.040 --> 00:00:29.713
sets in continuous spaces.

00:00:29.713 --> 00:00:31.587
[INAUDIBLE] is going to
take it over and talk

00:00:31.587 --> 00:00:35.205
about some applications
in robust motion planning.

00:00:35.205 --> 00:00:38.435
And then Gerard is going to talk
about how we compute reach sets

00:00:38.435 --> 00:00:40.670
and focus on these two,
on flow tubes and funnels.

00:00:43.930 --> 00:00:46.940
So reachability is a
task of figuring out

00:00:46.940 --> 00:00:50.480
what stage a dynamical
system can possibly reach

00:00:50.480 --> 00:00:53.580
or be at at a certain time.

00:00:53.580 --> 00:00:57.950
So for example, if we
have these two systems,

00:00:57.950 --> 00:01:00.486
we have a finite state
machine on this reach system

00:01:00.486 --> 00:01:01.600
and a continuous system.

00:01:01.600 --> 00:01:05.326
And these are the
starting points.

00:01:05.326 --> 00:01:06.860
And these are our axes.

00:01:06.860 --> 00:01:08.750
We can move east or north here.

00:01:08.750 --> 00:01:12.096
And we can move east or
north with these velocities.

00:01:12.096 --> 00:01:13.790
[INAUDIBLE]

00:01:13.790 --> 00:01:17.620
So after one second
or one time step,

00:01:17.620 --> 00:01:21.980
we can be in either
of these two states.

00:01:21.980 --> 00:01:25.102
Or we can be anywhere
in this area--

00:01:25.102 --> 00:01:29.240
and after two seconds, after
three seconds, and so on.

00:01:29.240 --> 00:01:30.270
OK?

00:01:30.270 --> 00:01:33.492
So this is what
reachability does.

00:01:33.492 --> 00:01:36.790
And the motivation for this--

00:01:36.790 --> 00:01:38.890
one of the applications
for reachability

00:01:38.890 --> 00:01:41.470
is for verification.

00:01:41.470 --> 00:01:46.870
Verification is just the task
of making sure that we are never

00:01:46.870 --> 00:01:48.332
going to reach any bad states.

00:01:48.332 --> 00:01:50.290
So for instance, let's
say we have a microwave.

00:01:50.290 --> 00:01:54.760
A bad state is the
microwave being open and on.

00:01:54.760 --> 00:01:57.940
We want to make sure that these
bad states are never reachable.

00:01:57.940 --> 00:02:01.365
So what we do is we
compute the reachable sets,

00:02:01.365 --> 00:02:04.970
and we check for intersection
with the bad states

00:02:04.970 --> 00:02:08.410
to see if the microwave
is on and open.

00:02:08.410 --> 00:02:12.050
Or like over here, let's
say we have these obstacles.

00:02:12.050 --> 00:02:15.790
Let's say we have a wall or
somewhere else over here.

00:02:15.790 --> 00:02:18.060
We want to-- this is bad, right?

00:02:18.060 --> 00:02:22.030
Because we can reach this state,
and it's the same as a wall.

00:02:22.030 --> 00:02:23.650
Any questions so far?

00:02:23.650 --> 00:02:26.470
Feel free to
interrupt me any time.

00:02:29.350 --> 00:02:31.250
Another motivation
for reachability

00:02:31.250 --> 00:02:33.070
is for robust motion
planning, which

00:02:33.070 --> 00:02:35.770
[INAUDIBLE] talk more about.

00:02:35.770 --> 00:02:38.270
And I have a video of this.

00:02:38.270 --> 00:02:40.880
So what we can do
with reachability

00:02:40.880 --> 00:02:42.560
is stuff like this.

00:02:51.810 --> 00:02:54.170
So this is done using
flow tubes, which

00:02:54.170 --> 00:02:57.936
is reach sets, reachability.

00:02:57.936 --> 00:03:00.090
Gerard is going to
talk more this example.

00:03:07.740 --> 00:03:11.420
So now before we talk more
about these cool examples, let's

00:03:11.420 --> 00:03:12.790
just formalize concepts.

00:03:12.790 --> 00:03:16.350
Let's define some things.

00:03:16.350 --> 00:03:19.830
So let's go back to
the same system that we

00:03:19.830 --> 00:03:25.460
had earlier, this state machine,
with a finite set of states, X;

00:03:25.460 --> 00:03:29.320
a finite set of inputs,
U, which in this case

00:03:29.320 --> 00:03:31.337
are east and north; and
a transition function.

00:03:31.337 --> 00:03:32.920
And let's say this
is just [INAUDIBLE]

00:03:32.920 --> 00:03:34.400
to keep things simple.

00:03:34.400 --> 00:03:38.150
And we have a set of
initial states, X0,

00:03:38.150 --> 00:03:41.560
which I didn't label as red.

00:03:41.560 --> 00:03:45.400
So the reach set is defined
as the set of states

00:03:45.400 --> 00:03:48.860
that we can possibly
be in at time t.

00:03:48.860 --> 00:03:53.050
So more formally, there exists
a sequence of t control inputs

00:03:53.050 --> 00:03:55.240
that will take us from
this initial state

00:03:55.240 --> 00:03:59.370
to the corresponding reach set.

00:03:59.370 --> 00:04:03.540
So let's say, for example,
you have bad state,

00:04:03.540 --> 00:04:08.690
it's in the reach set at
time 3 because there exists

00:04:08.690 --> 00:04:10.270
a sequence of three inputs.

00:04:10.270 --> 00:04:12.910
In this case this is
one such sequence.

00:04:12.910 --> 00:04:16.209
There is two more that will
take us from the initial state

00:04:16.209 --> 00:04:17.771
to that.

00:04:17.771 --> 00:04:18.270
OK?

00:04:21.490 --> 00:04:26.130
And then the reachable set,
the reach set reachable set

00:04:26.130 --> 00:04:30.450
is defined as the union of all
reach sets for time less than

00:04:30.450 --> 00:04:32.760
or equal to t.

00:04:32.760 --> 00:04:36.660
So the reachable set
of time 0 is just

00:04:36.660 --> 00:04:37.760
the initial set of states.

00:04:37.760 --> 00:04:41.999
And time 1, we have
the unit and so on.

00:04:44.580 --> 00:04:46.530
So the reachable
set is what we use

00:04:46.530 --> 00:04:48.560
to test for intersection
with bad states

00:04:48.560 --> 00:04:53.820
because that's all the states
that we can possibly reach

00:04:53.820 --> 00:04:56.337
from time 0 to time something.

00:04:56.337 --> 00:04:56.836
OK?

00:05:00.500 --> 00:05:04.280
Now as some of you may
have figured out by now,

00:05:04.280 --> 00:05:07.170
there's a simple way
for finding segmenting

00:05:07.170 --> 00:05:09.940
so we can compute reach sets.

00:05:09.940 --> 00:05:15.490
So for example, let's say we
wanted the reach set of time 2.

00:05:15.490 --> 00:05:17.430
One way-- the
easiest way we can do

00:05:17.430 --> 00:05:19.702
this is to break this
up into time steps,

00:05:19.702 --> 00:05:21.240
into single time steps.

00:05:21.240 --> 00:05:24.410
So instead of computing
it straight for time 2,

00:05:24.410 --> 00:05:26.732
let's first compute
it for time 1.

00:05:26.732 --> 00:05:29.250
And now we can use
these two states

00:05:29.250 --> 00:05:35.420
as the set of initial states and
compute the reach set for one

00:05:35.420 --> 00:05:36.930
more time step.

00:05:36.930 --> 00:05:40.972
And that gave us this
reachable-- the reach set.

00:05:40.972 --> 00:05:41.860
OK?

00:05:41.860 --> 00:05:45.232
Any questions?

00:05:45.232 --> 00:05:48.010
OK, and the reason why these
works is because reach sets are

00:05:48.010 --> 00:05:49.290
semi-groups.

00:05:49.290 --> 00:05:53.690
And semi-groups
satisfy this equality.

00:05:53.690 --> 00:05:58.120
So we can not just break it
up into single time sets.

00:05:58.120 --> 00:06:03.090
We can break into any
two times, s and t.

00:06:06.018 --> 00:06:10.005
OK, so all of this was
for finite state machines.

00:06:10.005 --> 00:06:12.300
But for continuous
systems, things

00:06:12.300 --> 00:06:15.030
get a little more complicated.

00:06:15.030 --> 00:06:17.420
It's a lot of the
same concepts, but we

00:06:17.420 --> 00:06:19.930
need to handle a
very important issue,

00:06:19.930 --> 00:06:22.400
and that is how to
represent reach sets,

00:06:22.400 --> 00:06:26.324
or just set, regions in
space for continuous systems.

00:06:26.324 --> 00:06:27.740
Because in a finite
state machine,

00:06:27.740 --> 00:06:32.590
we can just enumerate the list
of states in the reach set

00:06:32.590 --> 00:06:33.750
or reachable set.

00:06:33.750 --> 00:06:36.150
In a continuous system,
we need some other way.

00:06:36.150 --> 00:06:40.860
We can't just say it's every
point for which there exists

00:06:40.860 --> 00:06:44.570
a sequence of control
inputs, because there

00:06:44.570 --> 00:06:49.150
can be infinitely many points.

00:06:49.150 --> 00:06:54.439
So what we do, we have two
types of representations

00:06:54.439 --> 00:06:54.980
that we like.

00:06:54.980 --> 00:06:57.340
One is convex polytopes.

00:06:57.340 --> 00:07:02.830
And that's just a generalization
of a convex polygon into n

00:07:02.830 --> 00:07:05.256
space, into n dimensions.

00:07:05.256 --> 00:07:08.730
And we have two basic
ways that we can represent

00:07:08.730 --> 00:07:10.680
these complex polygons.

00:07:10.680 --> 00:07:18.390
One is with these hull vertices,
like this, AB to F. [INAUDIBLE]

00:07:18.390 --> 00:07:23.775
And then the convex polytope
is defined as the convex hull.

00:07:23.775 --> 00:07:29.230
And in case someone doesn't
remember what a convex hull is,

00:07:29.230 --> 00:07:34.596
let's say we have
just a list of points.

00:07:34.596 --> 00:07:38.830
The convex hull, imagine
have a rubber band

00:07:38.830 --> 00:07:41.744
and you are going to stretch
it out, and you let it go.

00:07:41.744 --> 00:07:45.422
And what that's
going to do is this.

00:07:45.422 --> 00:07:52.520
And the convex hull is just
the whole area inside this--

00:07:52.520 --> 00:07:53.690
the rubber band.

00:07:53.690 --> 00:07:55.160
OK?

00:07:55.160 --> 00:07:58.116
And then another
way we can represent

00:07:58.116 --> 00:08:02.650
convex polytope is with
a set of inequalities,

00:08:02.650 --> 00:08:07.250
so for example, here
we have four lines.

00:08:07.250 --> 00:08:09.220
Here's the equation
for each line.

00:08:09.220 --> 00:08:13.620
So let's say this red
line, we want anything

00:08:13.620 --> 00:08:15.640
below the red line.

00:08:15.640 --> 00:08:18.970
This blue line, we want anything
to the right, so anything

00:08:18.970 --> 00:08:20.310
greater than, and so on.

00:08:20.310 --> 00:08:23.350
So this area is the intersection
of all these inequalities.

00:08:23.350 --> 00:08:24.748
OK?

00:08:24.748 --> 00:08:29.090
And each of these
representations

00:08:29.090 --> 00:08:32.409
has an advantage over the other.

00:08:32.409 --> 00:08:37.200
Vertices are good to test
for emptiness because when

00:08:37.200 --> 00:08:40.260
our set of vertices is empty,
then our convex polytope

00:08:40.260 --> 00:08:41.789
is going to be empty.

00:08:41.789 --> 00:08:47.070
And this inequalities is very
useful for testing membership,

00:08:47.070 --> 00:08:50.240
because for any
points, we can just

00:08:50.240 --> 00:08:51.650
plug it in to every inequality.

00:08:51.650 --> 00:08:53.390
And if it's true for
every inequality,

00:08:53.390 --> 00:08:57.575
then it is in the whole group.

00:08:57.575 --> 00:09:02.430
And convexity, I'll
just explain it briefly.

00:09:02.430 --> 00:09:08.730
Convexity means that any two
points inside our region--

00:09:08.730 --> 00:09:12.340
our region is not non-convex
is for the line connecting

00:09:12.340 --> 00:09:13.664
these two points.

00:09:13.664 --> 00:09:16.080
All the points in that line
are going to be in the region.

00:09:16.080 --> 00:09:18.455
So here you can see
that this is convex.

00:09:18.455 --> 00:09:22.850
And here, this red area
is outside the region,

00:09:22.850 --> 00:09:25.470
so this other region
is non-convex.

00:09:25.470 --> 00:09:27.860
And convexity is going to be
important for the algorithms

00:09:27.860 --> 00:09:29.410
later on.

00:09:29.410 --> 00:09:32.716
Gerard will talk
more about them.

00:09:32.716 --> 00:09:33.620
OK?

00:09:33.620 --> 00:09:35.910
Other than convex
polytopes, we can also

00:09:35.910 --> 00:09:39.640
use ellipsoids to
represent reach sets.

00:09:39.640 --> 00:09:42.610
So ellipsoids are just
the extension of ellipses

00:09:42.610 --> 00:09:45.525
to n spaces, n dimensions.

00:09:45.525 --> 00:09:49.170
And a convex polytope
is defined by this.

00:09:49.170 --> 00:09:51.160
x is just all the points
inside the polytopes,

00:09:51.160 --> 00:09:52.445
inside the ellipse.

00:09:52.445 --> 00:09:54.910
v is the center.

00:09:54.910 --> 00:10:02.970
And A just tells us about
this, how deform the ellipsis.

00:10:02.970 --> 00:10:04.278
Any questions?

00:10:07.682 --> 00:10:08.182
OK.

00:10:10.767 --> 00:10:13.310
And one of the
reasons why we like

00:10:13.310 --> 00:10:17.300
convex polytopes, why we
like ellipsis, ellipsoids,

00:10:17.300 --> 00:10:21.270
is because of their enclosure
under linear operators.

00:10:21.270 --> 00:10:24.020
So let's say we have
P that is convex

00:10:24.020 --> 00:10:25.178
polytope or an ellipsoid.

00:10:25.178 --> 00:10:30.880
Then, if we have a
matrix A, then A times

00:10:30.880 --> 00:10:33.140
P will be defined that way.

00:10:33.140 --> 00:10:37.980
It is still going to be a
convex polytope or an ellipsoid.

00:10:37.980 --> 00:10:39.880
So if we have
something like this,

00:10:39.880 --> 00:10:41.740
then this can maybe
getting formed,

00:10:41.740 --> 00:10:44.584
but it's still going to be
convex, a convex polytope.

00:10:48.460 --> 00:10:51.070
And the reason why
this is nice is that,

00:10:51.070 --> 00:10:56.901
if we have a linear system
defined this way or this way,

00:10:56.901 --> 00:10:58.920
and then if we start with a--

00:10:58.920 --> 00:11:04.930
basically, if we started with
a convex set of states, then

00:11:04.930 --> 00:11:07.630
our reach sets are always going
to be convex because we're just

00:11:07.630 --> 00:11:11.334
multiplying by A.
And this is very nice

00:11:11.334 --> 00:11:13.500
to represent-- this tells
us that our representation

00:11:13.500 --> 00:11:17.976
is going to be good because we
can just use convex polytopes,

00:11:17.976 --> 00:11:22.150
ellipsoids, and
stick with those.

00:11:22.150 --> 00:11:25.974
And then just a technical--

00:11:25.974 --> 00:11:30.050
OK, so even though the reach
sets are going to be convex,

00:11:30.050 --> 00:11:34.890
the reachable set
might not be convex.

00:11:34.890 --> 00:11:40.700
But it will always be a union of
convex polytopes or ellipsoids.

00:11:40.700 --> 00:11:43.200
For example, let's say,
in the previous example,

00:11:43.200 --> 00:11:45.020
we started here.

00:11:45.020 --> 00:11:48.480
Then we need, after one
time set, we were here.

00:11:48.480 --> 00:11:50.060
So these are the two things.

00:11:50.060 --> 00:11:53.540
And then our reachable set
is the union of both of them.

00:11:53.540 --> 00:11:56.480
This is clearly not convex.

00:11:56.480 --> 00:12:00.640
But it is a union
of convex polytopes.

00:12:00.640 --> 00:12:03.880
So we can represent
everything within it.

00:12:03.880 --> 00:12:04.870
OK?

00:12:04.870 --> 00:12:08.496
Any questions before I
move on to [INAUDIBLE]??

00:12:08.496 --> 00:12:09.978
OK, thank you.

00:12:18.376 --> 00:12:20.230
PRESENTER 2: OK, so now
that have understood

00:12:20.230 --> 00:12:23.690
what reachability is and
how [INAUDIBLE] represents,

00:12:23.690 --> 00:12:26.037
and before we dwell into
more theoretical aspects

00:12:26.037 --> 00:12:26.662
of [INAUDIBLE].

00:12:26.662 --> 00:12:30.486
Here are some cool
applications of reachability.

00:12:30.486 --> 00:12:35.162
So there are many applications
of reachability to robots

00:12:35.162 --> 00:12:37.632
are like complex systems
[INAUDIBLE] systems.

00:12:37.632 --> 00:12:40.596
One of the applications that
has been talked about before

00:12:40.596 --> 00:12:42.590
is the robust motion planning.

00:12:42.590 --> 00:12:47.080
The early idea is to more
of a glider or an airplane

00:12:47.080 --> 00:12:50.955
through lots of obstacles, even
in the presence of [INAUDIBLE]

00:12:50.955 --> 00:12:52.380
these and [INAUDIBLE].

00:12:52.380 --> 00:12:54.140
They're already
crashing into obstacles,

00:12:54.140 --> 00:12:57.080
even when they are [INAUDIBLE].

00:12:57.080 --> 00:12:58.882
[INAUDIBLE] applications
of reachability

00:12:58.882 --> 00:13:03.802
to control complex systems like
by parallel working robots.

00:13:03.802 --> 00:13:07.492
Here you can see that we are
controlling [INAUDIBLE] simple

00:13:07.492 --> 00:13:10.220
soccer ball with something.

00:13:10.220 --> 00:13:12.280
And more importantly,
reachability

00:13:12.280 --> 00:13:16.768
is used for very fine safety
properties, for safety reasons,

00:13:16.768 --> 00:13:19.198
like aircraft
collision avoidance.

00:13:19.198 --> 00:13:23.100
So in those [INAUDIBLE]
we're going [INAUDIBLE],,

00:13:23.100 --> 00:13:24.730
robust motion planning.

00:13:24.730 --> 00:13:27.670
If you're interested in other
things, there are papers

00:13:27.670 --> 00:13:31.600
and there are [INAUDIBLE].

00:13:31.600 --> 00:13:33.370
So the goal of
motion planning is

00:13:33.370 --> 00:13:37.235
to find a set of control inputs
that take you from the start

00:13:37.235 --> 00:13:39.259
state to the goal state.

00:13:39.259 --> 00:13:41.311
So in this example--
without colliding

00:13:41.311 --> 00:13:45.550
with any of the obstacles.

00:13:45.550 --> 00:13:49.342
So here, this is one
possible path from the start

00:13:49.342 --> 00:13:51.326
state to the goal state.

00:13:51.326 --> 00:13:52.814
So it just looks nice.

00:13:52.814 --> 00:13:55.294
[INAUDIBLE] collective
things of the obstacles.

00:13:55.294 --> 00:13:58.094
But if you get the
controls to this cart

00:13:58.094 --> 00:13:59.510
and then give it
a real robot, you

00:13:59.510 --> 00:14:04.222
might find it going--
doing something like this.

00:14:04.222 --> 00:14:08.020
So this is because of the
path that you-- algorithm

00:14:08.020 --> 00:14:11.543
that you use for planning this
path is-- that's not taking

00:14:11.543 --> 00:14:13.168
into account any of
the uncertain areas

00:14:13.168 --> 00:14:15.152
in the environment
or [INAUDIBLE]..

00:14:15.152 --> 00:14:18.991
So there are different
kinds of uncertainties.

00:14:18.991 --> 00:14:20.740
One of them is
environmental disturbances,

00:14:20.740 --> 00:14:22.540
like there is wind here.

00:14:22.540 --> 00:14:26.060
So that can move you over
off your planned path.

00:14:26.060 --> 00:14:27.910
And there can be
modeling errors.

00:14:27.910 --> 00:14:30.772
The model that you use to
represent your complex system

00:14:30.772 --> 00:14:31.980
might just be an approximate.

00:14:31.980 --> 00:14:34.465
So the real world is different.

00:14:34.465 --> 00:14:36.453
And there are state uncertainty.

00:14:36.453 --> 00:14:41.420
So the things that you used
for measuring your position

00:14:41.420 --> 00:14:43.481
or velocity are also
approximate, so there

00:14:43.481 --> 00:14:44.882
are uncertainties.

00:14:44.882 --> 00:14:47.220
[INAUDIBLE] there can
be some randomness

00:14:47.220 --> 00:14:48.651
in the initial conditions.

00:14:48.651 --> 00:14:51.513
You are thinking of
starting the robot at 0,0,

00:14:51.513 --> 00:14:53.712
but in practice,
you might actually

00:14:53.712 --> 00:14:57.044
be starting at [INAUDIBLE]
0, [INAUDIBLE]..

00:14:57.044 --> 00:15:01.810
So there is randomness
in initial conditions.

00:15:01.810 --> 00:15:03.550
The goal of robust
motion planning

00:15:03.550 --> 00:15:08.265
is to have some guarantees
with some confidence

00:15:08.265 --> 00:15:11.335
that the system will reach the
goal set without getting on

00:15:11.335 --> 00:15:13.276
with the obstacles
even in presence

00:15:13.276 --> 00:15:14.240
of these uncertainties.

00:15:14.240 --> 00:15:16.168
So this is the problem.

00:15:16.168 --> 00:15:18.740
So let's look at some
of the solutions that

00:15:18.740 --> 00:15:21.515
come up for solving
robust motion [INAUDIBLE]..

00:15:21.515 --> 00:15:23.369
So this is a timeline.

00:15:23.369 --> 00:15:24.910
So there are three
different systems.

00:15:24.910 --> 00:15:28.320
And all of them
have a goal concept

00:15:28.320 --> 00:15:33.648
where they use some
representation to represent

00:15:33.648 --> 00:15:36.546
the reach sets, the
set of possible state

00:15:36.546 --> 00:15:38.000
that the system be.

00:15:38.000 --> 00:15:40.240
And then instead of searching
for a single trajectory

00:15:40.240 --> 00:15:43.526
to a state, they search
for these representations

00:15:43.526 --> 00:15:46.612
so that each final self-serviced
representations that

00:15:46.612 --> 00:15:48.588
can go from the start
state to the goal state,

00:15:48.588 --> 00:15:52.046
you won't hit any
of the obstacles.

00:15:52.046 --> 00:15:55.490
So earlier Bradley
and Zhao and Frazzoli

00:15:55.490 --> 00:15:57.490
came up with this concept
called the flow tubes.

00:15:57.490 --> 00:15:59.990
It's [INAUDIBLE]
presenting makes sense.

00:15:59.990 --> 00:16:03.451
And we will know all about the
[INAUDIBLE] of the [INAUDIBLE]..

00:16:03.451 --> 00:16:05.738
So one approach that
we use is that we

00:16:05.738 --> 00:16:08.321
have a set of initial states and
we have a set of goal states.

00:16:08.321 --> 00:16:12.821
So flow tube is a combination
of all the possible paths that

00:16:12.821 --> 00:16:15.210
will get you from any
point in the initial state

00:16:15.210 --> 00:16:16.545
and point in goal state.

00:16:16.545 --> 00:16:21.137
So this is kind of representing
all possible [INAUDIBLE]..

00:16:21.137 --> 00:16:23.542
So and then you search
for these flow tubes

00:16:23.542 --> 00:16:26.909
to be a path to get
your [INAUDIBLE]..

00:16:26.909 --> 00:16:32.850
And [INAUDIBLE] constraints
so that you can also

00:16:32.850 --> 00:16:35.412
reason about complex
systems and revise

00:16:35.412 --> 00:16:38.849
spatial and temporal
coordinations like the walking

00:16:38.849 --> 00:16:41.795
robot that you have seen before.

00:16:41.795 --> 00:16:50.800
An [INAUDIBLE] about for using
funnels for motion planning.

00:16:50.800 --> 00:16:54.350
So funnels is also a
similar concept to produce.

00:16:54.350 --> 00:16:58.994
It's kind of like a [INAUDIBLE]
region around your path.

00:16:58.994 --> 00:17:00.646
So that if you are
inside a funnel,

00:17:00.646 --> 00:17:02.396
you're guaranteed to
be inside the funnel.

00:17:02.396 --> 00:17:04.510
So in this picture, we're
going to [INAUDIBLE]

00:17:04.510 --> 00:17:06.880
motion planning using funnels.

00:17:06.880 --> 00:17:10.198
Again, there are references for
the other people's [INAUDIBLE]..

00:17:13.042 --> 00:17:15.698
So instead, you'll be
using funnels [INAUDIBLE]

00:17:15.698 --> 00:17:18.158
for every path, you
compute some region

00:17:18.158 --> 00:17:21.461
around the path that
is a stable region.

00:17:21.461 --> 00:17:22.586
And that's called a funnel.

00:17:22.586 --> 00:17:25.538
[INAUDIBLE] your
funnels [INAUDIBLE],,

00:17:25.538 --> 00:17:28.251
but for this part
of the lecture,

00:17:28.251 --> 00:17:30.556
we are assuming we don't
have a hundred of funnels,

00:17:30.556 --> 00:17:35.022
and that you'll see how to
use these funnels to do motion

00:17:35.022 --> 00:17:35.974
planning.

00:17:35.974 --> 00:17:37.878
So the previous example is here.

00:17:37.878 --> 00:17:40.006
The [INAUDIBLE] funnel
[INAUDIBLE] flied by.

00:17:40.006 --> 00:17:45.490
You see that it collides with
the trees and [INAUDIBLE]..

00:17:45.490 --> 00:17:47.041
Then [INAUDIBLE]
like these funnels

00:17:47.041 --> 00:17:50.546
are [INAUDIBLE] uncertainty
in the world that you have.

00:17:50.546 --> 00:17:56.615
If [INAUDIBLE] everything with
uncertainties, [INAUDIBLE]

00:17:56.615 --> 00:17:59.050
and then you compare
funnels for that.

00:17:59.050 --> 00:18:00.511
Any questions so far?

00:18:04.407 --> 00:18:08.303
AUDIENCE: Can you please say
again definition of funnel?

00:18:08.303 --> 00:18:10.750
PRESENTER 2: So it's kind of
something that [INAUDIBLE]

00:18:10.750 --> 00:18:13.034
around [INAUDIBLE] around--

00:18:13.034 --> 00:18:16.962
like you have a
[INAUDIBLE] around there.

00:18:16.962 --> 00:18:20.399
So I think Gerard with
explain more about it.

00:18:20.399 --> 00:18:23.836
So the [INAUDIBLE]
with funnels is

00:18:23.836 --> 00:18:25.800
that you are inside the
funnel at the point.

00:18:25.800 --> 00:18:27.273
When you [INAUDIBLE].

00:18:31.692 --> 00:18:34.147
It's like [INAUDIBLE].

00:18:34.147 --> 00:18:37.130
AUDIENCE: Yeah, you
have an [INAUDIBLE]..

00:18:37.130 --> 00:18:39.780
So a funnel is basically--

00:18:39.780 --> 00:18:42.402
it's kind of like a reach set
around a certain point too.

00:18:42.402 --> 00:18:45.112
So the way that you do it
is you have some [INAUDIBLE]

00:18:45.112 --> 00:18:45.612
trajectory.

00:18:45.612 --> 00:18:48.640
And then at each node
point in that trajectory,

00:18:48.640 --> 00:18:50.903
you compute some
kind of reachable

00:18:50.903 --> 00:18:53.270
set at that node point.

00:18:53.270 --> 00:18:56.440
And so you blow it up, and it
becomes some kind of ellipsoid.

00:18:56.440 --> 00:18:58.320
And as long as you're
within that ellipsoid,

00:18:58.320 --> 00:18:59.785
no matter what
disturbance you get,

00:18:59.785 --> 00:19:01.826
you're going to go back
towards the nominal path.

00:19:01.826 --> 00:19:04.690
And then so, when you join
all of those ellipsoids

00:19:04.690 --> 00:19:07.600
over the trajectory, then you
get a certain kind of funnel.

00:19:07.600 --> 00:19:09.790
And as long as you're
inside that funnel,

00:19:09.790 --> 00:19:11.290
you're going to
stay on that funnel.

00:19:11.290 --> 00:19:13.118
And you're going to
be on the path you

00:19:13.118 --> 00:19:15.140
want to be at with some
disturbance in this

00:19:15.140 --> 00:19:16.900
[INAUDIBLE].

00:19:16.900 --> 00:19:18.702
So that the great
thing that there would

00:19:18.702 --> 00:19:20.305
be an example of a funnel.

00:19:20.305 --> 00:19:21.930
As long as you're in
the funnel, you're

00:19:21.930 --> 00:19:23.560
going to stay in the
funnel, basically.

00:19:23.560 --> 00:19:27.085
AUDIENCE: So is this
considered the control, or is

00:19:27.085 --> 00:19:28.289
it only the dynamics?

00:19:28.289 --> 00:19:30.288
PRESENTER 1: It's the
dynamics with the control.

00:19:30.288 --> 00:19:34.590
So it's the flow tube system.

00:19:34.590 --> 00:19:36.215
PRESENTER 2: Yeah,
so, you'll learn

00:19:36.215 --> 00:19:37.298
more of those [INAUDIBLE].

00:19:39.974 --> 00:19:41.390
AUDIENCE: Let me
just quickly add.

00:19:41.390 --> 00:19:44.350
So a funnel is type
of flow tube, right?

00:19:44.350 --> 00:19:46.320
I mean, just different
people either use

00:19:46.320 --> 00:19:48.450
the same terminology, use
different terminology.

00:19:48.450 --> 00:19:50.940
Each of the applications
of flow tubes

00:19:50.940 --> 00:19:53.316
has some invariant,
which is different.

00:19:53.316 --> 00:19:56.010
And the particular
invariant on this one

00:19:56.010 --> 00:19:59.550
is that if you are
you in the funnel

00:19:59.550 --> 00:20:03.100
and you apply the LQR
component, [INAUDIBLE] then

00:20:03.100 --> 00:20:05.366
you're guaranteed to
stay within that tube.

00:20:05.366 --> 00:20:07.820
AUDIENCE: But I thought
the flow tube is actually

00:20:07.820 --> 00:20:13.580
like getting smaller and smaller
in the funnel [INAUDIBLE]..

00:20:13.580 --> 00:20:14.870
AUDIENCE: Not necessarily.

00:20:14.870 --> 00:20:16.980
In general, a flow
tube is simply

00:20:16.980 --> 00:20:20.180
a bundle of trajectories, which
capture some common features.

00:20:20.180 --> 00:20:22.636
And then maybe that they
move to a limit of cycle,

00:20:22.636 --> 00:20:25.790
and maybe they stabilize to a
point, and maybe that the move

00:20:25.790 --> 00:20:29.080
to a goal, maybe that
they always maintain.

00:20:29.080 --> 00:20:31.130
They're stable within a tube.

00:20:31.130 --> 00:20:33.130
In a funnel they focus
particularly on stability

00:20:33.130 --> 00:20:38.914
to disturbance and then
staying within the tube.

00:20:38.914 --> 00:20:41.324
PRESENTER 2: OK, so
the [INAUDIBLE] example

00:20:41.324 --> 00:20:47.432
is kind of useful to combine the
reachability motion planning.

00:20:47.432 --> 00:20:49.428
So here is another
situation where

00:20:49.428 --> 00:20:51.379
getting to the goal from
the start [INAUDIBLE]

00:20:51.379 --> 00:20:53.420
and there are a couple of
sort of trees lined up.

00:20:53.420 --> 00:20:57.412
But there is a path that goes
in between the [INAUDIBLE]..

00:21:00.420 --> 00:21:03.952
This path looks kind
of risky because it's

00:21:03.952 --> 00:21:05.940
pretty close to the two trees.

00:21:05.940 --> 00:21:07.679
But there is another
path we can take

00:21:07.679 --> 00:21:09.916
which travel around the trees.

00:21:09.916 --> 00:21:15.880
And so if you don't need
the [INAUDIBLE] safe.

00:21:15.880 --> 00:21:17.870
But maybe that's
[INAUDIBLE] too.

00:21:17.870 --> 00:21:20.490
So that's why we do the
combined reachability

00:21:20.490 --> 00:21:21.758
with motion planning.

00:21:21.758 --> 00:21:23.674
So if you combine
that, you might

00:21:23.674 --> 00:21:26.229
find that the first path,
if you compute a flow

00:21:26.229 --> 00:21:27.895
tube for the first
path, [INAUDIBLE] it

00:21:27.895 --> 00:21:29.144
does not hit any of the trees.

00:21:29.144 --> 00:21:30.310
And it's indeed safe.

00:21:30.310 --> 00:21:32.964
But it might happen
that the second path

00:21:32.964 --> 00:21:38.800
is more susceptible to the
disturbances in [INAUDIBLE]..

00:21:38.800 --> 00:21:42.195
So that's why [INAUDIBLE]
and also [INAUDIBLE]

00:21:42.195 --> 00:21:43.650
combined motion planning.

00:21:43.650 --> 00:21:48.500
Because what's
intuitive is not actual.

00:21:48.500 --> 00:21:51.750
So far it's all about
[INAUDIBLE] planning.

00:21:51.750 --> 00:21:54.412
So the [INAUDIBLE] everything
about the environment,

00:21:54.412 --> 00:21:56.340
like where the obstacles are.

00:21:56.340 --> 00:21:57.532
So that's not always true.

00:21:57.532 --> 00:21:58.484
[INAUDIBLE]

00:21:58.484 --> 00:22:00.864
So you don't always know all
the obstacles beforehand.

00:22:00.864 --> 00:22:04.672
You can't [INAUDIBLE]
as you [INAUDIBLE]..

00:22:04.672 --> 00:22:07.421
So one problem with
doing online planning,

00:22:07.421 --> 00:22:10.307
there is that you can not do
any expensive computations

00:22:10.307 --> 00:22:11.750
during runtime.

00:22:11.750 --> 00:22:14.636
And all of these funnels can be
places that are very expensive.

00:22:14.636 --> 00:22:16.560
[INAUDIBLE] solving an
optimization problem.

00:22:16.560 --> 00:22:19.450
It takes a couple of
hours to finish them.

00:22:19.450 --> 00:22:21.907
So you can not compute
funnels on the fly.

00:22:21.907 --> 00:22:24.950
So the idea here is that you
compute the funnels offline

00:22:24.950 --> 00:22:27.774
and do all possible funnels
from the start state

00:22:27.774 --> 00:22:31.968
to the end state, and then use
this library to [INAUDIBLE]..

00:22:31.968 --> 00:22:37.800
So you have the same [INAUDIBLE]
going from the start state

00:22:37.800 --> 00:22:40.240
[INAUDIBLE] the goal
state in the archives.

00:22:40.240 --> 00:22:43.204
So these are the set of
possible paths from start state

00:22:43.204 --> 00:22:44.310
to goal state.

00:22:44.310 --> 00:22:46.043
And then from each
possible trajectory,

00:22:46.043 --> 00:22:48.010
you compute the funnel.

00:22:48.010 --> 00:22:50.196
And the idea of
online planning is

00:22:50.196 --> 00:22:52.300
to now find the sequence
of these funnels

00:22:52.300 --> 00:22:55.266
that you can compose that
takes you from the start state

00:22:55.266 --> 00:22:59.210
to end state without hitting
any of the obstacles.

00:22:59.210 --> 00:23:02.168
So an important
component here is

00:23:02.168 --> 00:23:07.610
finding a sequential composition
of funnels [INAUDIBLE]..

00:23:07.610 --> 00:23:09.220
AUDIENCE: So why plan--

00:23:09.220 --> 00:23:11.350
you're doing a forward
search with funnels.

00:23:11.350 --> 00:23:14.310
Why use funnels instead
of something like RIT?

00:23:17.810 --> 00:23:23.310
PRESENTER 2: I actually
don't know what RITs are.

00:23:23.310 --> 00:23:25.138
AUDIENCE: Can I
guess at the answer?

00:23:25.138 --> 00:23:28.810
AUDIENCE: [INAUDIBLE] thing.

00:23:28.810 --> 00:23:31.706
AUDIENCE: Why use
funnels instead of RITs.

00:23:31.706 --> 00:23:33.819
AUDIENCE: Well, or why
use funnels as opposed

00:23:33.819 --> 00:23:34.527
to anything else.

00:23:34.527 --> 00:23:37.710
AUDIENCE: Well,
I guess RITs, you

00:23:37.710 --> 00:23:39.330
have like the classical
example, where

00:23:39.330 --> 00:23:41.580
you want to go through a very--

00:23:41.580 --> 00:23:45.820
well, if you want to go
through a very narrow region.

00:23:45.820 --> 00:23:47.696
Well, first of all,
I guess RITs are

00:23:47.696 --> 00:23:49.070
going to have a
hard time finding

00:23:49.070 --> 00:23:51.820
the narrow region because
you'd need like a point

00:23:51.820 --> 00:23:53.320
to go through that.

00:23:53.320 --> 00:23:56.830
And then, RITs by
themselves don't really

00:23:56.830 --> 00:24:02.208
account for errors,
maybe some extension.

00:24:02.208 --> 00:24:05.500
But funnels, you can be sure
that you're always going

00:24:05.500 --> 00:24:06.870
to stay inside the funnel.

00:24:06.870 --> 00:24:08.090
So this if for [INAUDIBLE].

00:24:08.090 --> 00:24:10.940
This is to make sure that we
don't crash into anything.

00:24:10.940 --> 00:24:12.932
Does that answer your question?

00:24:12.932 --> 00:24:14.390
AUDIENCE: Do you
want to answer it?

00:24:14.390 --> 00:24:19.870
AUDIENCE: Yeah, I think
what he just said, it's--

00:24:19.870 --> 00:24:23.450
the point of the funnels is that
they provide a control policy.

00:24:23.450 --> 00:24:26.920
The actual reference trajectory
that you have on the left

00:24:26.920 --> 00:24:28.690
is the motion planning.

00:24:28.690 --> 00:24:31.010
But with the funnels,
you get a control policy.

00:24:31.010 --> 00:24:33.000
Because when you start
executing a motion plan

00:24:33.000 --> 00:24:35.740
there's always going
to be a disturbance.

00:24:35.740 --> 00:24:38.000
So you want a
control policy that

00:24:38.000 --> 00:24:40.458
keeps you on that trajectory.

00:24:40.458 --> 00:24:43.115
And there's all sorts
of control policies.

00:24:43.115 --> 00:24:45.775
You could use simple
EID controllers.

00:24:45.775 --> 00:24:48.066
They work in some cases.

00:24:48.066 --> 00:24:49.855
But funnels provide
better guarantees

00:24:49.855 --> 00:24:51.643
for the power plants.

00:24:56.553 --> 00:24:59.008
PRESENTER 2: Yeah,
so the idea is

00:24:59.008 --> 00:25:01.454
that you have trajectory
[INAUDIBLE] funnels

00:25:01.454 --> 00:25:01.954
[INAUDIBLE].

00:25:01.954 --> 00:25:03.918
You're using this
funnels compliance.

00:25:03.918 --> 00:25:07.832
You compose them to find
your path to those presets

00:25:07.832 --> 00:25:09.760
that you wanted to go in.

00:25:13.616 --> 00:25:16.560
So you can not always
compose funnels.

00:25:16.560 --> 00:25:20.234
Some [INAUDIBLE] positions that
are legal, and some of those

00:25:20.234 --> 00:25:20.970
are not legal.

00:25:20.970 --> 00:25:25.380
So [INAUDIBLE] example, a
time going from left to right.

00:25:25.380 --> 00:25:28.774
So you have a situation
where there is a funnel.

00:25:28.774 --> 00:25:31.254
You're trying to compose a
bigger funnel with a smaller

00:25:31.254 --> 00:25:32.246
funnel.

00:25:32.246 --> 00:25:34.726
And you have another
situation where

00:25:34.726 --> 00:25:37.330
you're going to compose a
smaller funnel with a bigger

00:25:37.330 --> 00:25:38.710
funnel.

00:25:38.710 --> 00:25:41.520
So what if I would
have said, [INAUDIBLE]..

00:25:41.520 --> 00:25:43.770
So which of these
combinations do you

00:25:43.770 --> 00:25:47.422
think is a legal composition?

00:25:47.422 --> 00:25:48.414
[INAUDIBLE]

00:25:51.390 --> 00:25:54.862
Legal or illegal, I mean that
which of these [INAUDIBLE]

00:25:54.862 --> 00:25:58.334
do not receive the [INAUDIBLE]?

00:25:58.334 --> 00:25:59.822
AUDIENCE: The
bottom [INAUDIBLE]..

00:25:59.822 --> 00:26:01.155
PRESENTER 2: The bottom one is--

00:26:01.155 --> 00:26:03.390
AUDIENCE: --is actually
marked because--

00:26:03.390 --> 00:26:09.640
with the top one, if you're
at the very top [INAUDIBLE]..

00:26:09.640 --> 00:26:10.940
PRESENTER 2: Yeah, that's true.

00:26:10.940 --> 00:26:13.892
So the first one
is like illegal.

00:26:13.892 --> 00:26:16.352
And the second one is
a legal composition.

00:26:16.352 --> 00:26:18.545
So why is that?

00:26:18.545 --> 00:26:20.030
So if you are
inside this funnel,

00:26:20.030 --> 00:26:23.572
what this guarantees that you
will stay inside the funnel.

00:26:23.572 --> 00:26:26.654
But it could happen that you
can go through the funnel

00:26:26.654 --> 00:26:28.598
and make your outside
[INAUDIBLE] funnel.

00:26:28.598 --> 00:26:32.486
And after this step,
you can go anywhere.

00:26:32.486 --> 00:26:35.888
So you can [INAUDIBLE].

00:26:35.888 --> 00:26:38.318
But if you're inside
the second case,

00:26:38.318 --> 00:26:40.852
after you're through
the first part,

00:26:40.852 --> 00:26:42.310
you're still set
at the second part

00:26:42.310 --> 00:26:43.601
then we can decide [INAUDIBLE].

00:26:48.720 --> 00:26:51.666
So now let's actually look
at those online planning

00:26:51.666 --> 00:26:53.139
algorithms.

00:26:53.139 --> 00:26:56.576
So this the case of your
planning [INAUDIBLE]..

00:26:56.576 --> 00:26:59.031
First you can [INAUDIBLE]
with quantum's chronicles.

00:26:59.031 --> 00:27:00.995
It makes our analysis easier.

00:27:03.941 --> 00:27:06.912
So this is the algorithm that's
going through each of the steps

00:27:06.912 --> 00:27:08.400
one-by-one.

00:27:08.400 --> 00:27:10.384
So this is online planning.

00:27:10.384 --> 00:27:12.864
You will always one
information beforehand.

00:27:12.864 --> 00:27:14.848
[INAUDIBLE]

00:27:14.848 --> 00:27:17.824
And you get to know
more about it as we go.

00:27:17.824 --> 00:27:21.792
But you still have the initial
planned funnel sequence

00:27:21.792 --> 00:27:24.272
that takes you from the
start state to goal state.

00:27:24.272 --> 00:27:29.232
And then you check for any
new obstacles information

00:27:29.232 --> 00:27:31.216
when you go out from the sensor.

00:27:31.216 --> 00:27:36.176
So this is the region that
you can sense some obstacles.

00:27:36.176 --> 00:27:38.676
And you also get the
current state of your robot.

00:27:38.676 --> 00:27:41.574
This is also something
concern [INAUDIBLE]..

00:27:45.430 --> 00:27:47.358
And you check if your
current funnel path

00:27:47.358 --> 00:27:50.250
collides with any of the
obstacles you have seen so far.

00:27:50.250 --> 00:27:52.670
And in this case,
the answer is no.

00:27:52.670 --> 00:27:56.742
So then you apply the
control corresponding

00:27:56.742 --> 00:28:00.200
to this funnel for this
[INAUDIBLE] location and time.

00:28:00.200 --> 00:28:04.152
That take your one
[INAUDIBLE] problem.

00:28:04.152 --> 00:28:07.610
Then you put Goto and then
do this again and again.

00:28:07.610 --> 00:28:10.521
So [INAUDIBLE] update
from certain information.

00:28:10.521 --> 00:28:11.562
And one obstacle is here.

00:28:11.562 --> 00:28:14.032
You can differentiate
the other one.

00:28:14.032 --> 00:28:16.255
When we check at
the Replan collides

00:28:16.255 --> 00:28:19.960
with any of the obstacles--
in this case, yes.

00:28:19.960 --> 00:28:21.936
So since it collides
with the obstacles,

00:28:21.936 --> 00:28:23.912
you need to [INAUDIBLE] funnels.

00:28:23.912 --> 00:28:26.390
So how do you delete funnels?

00:28:26.390 --> 00:28:27.875
You have all this
library funnels.

00:28:27.875 --> 00:28:30.310
So you go to each of
them, and then you

00:28:30.310 --> 00:28:36.610
find one set of
funnels that has--

00:28:36.610 --> 00:28:38.602
you find a set of
funnels that starts

00:28:38.602 --> 00:28:42.761
with your current location and
[INAUDIBLE] of the obstacles.

00:28:42.761 --> 00:28:49.248
So this was a point, first of
all, of a new funnel sequence.

00:28:49.248 --> 00:28:51.743
And then, again,
you apply controls

00:28:51.743 --> 00:28:54.238
corresponding to
the new sequence

00:28:54.238 --> 00:28:59.727
and doing it two dimensional
[INAUDIBLE],, In the position,

00:28:59.727 --> 00:29:02.721
if it collides,
and again collides,

00:29:02.721 --> 00:29:07.212
so you redirect
[INAUDIBLE] apply

00:29:07.212 --> 00:29:09.707
the control for that funnel.

00:29:09.707 --> 00:29:11.703
And get a full solution.

00:29:11.703 --> 00:29:16.194
And then it collides, so you
have to replan that part.

00:29:16.194 --> 00:29:18.689
Then you're OK.

00:29:18.689 --> 00:29:20.685
So now you reached the goal.

00:29:20.685 --> 00:29:26.426
So those are the planning
plan using funnel libraries.

00:29:26.426 --> 00:29:28.911
And questions about it?

00:29:28.911 --> 00:29:31.450
AUDIENCE: Can you say
more about the connotation

00:29:31.450 --> 00:29:32.760
of the funnel libraries?

00:29:32.760 --> 00:29:35.740
So they generate a
set of funnels, which

00:29:35.740 --> 00:29:39.320
covered the complete set space?

00:29:39.320 --> 00:29:42.150
PRESENTER 2: Yeah,
so that's like--

00:29:42.150 --> 00:29:47.200
there's every possible
[INAUDIBLE] end point.

00:29:47.200 --> 00:29:50.560
And so then you can
make [INAUDIBLE]

00:29:50.560 --> 00:29:53.440
or least, have it for
every initial [INAUDIBLE]

00:29:53.440 --> 00:29:55.840
you can compose all
these [INAUDIBLE]..

00:29:55.840 --> 00:30:00.270
So if you're doing it for
every initial [INAUDIBLE]..

00:30:00.270 --> 00:30:02.442
So you might have a
funnel that exactly starts

00:30:02.442 --> 00:30:03.775
at your initial position.

00:30:03.775 --> 00:30:05.941
If there is a funnel that
already started somewhere,

00:30:05.941 --> 00:30:08.376
where it goes through
the funnel-- goes

00:30:08.376 --> 00:30:10.324
through your initial
funnel, you can use that.

00:30:10.324 --> 00:30:14.220
So it's a truncation
of your funnel.

00:30:14.220 --> 00:30:17.629
[INAUDIBLE]

00:30:17.629 --> 00:30:19.090
Any other questions?

00:30:22.500 --> 00:30:25.180
AUDIENCE: Why can't you use--

00:30:25.180 --> 00:30:28.102
if it really is
an online problem

00:30:28.102 --> 00:30:31.040
that you're not going
to run out of a funnel,

00:30:31.040 --> 00:30:34.215
that you won't reach a dead
end, will it be adaptable enough

00:30:34.215 --> 00:30:37.480
to make a U-turn at
all times, either

00:30:37.480 --> 00:30:41.550
that there's come latency
that would perfectly time it.

00:30:41.550 --> 00:30:44.360
And the robustness, that you'll
always be able to find a path,

00:30:44.360 --> 00:30:46.234
even if we have guarantees
that you'll always

00:30:46.234 --> 00:30:48.932
stay within a funnel.

00:30:48.932 --> 00:30:51.267
PRESENTER 2: So are you
asking what the situation,

00:30:51.267 --> 00:30:54.882
like the funnel, if you're
going [INAUDIBLE] backtrack?

00:30:54.882 --> 00:30:57.090
AUDIENCE: Yeah, just because
these obstacles come out

00:30:57.090 --> 00:31:00.800
of nowhere, seemingly, that
you don't have a guaranteed

00:31:00.800 --> 00:31:03.246
that the funnel is safe
through the entire duration

00:31:03.246 --> 00:31:07.060
of our execution.

00:31:07.060 --> 00:31:10.766
PRESENTER 2: Yeah, so
that's a valid point.

00:31:10.766 --> 00:31:15.050
[INAUDIBLE] you can use the
adaptive [INAUDIBLE] backtrack

00:31:15.050 --> 00:31:18.860
[INAUDIBLE] combined
with the [INAUDIBLE]..

00:31:18.860 --> 00:31:22.360
AUDIENCE: Even if the robots
can't actually backtrack?

00:31:22.360 --> 00:31:24.100
PRESENTER 2: If the
robots can what?

00:31:24.100 --> 00:31:25.535
Come back, or--

00:31:25.535 --> 00:31:27.535
AUDIENCE: I mean, I guess,
it's just like a UAB,

00:31:27.535 --> 00:31:29.710
it couldn't do that.

00:31:29.710 --> 00:31:34.296
I'm just saying, what guarantees
do you need to have about

00:31:34.296 --> 00:31:38.305
the obstacles , since it's
an online setup, right?

00:31:38.305 --> 00:31:40.554
PRESENTER 2: Maybe you'd
have some initial information

00:31:40.554 --> 00:31:42.989
about some kind of obstacles.

00:31:42.989 --> 00:31:45.424
You can find a
[INAUDIBLE] trajectory--

00:31:45.424 --> 00:31:48.050
you can find a trajectory that
goes from the start sequence.

00:31:48.050 --> 00:31:49.296
It's like [INAUDIBLE].

00:31:53.264 --> 00:31:55.690
AUDIENCE: Well, I'm
just going to say.

00:31:55.690 --> 00:31:58.592
If you're in some kind of
glider that can't necessarily--

00:31:58.592 --> 00:32:00.640
like a quart of
stop, go backwards,

00:32:00.640 --> 00:32:02.480
stuff like that,
depending on how funnels

00:32:02.480 --> 00:32:04.055
you can plan backwards.

00:32:04.055 --> 00:32:06.179
But if you're in some kind
of glider going straight

00:32:06.179 --> 00:32:07.564
at a wall, there's no guarantee.

00:32:07.564 --> 00:32:10.510
You're just screwed up.

00:32:10.510 --> 00:32:12.560
I mean, even humans,
they make errors.

00:32:12.560 --> 00:32:15.930
There's situations that humans
can't dynamically get out of.

00:32:15.930 --> 00:32:17.770
So if your system
is dynamically not

00:32:17.770 --> 00:32:20.110
going to be able to
make a sharp enough turn

00:32:20.110 --> 00:32:22.394
or go straight into
something, no matter

00:32:22.394 --> 00:32:23.935
how smart your
planning algorithm is,

00:32:23.935 --> 00:32:25.901
no matter if you're like,
there's a wall right there.

00:32:25.901 --> 00:32:26.620
Stop.

00:32:26.620 --> 00:32:29.608
If you can't stop, and you
just go straight at it.

00:32:29.608 --> 00:32:31.268
There's obviously
situations where

00:32:31.268 --> 00:32:33.592
you can pretty much [INAUDIBLE]
algorithm [INAUDIBLE]..

00:32:33.592 --> 00:32:34.717
You're just going to crash.

00:32:34.717 --> 00:32:40.170
Hopefully you're in a situation
where you're not [INAUDIBLE]..

00:32:40.170 --> 00:32:43.570
It's also based on how far
away your sets are received.

00:32:43.570 --> 00:32:45.720
Your sensor can only
see 5 meters ahead,

00:32:45.720 --> 00:32:49.050
and you're going 5 meters
per second, [INAUDIBLE]..

00:32:49.050 --> 00:32:50.941
You're going to have
make perfect decisions.

00:32:50.941 --> 00:32:53.150
But if your sensor has
perfect information

00:32:53.150 --> 00:32:56.410
about the environment, then
what seems like the initial best

00:32:56.410 --> 00:33:00.225
path may not actually be once
you know the full [INAUDIBLE]..

00:33:00.225 --> 00:33:05.582
So it depends on the
[INAUDIBLE] sensors.

00:33:05.582 --> 00:33:09.965
PRESENTER 2: Any
other questions?

00:33:09.965 --> 00:33:14.748
OK, so finally I have some
demos showing simulations

00:33:14.748 --> 00:33:18.716
of [INAUDIBLE].

00:33:18.716 --> 00:33:20.700
Let's see how [INAUDIBLE].

00:33:31.116 --> 00:33:33.100
So the [INAUDIBLE] applications.

00:33:33.100 --> 00:33:38.610
So we have seen
how to use funnels

00:33:38.610 --> 00:33:40.660
to do robust motion planning.

00:33:40.660 --> 00:33:42.818
We also have the
offline planning

00:33:42.818 --> 00:33:45.805
and come to do online planning
using a sequence funnels

00:33:45.805 --> 00:33:48.010
and the funnel libraries.

00:33:48.010 --> 00:33:51.930
I will talk more about computing
these funnels and flow tubes

00:33:51.930 --> 00:33:53.890
and other kind of reach sets.

00:34:05.929 --> 00:34:07.554
PRESENTER 3: Yeah,
so I'm going to talk

00:34:07.554 --> 00:34:10.475
about how to actually
compute flow tubes

00:34:10.475 --> 00:34:11.949
and funnels generally.

00:34:11.949 --> 00:34:15.999
I'm going to give an example
of what each one is used for.

00:34:15.999 --> 00:34:18.540
So we had the question before,
how are flow tubes and funnels

00:34:18.540 --> 00:34:19.950
different?

00:34:19.950 --> 00:34:27.800
Flow tubes are--
so easiest way is

00:34:27.800 --> 00:34:31.442
they're both some kind of way
to guarantee that you're going

00:34:31.442 --> 00:34:34.389
to-- the robustness guarantees.

00:34:34.389 --> 00:34:37.190
So say you are here.

00:34:37.190 --> 00:34:39.150
You want to be here.

00:34:39.150 --> 00:34:41.909
They're both going to-- in
most planning algorithms,

00:34:41.909 --> 00:34:44.070
you've got some kind of
path from here to here.

00:34:44.070 --> 00:34:46.199
But say there's some
disturbance [INAUDIBLE]

00:34:46.199 --> 00:34:47.960
down here or something.

00:34:47.960 --> 00:34:49.655
You don't know if
you're going to be

00:34:49.655 --> 00:34:50.780
able to reach there or not.

00:34:50.780 --> 00:34:53.570
What a flow tube is
is it's some kind

00:34:53.570 --> 00:34:57.980
of set of trajectories
that will basically

00:34:57.980 --> 00:35:01.680
go from some initial
state, which are here,

00:35:01.680 --> 00:35:03.990
to some goal states over here.

00:35:03.990 --> 00:35:06.540
And basically, [INAUDIBLE] if
you're within this flow tube,

00:35:06.540 --> 00:35:09.090
and you get pushed out on
a different trajectory,

00:35:09.090 --> 00:35:11.030
you know how to get from
here to here anyway.

00:35:11.030 --> 00:35:12.780
So you don't really
care if you're pushed,

00:35:12.780 --> 00:35:14.440
as long as you're
still within here.

00:35:14.440 --> 00:35:16.293
A funnel-- let's see.

00:35:21.950 --> 00:35:26.300
So a funnel is, say you
compute some nominal trajectory

00:35:26.300 --> 00:35:28.000
around here.

00:35:28.000 --> 00:35:31.194
Using the system theory
and stability theory,

00:35:31.194 --> 00:35:34.410
you know that, with
your control inputs,

00:35:34.410 --> 00:35:37.664
you're going to stay at
each of these points.

00:35:37.664 --> 00:35:40.545
And you're going to stay within
here within these circles.

00:35:40.545 --> 00:35:41.962
So if you get
pushed out here, you

00:35:41.962 --> 00:35:44.253
know you're going to be able
to get back onto your path

00:35:44.253 --> 00:35:46.119
when you're going to
try to converge back

00:35:46.119 --> 00:35:47.394
to your nominal path.

00:35:47.394 --> 00:35:50.740
So you have some sort of funnel.

00:35:50.740 --> 00:35:52.874
Yes?

00:35:52.874 --> 00:35:54.040
AUDIENCE: I have a question.

00:35:54.040 --> 00:35:55.770
How complete is the funnel?

00:35:55.770 --> 00:35:59.310
It sort of related to
what Brian was saying.

00:35:59.310 --> 00:36:02.370
PRESENTER 3: Completeness
as in like these edges are--

00:36:02.370 --> 00:36:05.110
AUDIENCE: Well, if you have a
high dimensional state space,

00:36:05.110 --> 00:36:09.170
does the funnel
cover it completely?

00:36:09.170 --> 00:36:10.950
AUDIENCE: There's
a set of funnels.

00:36:10.950 --> 00:36:12.604
PRESENTER 3: A set of funnels--

00:36:12.604 --> 00:36:15.270
AUDIENCE: So the question wasn't
about if the individual funnel,

00:36:15.270 --> 00:36:19.150
but in the particular
[INAUDIBLE]..

00:36:19.150 --> 00:36:21.740
When he generates
a set of funnels,

00:36:21.740 --> 00:36:25.316
does the set of funnels
completely cover the space?

00:36:25.316 --> 00:36:27.233
PRESENTER 3: It depends
how much time you

00:36:27.233 --> 00:36:29.640
want to put into it, generally.

00:36:29.640 --> 00:36:33.240
If you only compute two funnels,
one of them goes over here

00:36:33.240 --> 00:36:35.426
and one of them goes here,
then you're not you're

00:36:35.426 --> 00:36:37.320
not going to be covered
in these states.

00:36:37.320 --> 00:36:39.830
So it depends on how
much computation you

00:36:39.830 --> 00:36:41.846
want to do offline previously.

00:36:41.846 --> 00:36:43.520
So you get a set of
funnels that's here,

00:36:43.520 --> 00:36:45.830
another one that's right
here, another one that's here.

00:36:45.830 --> 00:36:47.740
And you have your big
library of funnels

00:36:47.740 --> 00:36:49.180
that cover the whole space.

00:36:49.180 --> 00:36:51.880
AUDIENCE: I think I
skimmed that paper.

00:36:51.880 --> 00:36:55.016
And, yeah, I think it is
probabilistically [INAUDIBLE]..

00:36:55.016 --> 00:36:56.824
PRESENTER 3: OK, yeah.

00:36:56.824 --> 00:37:00.150
All right, yeah, but I
mean, as far as computing

00:37:00.150 --> 00:37:03.918
where you're going to go, if
you compute that path of it,

00:37:03.918 --> 00:37:04.750
you should be good.

00:37:04.750 --> 00:37:05.888
But yes, you're right.

00:37:05.888 --> 00:37:09.600
The probabilistically--

00:37:09.600 --> 00:37:11.860
So here is what I explained.

00:37:11.860 --> 00:37:13.736
Normally you have your
optimal trajectory.

00:37:13.736 --> 00:37:15.235
But if you get
pushed off of it, you

00:37:15.235 --> 00:37:16.870
may not get back
to the goal state.

00:37:16.870 --> 00:37:20.162
But if you have a
set of trajectories

00:37:20.162 --> 00:37:22.354
that go from some initial
states to your goal state,

00:37:22.354 --> 00:37:23.770
and you stay within
that, you know

00:37:23.770 --> 00:37:29.720
how to get to your goal
state, even if you get pushed.

00:37:29.720 --> 00:37:31.960
Again, so some ways to
approximate flow tubes,

00:37:31.960 --> 00:37:33.930
you can use some
kind of polytope,

00:37:33.930 --> 00:37:36.650
which is as Gabriel
explained previously,

00:37:36.650 --> 00:37:39.440
as long as it's a
convex polytope,

00:37:39.440 --> 00:37:41.720
you can take that
cross-sectional area

00:37:41.720 --> 00:37:44.780
and you can propagate it
down here for the tube.

00:37:44.780 --> 00:37:51.678
You can also use ellipsoids or
rectangles as cross-sections.

00:37:51.678 --> 00:37:54.500
And important point is
to know that they're

00:37:54.500 --> 00:37:56.480
intercross-sectional
approximations.

00:37:56.480 --> 00:37:58.730
So as you see here, you may--

00:37:58.730 --> 00:38:00.720
this would be your
actually flow tube.

00:38:00.720 --> 00:38:02.770
But your approximation
has to be an inter one,

00:38:02.770 --> 00:38:04.685
because that guarantees that
you're with a flow tube.

00:38:04.685 --> 00:38:07.226
But it means you may also miss
some of the outer trajectories

00:38:07.226 --> 00:38:11.264
, which also, if you want
to compute a more thorough

00:38:11.264 --> 00:38:13.216
approximation area you
get better flow tube

00:38:13.216 --> 00:38:16.144
representation.

00:38:16.144 --> 00:38:22.450
OK, so robust planning, you plan
a trajectory from here to here,

00:38:22.450 --> 00:38:25.740
and that should be good.

00:38:25.740 --> 00:38:27.182
But then you get disturbed.

00:38:27.182 --> 00:38:28.640
You're still within
the trajectory,

00:38:28.640 --> 00:38:30.466
so you're still good.

00:38:30.466 --> 00:38:34.680
But some work done by
Professor Williams and Hoffman

00:38:34.680 --> 00:38:35.760
shows that--

00:38:35.760 --> 00:38:40.660
so what do you do when you're
actually outside of the flow?

00:38:40.660 --> 00:38:43.380
Now what you can do
is temporal planning.

00:38:43.380 --> 00:38:45.407
So we're using the
algorithm that we previously

00:38:45.407 --> 00:38:46.360
learned in class.

00:38:46.360 --> 00:38:51.260
You can take your goal state
and move the timeline back

00:38:51.260 --> 00:38:52.830
to a different time.

00:38:52.830 --> 00:38:56.950
So here, this flow
tube is, if you're here

00:38:56.950 --> 00:39:00.010
in a certain amount of
time, can you get to here?

00:39:00.010 --> 00:39:03.450
And if you get outside of it,
then you can't do that anymore.

00:39:03.450 --> 00:39:05.670
But you can just
use our algorithm

00:39:05.670 --> 00:39:08.819
and move back the goal time.

00:39:08.819 --> 00:39:10.360
And then when you
move the goal time,

00:39:10.360 --> 00:39:12.980
the whole funnel shifts
because now you're

00:39:12.980 --> 00:39:14.280
going to be over here.

00:39:14.280 --> 00:39:16.635
And you don't care about
getting here at this time.

00:39:16.635 --> 00:39:18.810
You can here at this time now.

00:39:18.810 --> 00:39:20.510
So then you move over.

00:39:20.510 --> 00:39:23.290
And now where you,
you get back into it

00:39:23.290 --> 00:39:25.206
because you're now inside
the flow tube again.

00:39:27.978 --> 00:39:31.470
OK, so one example is a
humanoid footstep planning.

00:39:31.470 --> 00:39:32.925
So this take a complex systems.

00:39:32.925 --> 00:39:35.250
You have a bunch of different
parts of the system.

00:39:35.250 --> 00:39:37.000
You have your center
of mass dynamics.

00:39:37.000 --> 00:39:40.090
You have your leg
dynamics, foot dynamics.

00:39:40.090 --> 00:39:44.700
So what you're trying to do
is plan your footsteps forward

00:39:44.700 --> 00:39:46.340
and through time.

00:39:46.340 --> 00:39:48.030
So you have your
original plan of where

00:39:48.030 --> 00:39:50.800
you want your footsteps
to be for different parts.

00:39:50.800 --> 00:39:54.820
So there's discrete things
that happen in the system,

00:39:54.820 --> 00:39:57.660
as we've previously
seen in a lecture.

00:39:57.660 --> 00:40:01.320
So one thing that can happen is
your left foot hits the ground,

00:40:01.320 --> 00:40:02.993
and then your right
foot lifts off.

00:40:02.993 --> 00:40:04.951
You're left foot lifts
off-- or your right foot

00:40:04.951 --> 00:40:06.915
hits the ground, and then
your left foot lifts off.

00:40:06.915 --> 00:40:08.831
So those are different
things that can happen.

00:40:08.831 --> 00:40:12.510
So you have certain
temporal constraints

00:40:12.510 --> 00:40:15.550
on the system that you
want to [INAUDIBLE] by.

00:40:15.550 --> 00:40:20.480
And so as you
start planning, you

00:40:20.480 --> 00:40:23.680
have flow tubes to get you
from one step to another step.

00:40:23.680 --> 00:40:27.290
And that guarantees that you're
going to stay within those.

00:40:27.290 --> 00:40:29.112
Even if you get
disturbed and get pushed,

00:40:29.112 --> 00:40:32.510
your feet can still get
from one step to the other.

00:40:32.510 --> 00:40:34.110
But then also, with
the thing that we

00:40:34.110 --> 00:40:37.630
saw in the previous slide,
you can move the timeline

00:40:37.630 --> 00:40:39.540
back and forth,
as long as you're

00:40:39.540 --> 00:40:43.860
withing your temporal
constraints that you had.

00:40:43.860 --> 00:40:46.260
So those are flow
tubes for the feet.

00:40:46.260 --> 00:40:47.884
And that would
guarantee that your feet

00:40:47.884 --> 00:40:49.980
go where they want to.

00:40:49.980 --> 00:40:52.050
But you can decompose
the system to also

00:40:52.050 --> 00:40:54.210
have flow tubes for
the center of mass.

00:40:54.210 --> 00:40:55.870
So what the center
of mass does is

00:40:55.870 --> 00:41:00.220
to be broken down into
separate flow tubes.

00:41:00.220 --> 00:41:02.180
So does that make sense?

00:41:05.610 --> 00:41:08.040
So this is the humanoid
footstep planning

00:41:08.040 --> 00:41:09.320
that we saw previously.

00:41:09.320 --> 00:41:10.736
And now you're
going to understand

00:41:10.736 --> 00:41:13.080
how the feet are planned to
go to each of the blocks.

00:41:13.080 --> 00:41:17.412
[INAUDIBLE] go video.

00:41:17.412 --> 00:41:18.900
AUDIENCE: I have
a quick question.

00:41:18.900 --> 00:41:20.610
You said that you
have a separate flow

00:41:20.610 --> 00:41:21.776
tube for the center of mass.

00:41:21.776 --> 00:41:24.335
But aren't they really
just the same flow tube,

00:41:24.335 --> 00:41:25.630
like a high dimensional--

00:41:25.630 --> 00:41:28.010
PRESENTER 3: Yes, but that's--
when you decompose this

00:41:28.010 --> 00:41:31.387
and then you [INAUDIBLE] flow
tube rather than a full system

00:41:31.387 --> 00:41:32.220
high dimensionality.

00:41:32.220 --> 00:41:35.392
AUDIENCE: Is it hard
to recouple them?

00:41:35.392 --> 00:41:38.062
How do you know that they're
consistent [INAUDIBLE]??

00:41:38.062 --> 00:41:39.520
PRESENTER 3: Well,
it still adheres

00:41:39.520 --> 00:41:40.860
to the dynamics of the system.

00:41:40.860 --> 00:41:45.355
So you can couple how you
want, how you want it to move.

00:41:45.355 --> 00:41:47.350
And you want to move
any basic constraints.

00:41:47.350 --> 00:41:50.059
But eventually, as you said,
when you move your feet,

00:41:50.059 --> 00:41:51.600
your center of mass
is going to move.

00:41:51.600 --> 00:41:53.320
When you step forward,
you're center of mass

00:41:53.320 --> 00:41:54.070
is going to move.

00:41:54.070 --> 00:41:58.200
[INAUDIBLE] analysis of it.

00:41:58.200 --> 00:42:00.661
AUDIENCE: Can I make
a comment about that?

00:42:00.661 --> 00:42:04.950
Yeah, there's a technique called
feedback linearization that

00:42:04.950 --> 00:42:09.460
can be used to decompose a
complex non-linear dynamics

00:42:09.460 --> 00:42:12.750
assuming to the
set of linear ones.

00:42:12.750 --> 00:42:16.330
And that allows you to
treat the center of mass

00:42:16.330 --> 00:42:20.500
as a [INAUDIBLE] separately
from a control in the flow tube

00:42:20.500 --> 00:42:24.370
computations and while
guaranteeing that [INAUDIBLE]..

00:42:27.280 --> 00:42:28.735
PRESENTER 3: So
this is work done

00:42:28.735 --> 00:42:31.160
by Professor Williams
experiment, which is actually

00:42:31.160 --> 00:42:34.070
[INAUDIBLE].

00:42:34.070 --> 00:42:39.253
This is the robot doing the
same kind of thing on Mars.

00:42:43.090 --> 00:42:46.230
This is walking on stones
and planning its footsteps

00:42:46.230 --> 00:42:50.110
through a pretty
complicated environment.

00:42:50.110 --> 00:42:52.231
The stones are not
exactly in the path

00:42:52.231 --> 00:42:53.814
where you would
normally want to walk.

00:42:53.814 --> 00:42:58.081
But moving them around, as long
as you're within the flow tube,

00:42:58.081 --> 00:43:13.510
you'll get to wherever
[INAUDIBLE] Awesome.

00:43:13.510 --> 00:43:17.772
So that was how to compute
flow tubes and-- oh,

00:43:17.772 --> 00:43:19.980
and another way you can
also compute flow tubes

00:43:19.980 --> 00:43:21.270
is by learning.

00:43:21.270 --> 00:43:23.910
So you can have some
kind of example,

00:43:23.910 --> 00:43:27.150
move through trajectories
from one state to the other.

00:43:27.150 --> 00:43:29.942
And you can estimate
a flow tube based

00:43:29.942 --> 00:43:32.025
on where the trajectories
are, as long as the flow

00:43:32.025 --> 00:43:37.660
tube encompasses all the
possible trajectories.

00:43:37.660 --> 00:43:40.056
AUDIENCE: Is the
dynamics always linear?

00:43:40.056 --> 00:43:43.330
Because I though
if your polytope,

00:43:43.330 --> 00:43:45.970
and it would be like kind of,
is it a complex proposal when

00:43:45.970 --> 00:43:48.127
you would use a
non-linear dynamic,

00:43:48.127 --> 00:43:49.528
then you move a little bit.

00:43:49.528 --> 00:43:53.057
Then you would move a little
bit, not being the convex shape

00:43:53.057 --> 00:43:54.020
then.

00:43:54.020 --> 00:43:57.150
PRESENTER 3: I mean, you can
plan non-linear systems too.

00:43:57.150 --> 00:43:59.320
But as far as I'm
concerned, [INAUDIBLE]..

00:44:03.550 --> 00:44:07.300
AUDIENCE: So,
yeah, the polytopes

00:44:07.300 --> 00:44:10.200
generally require
linearization with the system.

00:44:10.200 --> 00:44:14.760
And there's a limit to the
validity of the-- the range

00:44:14.760 --> 00:44:16.580
of the linearization.

00:44:16.580 --> 00:44:18.651
And that's concluded in--

00:44:18.651 --> 00:44:20.151
that's one of the
things that limits

00:44:20.151 --> 00:44:23.050
the size of the polytopes.

00:44:23.050 --> 00:44:24.300
AUDIENCE: But it is the case--

00:44:24.300 --> 00:44:25.450
I mean, you've just
got to understand.

00:44:25.450 --> 00:44:27.324
The thing that you do
for non-linear systems,

00:44:27.324 --> 00:44:29.850
which is a piece-- if you're
making a piece-wise linear,

00:44:29.850 --> 00:44:31.030
but you are--

00:44:31.030 --> 00:44:33.249
you are linearizing
them at the w step.

00:44:33.249 --> 00:44:34.915
And there's other
techniques that people

00:44:34.915 --> 00:44:39.012
have developed with flow tubes
where you do require the input

00:44:39.012 --> 00:44:40.120
system to be linear.

00:44:40.120 --> 00:44:41.453
Right here it can be non-linear.

00:44:41.453 --> 00:44:43.922
But... it's an approximation.

00:44:49.240 --> 00:44:51.230
PRESENTER 3: OK, so
funnels, the goal

00:44:51.230 --> 00:44:54.015
is basically to find a region
that guarantees you safety

00:44:54.015 --> 00:44:57.370
on a bounded uncertainty.

00:44:57.370 --> 00:45:00.090
So there are regions
of finite time variance

00:45:00.090 --> 00:45:03.550
throughout all time during that
trajectory that you've defined.

00:45:03.550 --> 00:45:07.986
And so in practice, there's a
trade-off between computation

00:45:07.986 --> 00:45:09.850
time and guarantees.

00:45:09.850 --> 00:45:12.600
So if your trajectory, if
you compute more nodes,

00:45:12.600 --> 00:45:15.111
then you're going to be able
to fill in these little gaps

00:45:15.111 --> 00:45:17.416
between each of the ellipsoid.

00:45:17.416 --> 00:45:19.280
Whereas, if you
lessen them, it's

00:45:19.280 --> 00:45:22.070
going to take less time
to compute each ellipsoid.

00:45:22.070 --> 00:45:25.940
But it's also going to
not be as guaranteed.

00:45:25.940 --> 00:45:27.737
And especially
important when planning

00:45:27.737 --> 00:45:30.070
is that, if you're planning
in some kind of point cloud,

00:45:30.070 --> 00:45:34.240
then some of the points may be
right here, where one ellipsoid

00:45:34.240 --> 00:45:35.830
doesn't intersect the other.

00:45:35.830 --> 00:45:38.710
And you might think that's a
safe path, when actually it's

00:45:38.710 --> 00:45:39.640
not at all.

00:45:43.360 --> 00:45:46.380
Yeah, so an example
is this little glider,

00:45:46.380 --> 00:45:49.650
which is given in the
paper by Anirudha and Russ.

00:45:49.650 --> 00:45:56.640
And so what you start doing
is you create your system,

00:45:56.640 --> 00:45:57.720
your function.

00:45:57.720 --> 00:45:59.752
And this is dependent
on your state, time,

00:45:59.752 --> 00:46:03.310
and w, which is some kind
of bounded uncertainty.

00:46:03.310 --> 00:46:06.030
And you choose the
bounded uncertainty,

00:46:06.030 --> 00:46:11.820
which means that you choose
some kind of reasonable estimate

00:46:11.820 --> 00:46:14.820
of how much can
happen to your system

00:46:14.820 --> 00:46:17.430
that you didn't account for.

00:46:17.430 --> 00:46:19.510
So you start it.

00:46:19.510 --> 00:46:21.900
Your velocity can be
different from what you want.

00:46:21.900 --> 00:46:24.650
Say your nominal velocity
is 10 meters per second.

00:46:24.650 --> 00:46:26.839
You can have some
kind of drag, or you

00:46:26.839 --> 00:46:29.170
can have some inconsistency
in your motors.

00:46:29.170 --> 00:46:31.800
And so what you
expect is that there's

00:46:31.800 --> 00:46:36.340
a plus or minus 0.5 meters
per second to your nominal.

00:46:36.340 --> 00:46:39.460
So when you start
running your equations,

00:46:39.460 --> 00:46:41.810
this is what you expect
your robot to do.

00:46:41.810 --> 00:46:44.666
And then that can vary forward
and backwards depending

00:46:44.666 --> 00:46:46.520
on what your actual was.

00:46:46.520 --> 00:46:50.284
But then you add some kind of
wind on your system, which--

00:46:50.284 --> 00:46:52.200
some kind of cross-sectional
wind, [INAUDIBLE]

00:46:52.200 --> 00:46:55.301
direction, which we see there.

00:46:55.301 --> 00:46:58.690
And so what that ends
up doing is pushing you

00:46:58.690 --> 00:47:01.335
system away from where you
want it to actually be.

00:47:01.335 --> 00:47:06.010
So now you have some kind
of velocity uncertainty.

00:47:06.010 --> 00:47:10.820
And you also have wind that can
push you one way or the other.

00:47:10.820 --> 00:47:14.237
So how do you deal with that?

00:47:14.237 --> 00:47:16.070
Well, you start with
your nominal trajectory

00:47:16.070 --> 00:47:19.622
that has a plane flying
perfectly straight.

00:47:19.622 --> 00:47:20.580
There's no uncertainty.

00:47:20.580 --> 00:47:22.360
Everything is deterministic.

00:47:22.360 --> 00:47:23.940
And it acts like you want it to.

00:47:27.500 --> 00:47:31.120
And then, so right
there the wind hits it.

00:47:31.120 --> 00:47:32.200
So what do you do?

00:47:32.200 --> 00:47:35.380
You have to have
some kind of control,

00:47:35.380 --> 00:47:37.150
some kind of controller
to bring you back

00:47:37.150 --> 00:47:39.750
to your nominal trajectory
and try to control you

00:47:39.750 --> 00:47:41.090
around the system.

00:47:41.090 --> 00:47:46.350
So a standard way to do that
is to have a cause function

00:47:46.350 --> 00:47:49.390
and create your
optimal trajectory.

00:47:49.390 --> 00:47:52.320
And this cause
function basically,

00:47:52.320 --> 00:47:56.520
it kind of mirrors
a LQR controller.

00:47:56.520 --> 00:47:58.696
And by solving a lot of
these equations, which

00:47:58.696 --> 00:48:02.260
is a pretty standard process,
and to find out how to do that,

00:48:02.260 --> 00:48:05.390
you get a controller that
tried to bring you back

00:48:05.390 --> 00:48:06.737
to your nominal trajectory.

00:48:06.737 --> 00:48:09.719
And so you get back.

00:48:09.719 --> 00:48:11.210
You're happy.

00:48:11.210 --> 00:48:13.089
But you don't have
any guarantees

00:48:13.089 --> 00:48:14.130
just with the controller.

00:48:14.130 --> 00:48:16.640
You don't have any guarantees
on how far you can get pushed.

00:48:16.640 --> 00:48:19.230
You don't have any guarantees
on where you're going to go

00:48:19.230 --> 00:48:21.910
and where your system
really can be pushed.

00:48:25.170 --> 00:48:28.630
So when you compute
the funnel, what you do

00:48:28.630 --> 00:48:30.695
is you choose a
Lyapunov function.

00:48:30.695 --> 00:48:34.844
And I'll explain what
that is in the next slide.

00:48:34.844 --> 00:48:37.144
And you try to minimize the
space around that function

00:48:37.144 --> 00:48:38.310
that tried to bring it back.

00:48:38.310 --> 00:48:41.276
So what this is is--

00:48:41.276 --> 00:48:46.110
so you have some kind
of your initial state.

00:48:46.110 --> 00:48:47.520
This would be the initial state.

00:48:47.520 --> 00:48:50.590
And the whole region,
what you're trying to do

00:48:50.590 --> 00:48:53.786
is minimize it around it.

00:48:53.786 --> 00:48:56.686
So does that makes
sense why you do that?

00:48:56.686 --> 00:48:59.250
So your trajectory
is basically going

00:48:59.250 --> 00:49:01.667
to go anywhere around here.

00:49:01.667 --> 00:49:04.000
And what you're trying to do
is find the region of space

00:49:04.000 --> 00:49:05.610
that minimizes--

00:49:05.610 --> 00:49:07.620
that encompasses
all of the places

00:49:07.620 --> 00:49:10.890
that your system
is going to get to.

00:49:10.890 --> 00:49:13.030
So that's easy to
do when you it out

00:49:13.030 --> 00:49:15.860
and you know exactly where
your system's going to go.

00:49:15.860 --> 00:49:19.040
It's easy to just shrink
your ball around it.

00:49:19.040 --> 00:49:20.950
But you actually compute that.

00:49:25.220 --> 00:49:25.803
No, forget it.

00:49:25.803 --> 00:49:26.610
OK.

00:49:26.610 --> 00:49:30.180
So when you have that for
each point in the trajectory,

00:49:30.180 --> 00:49:32.209
you know that you're
going to stay within here,

00:49:32.209 --> 00:49:33.834
because you're going
to have some kinds

00:49:33.834 --> 00:49:35.330
of-- from your
nominal trajectory,

00:49:35.330 --> 00:49:37.880
you're going to have different
places where your system can

00:49:37.880 --> 00:49:42.340
go under the given conditions of
velocity and wind uncertainty.

00:49:42.340 --> 00:49:44.160
You're going to go
anywhere withing that.

00:49:44.160 --> 00:49:47.319
But as long as you know you're
still in that ellipsoid,

00:49:47.319 --> 00:49:49.360
then you're going to stay
within those ellipsoids

00:49:49.360 --> 00:49:51.845
as you go down the path.

00:49:51.845 --> 00:49:52.637
Does it make sense?

00:49:52.637 --> 00:49:53.137
Good.

00:49:56.820 --> 00:50:00.200
So the reason they
use Lyapunov functions

00:50:00.200 --> 00:50:03.780
is there's different ways
to measure stability.

00:50:03.780 --> 00:50:08.175
And so I'll move
forward to this.

00:50:08.175 --> 00:50:10.470
So there's different
ways to measure stability

00:50:10.470 --> 00:50:13.480
in a non-linear system.

00:50:13.480 --> 00:50:15.544
So in a linear system,
you're either unstable

00:50:15.544 --> 00:50:17.210
or you're globally
exponentially stable.

00:50:17.210 --> 00:50:19.134
So you're going to
converge back to your--

00:50:19.134 --> 00:50:20.870
to whatever stability
equilibrium,

00:50:20.870 --> 00:50:23.920
what you have at an
exponential rate.

00:50:23.920 --> 00:50:26.710
But there is also, in
non-linear systems,

00:50:26.710 --> 00:50:28.305
there's global
exponential stability.

00:50:28.305 --> 00:50:30.270
There asymptotic stability.

00:50:30.270 --> 00:50:32.660
And there's stability in
the sense of Lyapunov,

00:50:32.660 --> 00:50:34.330
which is what we care about.

00:50:34.330 --> 00:50:37.015
So the difference
between that is--

00:50:37.015 --> 00:50:39.320
so say this is your nominal.

00:50:39.320 --> 00:50:41.680
And globally
exponentially stable

00:50:41.680 --> 00:50:44.310
means that no matter where you
start anywhere on the board,

00:50:44.310 --> 00:50:47.080
you're going to be converging
back to this equilibrium

00:50:47.080 --> 00:50:49.100
going at an exponential rate.

00:50:49.100 --> 00:50:50.836
So that's the best
case scenario.

00:50:50.836 --> 00:50:51.710
That's what you want.

00:50:54.240 --> 00:50:56.080
Asymptotic stability
means that you're

00:50:56.080 --> 00:50:59.660
going to be going from
somewhere on the board,

00:50:59.660 --> 00:51:02.230
within a certain region, back
to this nominal trajectory.

00:51:02.230 --> 00:51:04.163
But it doesn't have to
be an exponential rate.

00:51:04.163 --> 00:51:06.815
So you can do something like
that, as long as eventually

00:51:06.815 --> 00:51:08.950
you sort of
converging back to it.

00:51:08.950 --> 00:51:12.890
And then there's stability
in the sense of Lyapunov,

00:51:12.890 --> 00:51:15.000
which is-- so, say you're here.

00:51:15.000 --> 00:51:19.540
Your system can be doing
anything, anything crazy,

00:51:19.540 --> 00:51:23.830
as long as it stays within
some certain thing, which

00:51:23.830 --> 00:51:27.945
in the 1D case we saw was the
little ball going around it.

00:51:27.945 --> 00:51:32.764
So imagine there's like
a ball for each of these.

00:51:32.764 --> 00:51:34.930
and this is where your
trajectory could possibly go.

00:51:34.930 --> 00:51:37.263
As long as it stays within
that, you can say your system

00:51:37.263 --> 00:51:39.302
is stable in the sense Lyapunov.

00:51:39.302 --> 00:51:40.844
Does that make sense?

00:51:40.844 --> 00:51:42.080
Cool.

00:51:42.080 --> 00:51:45.350
So know this, does that--

00:51:45.350 --> 00:51:47.150
AUDIENCE: I just have
a basic question.

00:51:47.150 --> 00:51:52.320
So the Lyapunov function is
around a stable set point.

00:51:52.320 --> 00:51:55.390
But the trajectory
has non-zero velocity.

00:51:55.390 --> 00:52:01.110
So what is the point that
it's stabilizing around?

00:52:01.110 --> 00:52:05.550
PRESENTER 3: You can stabilize
around a trajectory, which also

00:52:05.550 --> 00:52:09.050
what the funnels do.

00:52:09.050 --> 00:52:12.375
So we have your
little point here.

00:52:12.375 --> 00:52:15.485
And this is your nominal
trick, some kind of state.

00:52:15.485 --> 00:52:17.430
And you're wind can
knock you this way.

00:52:17.430 --> 00:52:20.510
Your velocity difference can
knock you this way or this way.

00:52:20.510 --> 00:52:22.600
But as long as you're
still within that,

00:52:22.600 --> 00:52:24.300
You've got to
converge back to it.

00:52:24.300 --> 00:52:26.810
And this is the value for
your Lyapunov function.

00:52:26.810 --> 00:52:29.936
And these are the different
states you can have.

00:52:29.936 --> 00:52:33.040
An important thing to
notice is the derivative

00:52:33.040 --> 00:52:36.400
is a negative definite--
or negative semi-definite

00:52:36.400 --> 00:52:38.260
in the case.

00:52:38.260 --> 00:52:41.979
And that means that basically
all your trajectories,

00:52:41.979 --> 00:52:43.520
no matter where you
go, they're going

00:52:43.520 --> 00:52:45.440
to be going down this cone.

00:52:45.440 --> 00:52:49.731
And eventually they're going
to to down to some value.

00:52:49.731 --> 00:52:50.730
So does that make sense?

00:52:50.730 --> 00:52:54.044
That's like pretty amazing
stuff and your system stuff.

00:52:54.044 --> 00:52:55.870
Cool.

00:52:55.870 --> 00:52:58.470
So once you know
that, it makes sense

00:52:58.470 --> 00:53:00.390
to use Lyapunov
functions as candidates

00:53:00.390 --> 00:53:04.044
for computing funnels.

00:53:10.250 --> 00:53:15.246
So an ellipsoid is actually
defined by a quadratic Lyapunov

00:53:15.246 --> 00:53:18.600
function, which is down here.

00:53:18.600 --> 00:53:24.890
[INAUDIBLE] shown the
equation for an ellipsoid

00:53:24.890 --> 00:53:38.680
is some V times S. So that was
the equation for an ellipsoid

00:53:38.680 --> 00:53:40.640
that Gabriel showed previously.

00:53:40.640 --> 00:53:45.130
The quadratic Lyapunov function
has the same structure,

00:53:45.130 --> 00:53:51.085
where you have this being x to
[INAUDIBLE],, which is basically

00:53:51.085 --> 00:53:52.440
the error of you state.

00:53:52.440 --> 00:53:58.605
So it's some kind of
exact mean of the state

00:53:58.605 --> 00:54:03.110
that you're actually in minus
x0, which is the nominal point

00:54:03.110 --> 00:54:04.200
that you want to reach.

00:54:04.200 --> 00:54:08.250
So this defines the
region around your--

00:54:08.250 --> 00:54:10.740
the nominal point, which
would be somewhere in there.

00:54:10.740 --> 00:54:14.070
And the ellipsoid is computed
by doing that minimization

00:54:14.070 --> 00:54:16.630
that I showed you on
the previous slides.

00:54:16.630 --> 00:54:20.075
And then you can figure
out the region inside of it

00:54:20.075 --> 00:54:21.790
by solving that equation.

00:54:21.790 --> 00:54:26.750
And if it's less than
1, I believe you inside.

00:54:26.750 --> 00:54:28.270
And those are all
the red dots that

00:54:28.270 --> 00:54:29.560
show that you're inside of it.

00:54:29.560 --> 00:54:34.336
So that's used when
computing trajectories.

00:54:34.336 --> 00:54:37.320
You solve for-- say that
you're inside a point cloud,

00:54:37.320 --> 00:54:39.320
you know which points
you're going to get inside

00:54:39.320 --> 00:54:40.970
of this ellipsoid.

00:54:40.970 --> 00:54:42.970
So when you're planning,
you solve that equation

00:54:42.970 --> 00:54:44.095
for each of the ellipsoids.

00:54:44.095 --> 00:54:46.815
And you know if you're going
to hit something or not.

00:54:51.565 --> 00:54:56.360
All right, so this is a
video that [? Ani ?] did.

00:54:59.021 --> 00:55:01.010
And this is using
the funnel libraries

00:55:01.010 --> 00:55:02.420
for collision avoidance.

00:55:02.420 --> 00:55:05.150
This is showing for
just one funnel.

00:55:05.150 --> 00:55:09.000
The glider dynamics were shown
in one of the previous slides.

00:55:09.000 --> 00:55:12.160
They were pre-set by
the glider dynamics.

00:55:12.160 --> 00:55:16.960
But [INAUDIBLE].

00:55:16.960 --> 00:55:20.830
So you see right there
that there's objects,

00:55:20.830 --> 00:55:25.096
and the glider plans
a path around them.

00:55:27.808 --> 00:55:31.370
So the funnels-- this
is one possible one.

00:55:31.370 --> 00:55:34.106
Right here, I'm pretty sure
they tell it where objects are,

00:55:34.106 --> 00:55:35.730
even though they're
not actually there.

00:55:35.730 --> 00:55:40.040
And it finds that funnel
being the one the guy wants.

00:55:40.040 --> 00:55:43.170
And you see that
throughout the entire path,

00:55:43.170 --> 00:55:45.332
the glider will stay
within the funnel.

00:55:51.410 --> 00:55:54.110
And then when you're searching
with the online planning

00:55:54.110 --> 00:55:56.450
algorithm that was
shown previously,

00:55:56.450 --> 00:55:59.716
it goes through all
of these funnels

00:55:59.716 --> 00:56:02.515
and eventually finds
the best safe one.

00:56:02.515 --> 00:56:04.915
You won't always find a
safe one, as discussed.

00:56:04.915 --> 00:56:06.300
In this case you did.

00:56:06.300 --> 00:56:12.350
But it finds the best
one around the path.

00:56:12.350 --> 00:56:13.970
So one way that it
finds the best one

00:56:13.970 --> 00:56:17.410
is by finding all of-- so if
you're planning a point cloud,

00:56:17.410 --> 00:56:19.640
you find all the points that
lie with the ellipsoids.

00:56:19.640 --> 00:56:21.814
And the one with the
least amount of points

00:56:21.814 --> 00:56:23.758
is probably going to
be the safest one.

00:56:27.660 --> 00:56:31.930
So here's a bunch of
different obstacles.

00:56:31.930 --> 00:56:33.956
And it safely maneuvers all.

00:56:33.956 --> 00:56:37.602
And there's some pretty dynamic
movements, which is cool too.

00:56:45.966 --> 00:56:47.934
So within that there is--

00:56:51.870 --> 00:56:54.330
let's see.

00:56:54.330 --> 00:56:55.314
I'm going to back to--

00:56:59.250 --> 00:57:04.339
is there a way to get back to
the full screen [INAUDIBLE]??

00:57:04.339 --> 00:57:07.748
AUDIENCE: [INAUDIBLE]

00:57:07.748 --> 00:57:20.440
PRESENTER 3: [INAUDIBLE]

00:57:20.440 --> 00:57:23.400
So with the online
planning algorithm,

00:57:23.400 --> 00:57:24.805
here's one of the
possible paths.

00:57:24.805 --> 00:57:29.054
You have your point
cloud of trees.

00:57:29.054 --> 00:57:33.340
And those were shown in the
previous, the little round

00:57:33.340 --> 00:57:37.450
thing with the green
foxy tree-looking things.

00:57:37.450 --> 00:57:40.165
Using a sensor model,
you get a point of that.

00:57:40.165 --> 00:57:42.740
And as you're going,
you plan your path.

00:57:42.740 --> 00:57:45.655
And the way that this
works is every five meters,

00:57:45.655 --> 00:57:46.330
you plan a path.

00:57:46.330 --> 00:57:47.904
And then as you're
flying through it,

00:57:47.904 --> 00:57:49.195
you get new sensor information.

00:57:49.195 --> 00:57:52.282
And you can replan your
path using the algorithm.

00:57:57.480 --> 00:57:59.674
And that will guarantee
you that you're safe.

00:57:59.674 --> 00:58:01.350
And when you're
flying, obviously you

00:58:01.350 --> 00:58:02.580
don't see the funnels.

00:58:02.580 --> 00:58:05.690
But right here you can
see there's probably

00:58:05.690 --> 00:58:07.820
one funnel here and
then another funnel

00:58:07.820 --> 00:58:10.715
that plans this way, another
funnel that goes to here,

00:58:10.715 --> 00:58:12.256
and then another
one that goes there.

00:58:12.256 --> 00:58:13.704
And that's a full path.

00:58:13.704 --> 00:58:16.120
And there's also a cool one ,
because it shows that you go

00:58:16.120 --> 00:58:17.170
through the tree.

00:58:17.170 --> 00:58:18.920
And that's where
one of the funnels

00:58:18.920 --> 00:58:21.320
is rather than going around.

00:58:21.320 --> 00:58:24.270
It is possible that you start
computing a new funnel--

00:58:24.270 --> 00:58:27.180
or you start searching
a new library here.

00:58:27.180 --> 00:58:30.106
And you may not be able to
make it up the way in time,

00:58:30.106 --> 00:58:33.970
given what speed
you're going at.

00:58:33.970 --> 00:58:36.385
Does anyone have any questions?

00:58:41.710 --> 00:58:44.140
And this is the online
planning algorithm

00:58:44.140 --> 00:58:46.562
that we saw before written out.

00:58:51.272 --> 00:58:54.590
And some of the
references, the paper

00:58:54.590 --> 00:58:57.560
from the video that we just
saw, that's given here.

00:58:57.560 --> 00:59:00.480
And that also go to the
example [INAUDIBLE]..

00:59:00.480 --> 00:59:04.990
Frazzoli was one of
the original people

00:59:04.990 --> 00:59:06.397
that computed a flow tube.

00:59:06.397 --> 00:59:10.355
Hoffman and Williams did the
temporal planning for footsteps

00:59:10.355 --> 00:59:12.852
and decoupled humanoid system.

00:59:12.852 --> 00:59:21.810
And I did most of the stuff on
[INAUDIBLE] for that years ago.

00:59:24.440 --> 00:59:28.220
Another important thing to
note that was a big thing

00:59:28.220 --> 00:59:31.830
in my personal research was
that even though you may note be

00:59:31.830 --> 00:59:35.293
able to compute-- or that you
may not find a funnel that

00:59:35.293 --> 00:59:36.870
necessarily goes--

00:59:36.870 --> 00:59:39.657
finds a safe path, you can
shift that funnel around.

00:59:39.657 --> 00:59:41.490
You could even move it
slightly up and down,

00:59:41.490 --> 00:59:43.805
as long as the first
ellipsoid is still within--

00:59:43.805 --> 00:59:47.330
as long as your initial state is
still within better ellipsoid.

00:59:47.330 --> 00:59:50.550
And that's easy to do
because you can just

00:59:50.550 --> 00:59:54.530
give it a simple
transformation between one

00:59:54.530 --> 00:59:55.820
state and the other.

00:59:55.820 --> 00:59:59.069
And if you transform
this S matrix,

00:59:59.069 --> 01:00:00.860
then that will transform
your entire funnel

01:00:00.860 --> 01:00:02.026
and it will shift it around.

01:00:02.026 --> 01:00:03.630
So you can find
your best funnel,

01:00:03.630 --> 01:00:05.045
even though it
may hit something.

01:00:05.045 --> 01:00:07.120
If it was slightly
shifted to the left,

01:00:07.120 --> 01:00:10.557
you can just shift it
using that transformation.

01:00:10.557 --> 01:00:14.485
So that's one of the
[INAUDIBLE] funnels too.

01:00:18.413 --> 01:00:22.341
Does everyone understand
funnels and flow tubes now?

01:00:22.341 --> 01:00:23.840
AUDIENCE: So I
have two questions.

01:00:23.840 --> 01:00:26.083
So the side of that
funnel is computed

01:00:26.083 --> 01:00:27.082
by the transform script.

01:00:27.082 --> 01:00:27.665
Is that right?

01:00:27.665 --> 01:00:31.390
PRESENTER 3: Yeah, if you want
to get it some ridiculous wind,

01:00:31.390 --> 01:00:33.440
like 1,000 miles per
hour, then you're

01:00:33.440 --> 01:00:34.875
going to get huge funnels.

01:00:34.875 --> 01:00:37.300
But that's under some
kind of reasonable--

01:00:37.300 --> 01:00:40.550
you know in this region
of the forest or something

01:00:40.550 --> 01:00:43.530
there's only three mile per hour
winds or something like that.

01:00:43.530 --> 01:00:47.310
Yeah, that's based a lot
on what your counts are.

01:00:47.310 --> 01:00:50.840
AUDIENCE: So do you have any
algorithm that in your mind

01:00:50.840 --> 01:00:52.850
that is not using
offline [INAUDIBLE]??

01:00:52.850 --> 01:00:55.178
So this is like mostly
you do the offline

01:00:55.178 --> 01:00:56.552
and the you do
the online search.

01:00:56.552 --> 01:00:59.904
But if you were in a wild
environment, you do nothing.

01:00:59.904 --> 01:01:02.310
Then do you have any
[INAUDIBLE] that isn't--

01:01:02.310 --> 01:01:04.519
PRESENTER 3: I mean, there
are algorithms that will--

01:01:04.519 --> 01:01:06.851
well, just the basic controller
will try to get you back

01:01:06.851 --> 01:01:07.770
to nominal trajectory.

01:01:07.770 --> 01:01:09.730
But there's nothing
that I know of at least

01:01:09.730 --> 01:01:12.050
that will guarantee you
safety and will give you

01:01:12.050 --> 01:01:17.320
an all-encompassing region
like flow tube or a funnel.

01:01:17.320 --> 01:01:20.530
So flow tube you find there's
an infinite number of paths

01:01:20.530 --> 01:01:22.220
that will get you
from here to here

01:01:22.220 --> 01:01:24.720
with your system, basically
every little minute

01:01:24.720 --> 01:01:26.132
change that you have.

01:01:26.132 --> 01:01:28.590
And that obviously takes awhile
to compute and approximate.

01:01:28.590 --> 01:01:33.260
And the funnels, it takes
awhile to compute the regions

01:01:33.260 --> 01:01:34.270
where it can go.

01:01:34.270 --> 01:01:36.204
So I don't know anything
that will online

01:01:36.204 --> 01:01:37.550
compute this region.

01:01:37.550 --> 01:01:40.720
But online you will be able
to compute some trajectory.

01:01:40.720 --> 01:01:45.156
And then let your controller
will take your state error

01:01:45.156 --> 01:01:46.650
and control it.

01:01:46.650 --> 01:01:50.197
But it won't
guarantee [INAUDIBLE]..

01:01:50.197 --> 01:01:51.780
AUDIENCE: With the
funnels, how do you

01:01:51.780 --> 01:01:54.590
compute your initial
set of states,

01:01:54.590 --> 01:01:57.160
or the allowed
initial set of states?

01:01:57.160 --> 01:02:00.400
You have these uncertainties,
like for the wind and velocity,

01:02:00.400 --> 01:02:05.120
but what about the initial
state before those disturbances

01:02:05.120 --> 01:02:05.880
happen?

01:02:05.880 --> 01:02:08.150
You'd probably want more
than one initial state.

01:02:16.970 --> 01:02:18.440
AUDIENCE: Here's and eraser.

01:02:18.440 --> 01:02:20.890
PRESENTER 3: Yeah,
that'd be good.

01:02:20.890 --> 01:02:21.860
Cool.

01:02:21.860 --> 01:02:22.360
Thanks.

01:02:25.300 --> 01:02:34.488
So with the funnels, so you have
your nominal trajectory again,

01:02:34.488 --> 01:02:39.197
and then your
ellipsoids around it.

01:02:39.197 --> 01:02:41.530
So when your system starts,
you have your initial state.

01:02:41.530 --> 01:02:43.071
And your initial
state is just-- it's

01:02:43.071 --> 01:02:45.350
going to be here at time t0.

01:02:45.350 --> 01:02:48.800
But over the time
computed, you can

01:02:48.800 --> 01:02:51.262
go over here, or anywhere
around here really,

01:02:51.262 --> 01:02:52.555
depending on what happens.

01:02:52.555 --> 01:02:55.060
AUDIENCE: But I
just me that you'd

01:02:55.060 --> 01:02:58.580
want to apply the
funnel multiple times.

01:02:58.580 --> 01:03:02.160
And you're initial state
may not be exactly the same.

01:03:02.160 --> 01:03:07.682
So it should be possible
to use the same funnel even

01:03:07.682 --> 01:03:10.350
though the initial state
is off by a little bit.

01:03:10.350 --> 01:03:11.330
PRESENTER 3: Yeah, OK.

01:03:11.330 --> 01:03:13.590
So say that you chose
this funnel first.

01:03:13.590 --> 01:03:16.570
And eventually what actually
happens is you do this

01:03:16.570 --> 01:03:17.670
and you get pushed around.

01:03:17.670 --> 01:03:20.719
And then you end up here
instead of this funnel.

01:03:20.719 --> 01:03:22.510
As long as your next
funnel that you plan--

01:03:22.510 --> 01:03:26.760
so you can start a new funnel
at any point in this trajectory,

01:03:26.760 --> 01:03:29.230
as long as the next
funnel is also--

01:03:29.230 --> 01:03:31.766
as long as you have V
intersection between the point

01:03:31.766 --> 01:03:33.810
and the next funnel.

01:03:33.810 --> 01:03:37.450
And if you're
within this region,

01:03:37.450 --> 01:03:40.530
and you plan the next
funnel, what do you do

01:03:40.530 --> 01:03:45.928
is you plan the next funnel
with this being the original x0.

01:03:45.928 --> 01:03:49.180
So as long as
that's you next x0,

01:03:49.180 --> 01:03:52.152
and then this will take on
a new nominal trajectory.

01:03:52.152 --> 01:03:54.120
AUDIENCE: Yeah, I'm
just saying, asking

01:03:54.120 --> 01:04:00.520
how you, like for the one all
the way on the left, that one,

01:04:00.520 --> 01:04:05.230
yeah, how do you define how
big that initial region is?

01:04:05.230 --> 01:04:11.440
PRESENTER 3: Oh, OK, so
that one, say, if you start,

01:04:11.440 --> 01:04:13.560
say, not moving or something
and you got pushed?

01:04:13.560 --> 01:04:15.620
Is that what you're asking for--

01:04:15.620 --> 01:04:17.120
AUDIENCE: Well, I
mean, I understand

01:04:17.120 --> 01:04:19.350
that you're using the
V for uncertainty,

01:04:19.350 --> 01:04:21.700
and V and W. So that
essentially defines

01:04:21.700 --> 01:04:23.900
how big those funnels are.

01:04:23.900 --> 01:04:26.662
Do the also define how
big the first one is?

01:04:26.662 --> 01:04:27.370
PRESENTER 3: Yes.

01:04:27.370 --> 01:04:28.160
Yeah, the do.

01:04:28.160 --> 01:04:29.590
AUDIENCE: OK.

01:04:29.590 --> 01:04:32.200
PRESENTER 3: So what you're
doing, because what you want

01:04:32.200 --> 01:04:35.690
to do is use the funnels
and have some funnel library

01:04:35.690 --> 01:04:39.670
and be able to use those
throughout all time.

01:04:39.670 --> 01:04:41.770
So you don't want--

01:04:41.770 --> 01:04:45.360
so I guess what you're
asking, the first funnel,

01:04:45.360 --> 01:04:47.520
you're going to start
at some initial state

01:04:47.520 --> 01:04:49.021
0 with no velocity,
stuff like that.

01:04:49.021 --> 01:04:50.978
And so you're not going
to have any uncertainty

01:04:50.978 --> 01:04:53.360
on the first thing because
you know where you start,

01:04:53.360 --> 01:04:54.960
the initial state.

01:04:54.960 --> 01:04:58.310
AUDIENCE: Yeah, I'm
just asking independent

01:04:58.310 --> 01:05:01.420
of the wind and
stuff like that, you

01:05:01.420 --> 01:05:04.080
might just be
starting at a point

01:05:04.080 --> 01:05:06.510
other than what that
nominal point is.

01:05:06.510 --> 01:05:10.110
So you may want to define
that initial funnel size

01:05:10.110 --> 01:05:13.966
by some other
criteria besides wind.

01:05:13.966 --> 01:05:16.372
Is there--

01:05:16.372 --> 01:05:18.730
AUDIENCE: So [INAUDIBLE]
sensor how sure

01:05:18.730 --> 01:05:21.487
you are about where
initial location is.

01:05:21.487 --> 01:05:22.570
AUDIENCE: Yeah, and then--

01:05:22.570 --> 01:05:24.028
I mean, there's
sensor uncertainty.

01:05:24.028 --> 01:05:27.050
But you just may happen
to be in the-- if you're

01:05:27.050 --> 01:05:30.560
doing the glider
experiment 10 times,

01:05:30.560 --> 01:05:33.210
you may not start it from
exactly the same position

01:05:33.210 --> 01:05:33.720
every time.

01:05:33.720 --> 01:05:35.760
PRESENTER 3: Yeah, you should--

01:05:35.760 --> 01:05:38.820
your funnel, every time
you plan a new funnel,

01:05:38.820 --> 01:05:40.459
you start at the
nominal trajectory

01:05:40.459 --> 01:05:41.375
above that new funnel.

01:05:41.375 --> 01:05:43.570
So you're not going
to have this funnel.

01:05:43.570 --> 01:05:46.920
And you're never going to start
over here on the first one.

01:05:46.920 --> 01:05:49.600
You're always going to
start at this point.

01:05:49.600 --> 01:05:51.410
[INTERPOSING VOICES]

01:05:51.410 --> 01:05:53.160
AUDIENCE: I though the
point of the funnel

01:05:53.160 --> 01:05:58.265
was so that you can reuse
it without having to replan.

01:05:58.265 --> 01:06:00.390
PRESENTER 3: Yeah, you can
move the funnels around.

01:06:00.390 --> 01:06:01.035
AUDIENCE: Oh, you can move?

01:06:01.035 --> 01:06:01.535
OK.

01:06:01.535 --> 01:06:04.050
PRESENTER 3: Yeah,
yeah, that was-- so

01:06:04.050 --> 01:06:05.960
every time you
start a new funnel,

01:06:05.960 --> 01:06:07.650
you start at this
nominal trajectory.

01:06:07.650 --> 01:06:10.126
But the next time you
use the same funnel,

01:06:10.126 --> 01:06:13.080
you could be over here and
just shift the funnel down

01:06:13.080 --> 01:06:15.030
to exactly the point.

01:06:15.030 --> 01:06:18.001
So the initial state is never
going to be anywhere starting

01:06:18.001 --> 01:06:20.974
at t0, it's not going
to be somewhere other

01:06:20.974 --> 01:06:22.140
than the nominal trajectory.

01:06:22.140 --> 01:06:24.070
But at t1 it could be over here.

01:06:24.070 --> 01:06:26.060
And so you just shift
the whole funnel around.

01:06:26.060 --> 01:06:29.010
And as long as your t0
starts at the new funnel,

01:06:29.010 --> 01:06:35.968
and as long as t0 is within the
funnel above t-- last funnel,

01:06:35.968 --> 01:06:37.970
then you just shift it around.

01:06:37.970 --> 01:06:43.355
You can also turn it, as long as
you can multiply this and this.

01:06:43.355 --> 01:06:44.855
AUDIENCE: It seems
like the shifting

01:06:44.855 --> 01:06:50.325
and turning is a pretty complex
search problem in itself.

01:06:50.325 --> 01:06:53.550
Is that a hard problem?

01:06:53.550 --> 01:06:56.295
PRESENTER 3: No, that
was actually the--

01:06:56.295 --> 01:06:58.203
[INAUDIBLE] I got
rid of the slide.

01:06:58.203 --> 01:07:01.159
I might have gotten
rid of that slide.

01:07:01.159 --> 01:07:02.700
I shouldn't because
that was the work

01:07:02.700 --> 01:07:04.592
that I did for the [INAUDIBLE].

01:07:04.592 --> 01:07:07.430
Let's see [INAUDIBLE].

01:07:07.430 --> 01:07:11.240
But, yeah, there's a bunch
of different ways to do it.

01:07:11.240 --> 01:07:14.980
I did a pretty not
very smart search,

01:07:14.980 --> 01:07:19.810
where I just looked for the
funnels, the safest funnel

01:07:19.810 --> 01:07:22.346
being the one with the least
number of points in the point

01:07:22.346 --> 01:07:25.544
cloud within that entire funnel.

01:07:25.544 --> 01:07:32.432
And then-- oh, man, I
did get rid of this.

01:07:44.240 --> 01:07:46.920
But basically what I did
was find the safest funnel.

01:07:46.920 --> 01:07:49.490
And if there still was a
collision within the safest

01:07:49.490 --> 01:07:51.650
funnel, the I admit I had
a minimization problem

01:07:51.650 --> 01:07:54.474
as you shifted back and forth.

01:07:54.474 --> 01:07:57.390
And there was a
cost function that--

01:07:57.390 --> 01:07:58.732
see if I can bring it up.

01:07:58.732 --> 01:08:00.440
AUDIENCE: So you're
doing an optimization

01:08:00.440 --> 01:08:02.840
of the online running of the--

01:08:02.840 --> 01:08:03.764
PRESENTER 3: Yeah.

01:08:03.764 --> 01:08:05.750
That was an input
that was implemented

01:08:05.750 --> 01:08:07.440
in realtime simulation.

01:08:07.440 --> 01:08:11.182
But that wasn't implemented
on the actual glider as of

01:08:11.182 --> 01:08:13.652
[INAUDIBLE].

01:08:13.652 --> 01:08:18.592
So let's see, all
right [INAUDIBLE]..

01:08:25.040 --> 01:08:26.870
And you also want--

01:08:26.870 --> 01:08:30.720
I also made is so you
minimize the amount that you

01:08:30.720 --> 01:08:31.696
shift it to.

01:08:31.696 --> 01:08:33.779
So you don't want to shift
it completely somewhere

01:08:33.779 --> 01:08:37.020
else because it won't
be in your path.

01:08:37.020 --> 01:08:39.660
And you'll end up doing
some dynamic [INAUDIBLE]..

01:08:39.660 --> 01:08:42.496
Like, you'll be flying, and then
if you compute a funnel that's

01:08:42.496 --> 01:08:43.870
here that's kind
of safe, but you

01:08:43.870 --> 01:08:45.769
shift it all the
way down to here.

01:08:45.769 --> 01:08:48.146
Then you're gliders going
to be doing something crazy.

01:08:48.146 --> 01:08:51.625
And that may-- I guess
it would be [INAUDIBLE]..

01:08:51.625 --> 01:08:57.589
But I minimized that for at
least [INAUDIBLE] shift it.

01:08:57.589 --> 01:09:00.074
Does anybody have
other questions?

01:09:12.499 --> 01:09:15.580
Yeah, so does anybody
have any questions on--

01:09:15.580 --> 01:09:17.960
AUDIENCE: Can I ask one?

01:09:17.960 --> 01:09:21.899
So you've given us models
of bounded uncertainty

01:09:21.899 --> 01:09:23.240
in your dynamics.

01:09:23.240 --> 01:09:25.460
So if you use
probabilistic models,

01:09:25.460 --> 01:09:29.979
then your funnels start
looking like risk allocations.

01:09:29.979 --> 01:09:32.479
Is there an
interpretation of one

01:09:32.479 --> 01:09:33.840
in terms of the [INAUDIBLE]?

01:09:33.840 --> 01:09:34.923
PRESENTER 3: I don't know.

01:09:34.923 --> 01:09:38.021
No, but I'm sure if
you look it up, yeah.

01:09:38.021 --> 01:09:40.516
I'm sure somebody's
been working on that.

01:09:40.516 --> 01:09:42.512
I'm not really sure that fits--

01:09:42.512 --> 01:09:45.007
I know I haven't done that.

01:09:47.829 --> 01:09:49.870
AUDIENCE: Talk a little
bit about the interaction

01:09:49.870 --> 01:09:55.424
between the flow tube selection
or the funnel selections

01:09:55.424 --> 01:09:56.820
and the underlying [INAUDIBLE].

01:09:56.820 --> 01:09:59.361
So let's say you have something
that's planning the reference

01:09:59.361 --> 01:10:02.320
trajectory that's separate
from your flow tube

01:10:02.320 --> 01:10:04.450
selection or your
funnel selection.

01:10:04.450 --> 01:10:06.475
And then you have to
select the funnels and flow

01:10:06.475 --> 01:10:10.485
tubes that allow you to follow
that trajectory the best

01:10:10.485 --> 01:10:12.120
you can.

01:10:12.120 --> 01:10:14.347
How do the interact if
you have a flow tube--

01:10:14.347 --> 01:10:16.930
or don't have a safe flow tube
or funnel [INAUDIBLE] reference

01:10:16.930 --> 01:10:18.385
trajectory?

01:10:18.385 --> 01:10:21.040
PRESENTER 3: So you're asking
basically the difference

01:10:21.040 --> 01:10:23.768
between planning with
a funnel laddering

01:10:23.768 --> 01:10:25.140
and trajectory laddering.

01:10:25.140 --> 01:10:28.120
AUDIENCE: Yeah, kind of
sort of-- well, because I

01:10:28.120 --> 01:10:31.960
know the checkoff planner that
uses an incremental pathfinder,

01:10:31.960 --> 01:10:34.560
so the planned path or
something like that.

01:10:34.560 --> 01:10:37.310
And then you fit-- are
you fitting flow tuber

01:10:37.310 --> 01:10:38.610
to the reference trajectory?

01:10:38.610 --> 01:10:40.276
PRESENTER 3: Oh, you
do that off and on.

01:10:40.276 --> 01:10:42.744
So you compute-- they're
called funnel libraries.

01:10:42.744 --> 01:10:44.410
Or usually they're
trajectory libraries.

01:10:44.410 --> 01:10:46.810
So ever computing a
trajectory in realtime

01:10:46.810 --> 01:10:50.380
for a fast-moving dynamic
system is going to be expensive.

01:10:50.380 --> 01:10:52.210
And then computing a
funnel on top of that

01:10:52.210 --> 01:10:53.850
is going to be even
more expensive.

01:10:53.850 --> 01:10:56.296
So what a lot of
people do is they

01:10:56.296 --> 01:10:59.660
compute the library offline
for a trajectory and plan using

01:10:59.660 --> 01:11:00.160
that.

01:11:00.160 --> 01:11:03.000
But on this one, you
compute your trajectory,

01:11:03.000 --> 01:11:05.360
compute the funnel around
that trajectory offline.

01:11:05.360 --> 01:11:06.980
And then you search
through the funnel library.

01:11:06.980 --> 01:11:08.521
You don't search
through trajectories

01:11:08.521 --> 01:11:10.809
and then try to fit a
funnel around that one.

01:11:10.809 --> 01:11:12.600
You just search through
the funnel storage.

01:11:12.600 --> 01:11:14.724
PRESENTER 2: If you don't
have a very good library,

01:11:14.724 --> 01:11:17.226
then you will not get
a very good trajectory.

01:11:17.226 --> 01:11:19.100
PRESENTER 3: Also, a
cool thing about funnels

01:11:19.100 --> 01:11:22.646
versus trajectories is
a lot of trajectories

01:11:22.646 --> 01:11:26.820
will be discretized for
speed, so you have your nodes.

01:11:26.820 --> 01:11:31.750
And so, say this is what your
trajectory does, and you have

01:11:31.750 --> 01:11:35.490
node points here, and you're
trying to fly past a wall

01:11:35.490 --> 01:11:36.310
or something.

01:11:36.310 --> 01:11:38.960
If your wall goes
here, you're algorithm

01:11:38.960 --> 01:11:41.625
is going to search these
points, and it's going to say,

01:11:41.625 --> 01:11:45.295
OK, well, this is a safe path
because none of the node point

01:11:45.295 --> 01:11:46.488
intersect with this wall.

01:11:46.488 --> 01:11:53.310
So you fly [INAUDIBLE]
a little [INAUDIBLE]..

01:11:53.310 --> 01:11:57.690
But a funnel, since you have
this region around it, you--

01:11:57.690 --> 01:12:01.780
no, I did a bad job of
drawing that, but OK.

01:12:01.780 --> 01:12:05.890
When we search the
algorithm and see

01:12:05.890 --> 01:12:07.876
if it's less than
or greater than 1,

01:12:07.876 --> 01:12:12.152
you're going to find all these
points being in that region

01:12:12.152 --> 01:12:14.462
also.

01:12:14.462 --> 01:12:16.935
I guess that depends on how
well you want to discretize it.

01:12:16.935 --> 01:12:19.500
If your trajectory is
[INAUDIBLE] of really, really

01:12:19.500 --> 01:12:23.670
small points, then you're not
going to run into that issue.

01:12:23.670 --> 01:12:25.310
AUDIENCE: Seems like
you could-- like

01:12:25.310 --> 01:12:28.160
when you're building a
normal RIT without funnels,

01:12:28.160 --> 01:12:30.970
from concave points, if you
say, yeah, they're illegal,

01:12:30.970 --> 01:12:33.440
it seem that if
you're automatically

01:12:33.440 --> 01:12:35.778
adding on to that funnel
instead of generating

01:12:35.778 --> 01:12:38.040
an entire trajectory and
then making a funnel,

01:12:38.040 --> 01:12:41.480
you could save computational
time for [INAUDIBLE] things

01:12:41.480 --> 01:12:41.980
like that.

01:12:41.980 --> 01:12:44.474
Do you know if that's done?

01:12:44.474 --> 01:12:46.282
PRESENTER 3: No, I don't.

01:12:46.282 --> 01:12:48.510
I do know that, I
mean, computing,

01:12:48.510 --> 01:12:50.635
you obviously want to
minimize computation time.

01:12:50.635 --> 01:12:53.010
But it's not a critical thing
when computing, I guess,

01:12:53.010 --> 01:12:55.726
funnels and flow tubes, because
you do that all offline.

01:12:55.726 --> 01:12:57.290
And you want to--

01:12:57.290 --> 01:12:59.534
I don't think it's
even close to the point

01:12:59.534 --> 01:13:01.642
where you go to online
to compute a funnel.

01:13:01.642 --> 01:13:05.610
It takes like six hours
to compute it, so--

01:13:05.610 --> 01:13:08.690
depending on how many
dimensions your state has.

01:13:08.690 --> 01:13:10.790
So, yeah, it's not
like you're flying

01:13:10.790 --> 01:13:14.090
and you can compute
one of these things.

01:13:14.090 --> 01:13:15.890
You'll crash like [INAUDIBLE].

01:13:29.990 --> 01:13:30.590
OK.

01:13:30.590 --> 01:13:33.640
[APPLAUSE]