1 00:00:01,580 --> 00:00:03,920 The following content is provided under a Creative 2 00:00:03,920 --> 00:00:05,340 Commons license. 3 00:00:05,340 --> 00:00:07,550 Your support will help MIT OpenCourseWare 4 00:00:07,550 --> 00:00:11,640 continue to offer high-quality educational resources for free. 5 00:00:11,640 --> 00:00:14,180 To make a donation or to view additional materials 6 00:00:14,180 --> 00:00:18,110 from hundreds of MIT courses, visit MIT OpenCourseWare 7 00:00:18,110 --> 00:00:19,090 at ocw.mit.edu. 8 00:00:22,090 --> 00:00:24,186 PRESENTER 1: The basic concepts of reachability-- 9 00:00:24,186 --> 00:00:27,040 I'm talking about how we can represent reach 10 00:00:27,040 --> 00:00:29,713 sets in continuous spaces. 11 00:00:29,713 --> 00:00:31,587 [INAUDIBLE] is going to take it over and talk 12 00:00:31,587 --> 00:00:35,205 about some applications in robust motion planning. 13 00:00:35,205 --> 00:00:38,435 And then Gerard is going to talk about how we compute reach sets 14 00:00:38,435 --> 00:00:40,670 and focus on these two, on flow tubes and funnels. 15 00:00:43,930 --> 00:00:46,940 So reachability is a task of figuring out 16 00:00:46,940 --> 00:00:50,480 what stage a dynamical system can possibly reach 17 00:00:50,480 --> 00:00:53,580 or be at at a certain time. 18 00:00:53,580 --> 00:00:57,950 So for example, if we have these two systems, 19 00:00:57,950 --> 00:01:00,486 we have a finite state machine on this reach system 20 00:01:00,486 --> 00:01:01,600 and a continuous system. 21 00:01:01,600 --> 00:01:05,326 And these are the starting points. 22 00:01:05,326 --> 00:01:06,860 And these are our axes. 23 00:01:06,860 --> 00:01:08,750 We can move east or north here. 24 00:01:08,750 --> 00:01:12,096 And we can move east or north with these velocities. 25 00:01:12,096 --> 00:01:13,790 [INAUDIBLE] 26 00:01:13,790 --> 00:01:17,620 So after one second or one time step, 27 00:01:17,620 --> 00:01:21,980 we can be in either of these two states. 28 00:01:21,980 --> 00:01:25,102 Or we can be anywhere in this area-- 29 00:01:25,102 --> 00:01:29,240 and after two seconds, after three seconds, and so on. 30 00:01:29,240 --> 00:01:30,270 OK? 31 00:01:30,270 --> 00:01:33,492 So this is what reachability does. 32 00:01:33,492 --> 00:01:36,790 And the motivation for this-- 33 00:01:36,790 --> 00:01:38,890 one of the applications for reachability 34 00:01:38,890 --> 00:01:41,470 is for verification. 35 00:01:41,470 --> 00:01:46,870 Verification is just the task of making sure that we are never 36 00:01:46,870 --> 00:01:48,332 going to reach any bad states. 37 00:01:48,332 --> 00:01:50,290 So for instance, let's say we have a microwave. 38 00:01:50,290 --> 00:01:54,760 A bad state is the microwave being open and on. 39 00:01:54,760 --> 00:01:57,940 We want to make sure that these bad states are never reachable. 40 00:01:57,940 --> 00:02:01,365 So what we do is we compute the reachable sets, 41 00:02:01,365 --> 00:02:04,970 and we check for intersection with the bad states 42 00:02:04,970 --> 00:02:08,410 to see if the microwave is on and open. 43 00:02:08,410 --> 00:02:12,050 Or like over here, let's say we have these obstacles. 44 00:02:12,050 --> 00:02:15,790 Let's say we have a wall or somewhere else over here. 45 00:02:15,790 --> 00:02:18,060 We want to-- this is bad, right? 46 00:02:18,060 --> 00:02:22,030 Because we can reach this state, and it's the same as a wall. 47 00:02:22,030 --> 00:02:23,650 Any questions so far? 48 00:02:23,650 --> 00:02:26,470 Feel free to interrupt me any time. 49 00:02:29,350 --> 00:02:31,250 Another motivation for reachability 50 00:02:31,250 --> 00:02:33,070 is for robust motion planning, which 51 00:02:33,070 --> 00:02:35,770 [INAUDIBLE] talk more about. 52 00:02:35,770 --> 00:02:38,270 And I have a video of this. 53 00:02:38,270 --> 00:02:40,880 So what we can do with reachability 54 00:02:40,880 --> 00:02:42,560 is stuff like this. 55 00:02:51,810 --> 00:02:54,170 So this is done using flow tubes, which 56 00:02:54,170 --> 00:02:57,936 is reach sets, reachability. 57 00:02:57,936 --> 00:03:00,090 Gerard is going to talk more this example. 58 00:03:07,740 --> 00:03:11,420 So now before we talk more about these cool examples, let's 59 00:03:11,420 --> 00:03:12,790 just formalize concepts. 60 00:03:12,790 --> 00:03:16,350 Let's define some things. 61 00:03:16,350 --> 00:03:19,830 So let's go back to the same system that we 62 00:03:19,830 --> 00:03:25,460 had earlier, this state machine, with a finite set of states, X; 63 00:03:25,460 --> 00:03:29,320 a finite set of inputs, U, which in this case 64 00:03:29,320 --> 00:03:31,337 are east and north; and a transition function. 65 00:03:31,337 --> 00:03:32,920 And let's say this is just [INAUDIBLE] 66 00:03:32,920 --> 00:03:34,400 to keep things simple. 67 00:03:34,400 --> 00:03:38,150 And we have a set of initial states, X0, 68 00:03:38,150 --> 00:03:41,560 which I didn't label as red. 69 00:03:41,560 --> 00:03:45,400 So the reach set is defined as the set of states 70 00:03:45,400 --> 00:03:48,860 that we can possibly be in at time t. 71 00:03:48,860 --> 00:03:53,050 So more formally, there exists a sequence of t control inputs 72 00:03:53,050 --> 00:03:55,240 that will take us from this initial state 73 00:03:55,240 --> 00:03:59,370 to the corresponding reach set. 74 00:03:59,370 --> 00:04:03,540 So let's say, for example, you have bad state, 75 00:04:03,540 --> 00:04:08,690 it's in the reach set at time 3 because there exists 76 00:04:08,690 --> 00:04:10,270 a sequence of three inputs. 77 00:04:10,270 --> 00:04:12,910 In this case this is one such sequence. 78 00:04:12,910 --> 00:04:16,209 There is two more that will take us from the initial state 79 00:04:16,209 --> 00:04:17,771 to that. 80 00:04:17,771 --> 00:04:18,270 OK? 81 00:04:21,490 --> 00:04:26,130 And then the reachable set, the reach set reachable set 82 00:04:26,130 --> 00:04:30,450 is defined as the union of all reach sets for time less than 83 00:04:30,450 --> 00:04:32,760 or equal to t. 84 00:04:32,760 --> 00:04:36,660 So the reachable set of time 0 is just 85 00:04:36,660 --> 00:04:37,760 the initial set of states. 86 00:04:37,760 --> 00:04:41,999 And time 1, we have the unit and so on. 87 00:04:44,580 --> 00:04:46,530 So the reachable set is what we use 88 00:04:46,530 --> 00:04:48,560 to test for intersection with bad states 89 00:04:48,560 --> 00:04:53,820 because that's all the states that we can possibly reach 90 00:04:53,820 --> 00:04:56,337 from time 0 to time something. 91 00:04:56,337 --> 00:04:56,836 OK? 92 00:05:00,500 --> 00:05:04,280 Now as some of you may have figured out by now, 93 00:05:04,280 --> 00:05:07,170 there's a simple way for finding segmenting 94 00:05:07,170 --> 00:05:09,940 so we can compute reach sets. 95 00:05:09,940 --> 00:05:15,490 So for example, let's say we wanted the reach set of time 2. 96 00:05:15,490 --> 00:05:17,430 One way-- the easiest way we can do 97 00:05:17,430 --> 00:05:19,702 this is to break this up into time steps, 98 00:05:19,702 --> 00:05:21,240 into single time steps. 99 00:05:21,240 --> 00:05:24,410 So instead of computing it straight for time 2, 100 00:05:24,410 --> 00:05:26,732 let's first compute it for time 1. 101 00:05:26,732 --> 00:05:29,250 And now we can use these two states 102 00:05:29,250 --> 00:05:35,420 as the set of initial states and compute the reach set for one 103 00:05:35,420 --> 00:05:36,930 more time step. 104 00:05:36,930 --> 00:05:40,972 And that gave us this reachable-- the reach set. 105 00:05:40,972 --> 00:05:41,860 OK? 106 00:05:41,860 --> 00:05:45,232 Any questions? 107 00:05:45,232 --> 00:05:48,010 OK, and the reason why these works is because reach sets are 108 00:05:48,010 --> 00:05:49,290 semi-groups. 109 00:05:49,290 --> 00:05:53,690 And semi-groups satisfy this equality. 110 00:05:53,690 --> 00:05:58,120 So we can not just break it up into single time sets. 111 00:05:58,120 --> 00:06:03,090 We can break into any two times, s and t. 112 00:06:06,018 --> 00:06:10,005 OK, so all of this was for finite state machines. 113 00:06:10,005 --> 00:06:12,300 But for continuous systems, things 114 00:06:12,300 --> 00:06:15,030 get a little more complicated. 115 00:06:15,030 --> 00:06:17,420 It's a lot of the same concepts, but we 116 00:06:17,420 --> 00:06:19,930 need to handle a very important issue, 117 00:06:19,930 --> 00:06:22,400 and that is how to represent reach sets, 118 00:06:22,400 --> 00:06:26,324 or just set, regions in space for continuous systems. 119 00:06:26,324 --> 00:06:27,740 Because in a finite state machine, 120 00:06:27,740 --> 00:06:32,590 we can just enumerate the list of states in the reach set 121 00:06:32,590 --> 00:06:33,750 or reachable set. 122 00:06:33,750 --> 00:06:36,150 In a continuous system, we need some other way. 123 00:06:36,150 --> 00:06:40,860 We can't just say it's every point for which there exists 124 00:06:40,860 --> 00:06:44,570 a sequence of control inputs, because there 125 00:06:44,570 --> 00:06:49,150 can be infinitely many points. 126 00:06:49,150 --> 00:06:54,439 So what we do, we have two types of representations 127 00:06:54,439 --> 00:06:54,980 that we like. 128 00:06:54,980 --> 00:06:57,340 One is convex polytopes. 129 00:06:57,340 --> 00:07:02,830 And that's just a generalization of a convex polygon into n 130 00:07:02,830 --> 00:07:05,256 space, into n dimensions. 131 00:07:05,256 --> 00:07:08,730 And we have two basic ways that we can represent 132 00:07:08,730 --> 00:07:10,680 these complex polygons. 133 00:07:10,680 --> 00:07:18,390 One is with these hull vertices, like this, AB to F. [INAUDIBLE] 134 00:07:18,390 --> 00:07:23,775 And then the convex polytope is defined as the convex hull. 135 00:07:23,775 --> 00:07:29,230 And in case someone doesn't remember what a convex hull is, 136 00:07:29,230 --> 00:07:34,596 let's say we have just a list of points. 137 00:07:34,596 --> 00:07:38,830 The convex hull, imagine have a rubber band 138 00:07:38,830 --> 00:07:41,744 and you are going to stretch it out, and you let it go. 139 00:07:41,744 --> 00:07:45,422 And what that's going to do is this. 140 00:07:45,422 --> 00:07:52,520 And the convex hull is just the whole area inside this-- 141 00:07:52,520 --> 00:07:53,690 the rubber band. 142 00:07:53,690 --> 00:07:55,160 OK? 143 00:07:55,160 --> 00:07:58,116 And then another way we can represent 144 00:07:58,116 --> 00:08:02,650 convex polytope is with a set of inequalities, 145 00:08:02,650 --> 00:08:07,250 so for example, here we have four lines. 146 00:08:07,250 --> 00:08:09,220 Here's the equation for each line. 147 00:08:09,220 --> 00:08:13,620 So let's say this red line, we want anything 148 00:08:13,620 --> 00:08:15,640 below the red line. 149 00:08:15,640 --> 00:08:18,970 This blue line, we want anything to the right, so anything 150 00:08:18,970 --> 00:08:20,310 greater than, and so on. 151 00:08:20,310 --> 00:08:23,350 So this area is the intersection of all these inequalities. 152 00:08:23,350 --> 00:08:24,748 OK? 153 00:08:24,748 --> 00:08:29,090 And each of these representations 154 00:08:29,090 --> 00:08:32,409 has an advantage over the other. 155 00:08:32,409 --> 00:08:37,200 Vertices are good to test for emptiness because when 156 00:08:37,200 --> 00:08:40,260 our set of vertices is empty, then our convex polytope 157 00:08:40,260 --> 00:08:41,789 is going to be empty. 158 00:08:41,789 --> 00:08:47,070 And this inequalities is very useful for testing membership, 159 00:08:47,070 --> 00:08:50,240 because for any points, we can just 160 00:08:50,240 --> 00:08:51,650 plug it in to every inequality. 161 00:08:51,650 --> 00:08:53,390 And if it's true for every inequality, 162 00:08:53,390 --> 00:08:57,575 then it is in the whole group. 163 00:08:57,575 --> 00:09:02,430 And convexity, I'll just explain it briefly. 164 00:09:02,430 --> 00:09:08,730 Convexity means that any two points inside our region-- 165 00:09:08,730 --> 00:09:12,340 our region is not non-convex is for the line connecting 166 00:09:12,340 --> 00:09:13,664 these two points. 167 00:09:13,664 --> 00:09:16,080 All the points in that line are going to be in the region. 168 00:09:16,080 --> 00:09:18,455 So here you can see that this is convex. 169 00:09:18,455 --> 00:09:22,850 And here, this red area is outside the region, 170 00:09:22,850 --> 00:09:25,470 so this other region is non-convex. 171 00:09:25,470 --> 00:09:27,860 And convexity is going to be important for the algorithms 172 00:09:27,860 --> 00:09:29,410 later on. 173 00:09:29,410 --> 00:09:32,716 Gerard will talk more about them. 174 00:09:32,716 --> 00:09:33,620 OK? 175 00:09:33,620 --> 00:09:35,910 Other than convex polytopes, we can also 176 00:09:35,910 --> 00:09:39,640 use ellipsoids to represent reach sets. 177 00:09:39,640 --> 00:09:42,610 So ellipsoids are just the extension of ellipses 178 00:09:42,610 --> 00:09:45,525 to n spaces, n dimensions. 179 00:09:45,525 --> 00:09:49,170 And a convex polytope is defined by this. 180 00:09:49,170 --> 00:09:51,160 x is just all the points inside the polytopes, 181 00:09:51,160 --> 00:09:52,445 inside the ellipse. 182 00:09:52,445 --> 00:09:54,910 v is the center. 183 00:09:54,910 --> 00:10:02,970 And A just tells us about this, how deform the ellipsis. 184 00:10:02,970 --> 00:10:04,278 Any questions? 185 00:10:07,682 --> 00:10:08,182 OK. 186 00:10:10,767 --> 00:10:13,310 And one of the reasons why we like 187 00:10:13,310 --> 00:10:17,300 convex polytopes, why we like ellipsis, ellipsoids, 188 00:10:17,300 --> 00:10:21,270 is because of their enclosure under linear operators. 189 00:10:21,270 --> 00:10:24,020 So let's say we have P that is convex 190 00:10:24,020 --> 00:10:25,178 polytope or an ellipsoid. 191 00:10:25,178 --> 00:10:30,880 Then, if we have a matrix A, then A times 192 00:10:30,880 --> 00:10:33,140 P will be defined that way. 193 00:10:33,140 --> 00:10:37,980 It is still going to be a convex polytope or an ellipsoid. 194 00:10:37,980 --> 00:10:39,880 So if we have something like this, 195 00:10:39,880 --> 00:10:41,740 then this can maybe getting formed, 196 00:10:41,740 --> 00:10:44,584 but it's still going to be convex, a convex polytope. 197 00:10:48,460 --> 00:10:51,070 And the reason why this is nice is that, 198 00:10:51,070 --> 00:10:56,901 if we have a linear system defined this way or this way, 199 00:10:56,901 --> 00:10:58,920 and then if we start with a-- 200 00:10:58,920 --> 00:11:04,930 basically, if we started with a convex set of states, then 201 00:11:04,930 --> 00:11:07,630 our reach sets are always going to be convex because we're just 202 00:11:07,630 --> 00:11:11,334 multiplying by A. And this is very nice 203 00:11:11,334 --> 00:11:13,500 to represent-- this tells us that our representation 204 00:11:13,500 --> 00:11:17,976 is going to be good because we can just use convex polytopes, 205 00:11:17,976 --> 00:11:22,150 ellipsoids, and stick with those. 206 00:11:22,150 --> 00:11:25,974 And then just a technical-- 207 00:11:25,974 --> 00:11:30,050 OK, so even though the reach sets are going to be convex, 208 00:11:30,050 --> 00:11:34,890 the reachable set might not be convex. 209 00:11:34,890 --> 00:11:40,700 But it will always be a union of convex polytopes or ellipsoids. 210 00:11:40,700 --> 00:11:43,200 For example, let's say, in the previous example, 211 00:11:43,200 --> 00:11:45,020 we started here. 212 00:11:45,020 --> 00:11:48,480 Then we need, after one time set, we were here. 213 00:11:48,480 --> 00:11:50,060 So these are the two things. 214 00:11:50,060 --> 00:11:53,540 And then our reachable set is the union of both of them. 215 00:11:53,540 --> 00:11:56,480 This is clearly not convex. 216 00:11:56,480 --> 00:12:00,640 But it is a union of convex polytopes. 217 00:12:00,640 --> 00:12:03,880 So we can represent everything within it. 218 00:12:03,880 --> 00:12:04,870 OK? 219 00:12:04,870 --> 00:12:08,496 Any questions before I move on to [INAUDIBLE]?? 220 00:12:08,496 --> 00:12:09,978 OK, thank you. 221 00:12:18,376 --> 00:12:20,230 PRESENTER 2: OK, so now that have understood 222 00:12:20,230 --> 00:12:23,690 what reachability is and how [INAUDIBLE] represents, 223 00:12:23,690 --> 00:12:26,037 and before we dwell into more theoretical aspects 224 00:12:26,037 --> 00:12:26,662 of [INAUDIBLE]. 225 00:12:26,662 --> 00:12:30,486 Here are some cool applications of reachability. 226 00:12:30,486 --> 00:12:35,162 So there are many applications of reachability to robots 227 00:12:35,162 --> 00:12:37,632 are like complex systems [INAUDIBLE] systems. 228 00:12:37,632 --> 00:12:40,596 One of the applications that has been talked about before 229 00:12:40,596 --> 00:12:42,590 is the robust motion planning. 230 00:12:42,590 --> 00:12:47,080 The early idea is to more of a glider or an airplane 231 00:12:47,080 --> 00:12:50,955 through lots of obstacles, even in the presence of [INAUDIBLE] 232 00:12:50,955 --> 00:12:52,380 these and [INAUDIBLE]. 233 00:12:52,380 --> 00:12:54,140 They're already crashing into obstacles, 234 00:12:54,140 --> 00:12:57,080 even when they are [INAUDIBLE]. 235 00:12:57,080 --> 00:12:58,882 [INAUDIBLE] applications of reachability 236 00:12:58,882 --> 00:13:03,802 to control complex systems like by parallel working robots. 237 00:13:03,802 --> 00:13:07,492 Here you can see that we are controlling [INAUDIBLE] simple 238 00:13:07,492 --> 00:13:10,220 soccer ball with something. 239 00:13:10,220 --> 00:13:12,280 And more importantly, reachability 240 00:13:12,280 --> 00:13:16,768 is used for very fine safety properties, for safety reasons, 241 00:13:16,768 --> 00:13:19,198 like aircraft collision avoidance. 242 00:13:19,198 --> 00:13:23,100 So in those [INAUDIBLE] we're going [INAUDIBLE],, 243 00:13:23,100 --> 00:13:24,730 robust motion planning. 244 00:13:24,730 --> 00:13:27,670 If you're interested in other things, there are papers 245 00:13:27,670 --> 00:13:31,600 and there are [INAUDIBLE]. 246 00:13:31,600 --> 00:13:33,370 So the goal of motion planning is 247 00:13:33,370 --> 00:13:37,235 to find a set of control inputs that take you from the start 248 00:13:37,235 --> 00:13:39,259 state to the goal state. 249 00:13:39,259 --> 00:13:41,311 So in this example-- without colliding 250 00:13:41,311 --> 00:13:45,550 with any of the obstacles. 251 00:13:45,550 --> 00:13:49,342 So here, this is one possible path from the start 252 00:13:49,342 --> 00:13:51,326 state to the goal state. 253 00:13:51,326 --> 00:13:52,814 So it just looks nice. 254 00:13:52,814 --> 00:13:55,294 [INAUDIBLE] collective things of the obstacles. 255 00:13:55,294 --> 00:13:58,094 But if you get the controls to this cart 256 00:13:58,094 --> 00:13:59,510 and then give it a real robot, you 257 00:13:59,510 --> 00:14:04,222 might find it going-- doing something like this. 258 00:14:04,222 --> 00:14:08,020 So this is because of the path that you-- algorithm 259 00:14:08,020 --> 00:14:11,543 that you use for planning this path is-- that's not taking 260 00:14:11,543 --> 00:14:13,168 into account any of the uncertain areas 261 00:14:13,168 --> 00:14:15,152 in the environment or [INAUDIBLE].. 262 00:14:15,152 --> 00:14:18,991 So there are different kinds of uncertainties. 263 00:14:18,991 --> 00:14:20,740 One of them is environmental disturbances, 264 00:14:20,740 --> 00:14:22,540 like there is wind here. 265 00:14:22,540 --> 00:14:26,060 So that can move you over off your planned path. 266 00:14:26,060 --> 00:14:27,910 And there can be modeling errors. 267 00:14:27,910 --> 00:14:30,772 The model that you use to represent your complex system 268 00:14:30,772 --> 00:14:31,980 might just be an approximate. 269 00:14:31,980 --> 00:14:34,465 So the real world is different. 270 00:14:34,465 --> 00:14:36,453 And there are state uncertainty. 271 00:14:36,453 --> 00:14:41,420 So the things that you used for measuring your position 272 00:14:41,420 --> 00:14:43,481 or velocity are also approximate, so there 273 00:14:43,481 --> 00:14:44,882 are uncertainties. 274 00:14:44,882 --> 00:14:47,220 [INAUDIBLE] there can be some randomness 275 00:14:47,220 --> 00:14:48,651 in the initial conditions. 276 00:14:48,651 --> 00:14:51,513 You are thinking of starting the robot at 0,0, 277 00:14:51,513 --> 00:14:53,712 but in practice, you might actually 278 00:14:53,712 --> 00:14:57,044 be starting at [INAUDIBLE] 0, [INAUDIBLE].. 279 00:14:57,044 --> 00:15:01,810 So there is randomness in initial conditions. 280 00:15:01,810 --> 00:15:03,550 The goal of robust motion planning 281 00:15:03,550 --> 00:15:08,265 is to have some guarantees with some confidence 282 00:15:08,265 --> 00:15:11,335 that the system will reach the goal set without getting on 283 00:15:11,335 --> 00:15:13,276 with the obstacles even in presence 284 00:15:13,276 --> 00:15:14,240 of these uncertainties. 285 00:15:14,240 --> 00:15:16,168 So this is the problem. 286 00:15:16,168 --> 00:15:18,740 So let's look at some of the solutions that 287 00:15:18,740 --> 00:15:21,515 come up for solving robust motion [INAUDIBLE].. 288 00:15:21,515 --> 00:15:23,369 So this is a timeline. 289 00:15:23,369 --> 00:15:24,910 So there are three different systems. 290 00:15:24,910 --> 00:15:28,320 And all of them have a goal concept 291 00:15:28,320 --> 00:15:33,648 where they use some representation to represent 292 00:15:33,648 --> 00:15:36,546 the reach sets, the set of possible state 293 00:15:36,546 --> 00:15:38,000 that the system be. 294 00:15:38,000 --> 00:15:40,240 And then instead of searching for a single trajectory 295 00:15:40,240 --> 00:15:43,526 to a state, they search for these representations 296 00:15:43,526 --> 00:15:46,612 so that each final self-serviced representations that 297 00:15:46,612 --> 00:15:48,588 can go from the start state to the goal state, 298 00:15:48,588 --> 00:15:52,046 you won't hit any of the obstacles. 299 00:15:52,046 --> 00:15:55,490 So earlier Bradley and Zhao and Frazzoli 300 00:15:55,490 --> 00:15:57,490 came up with this concept called the flow tubes. 301 00:15:57,490 --> 00:15:59,990 It's [INAUDIBLE] presenting makes sense. 302 00:15:59,990 --> 00:16:03,451 And we will know all about the [INAUDIBLE] of the [INAUDIBLE].. 303 00:16:03,451 --> 00:16:05,738 So one approach that we use is that we 304 00:16:05,738 --> 00:16:08,321 have a set of initial states and we have a set of goal states. 305 00:16:08,321 --> 00:16:12,821 So flow tube is a combination of all the possible paths that 306 00:16:12,821 --> 00:16:15,210 will get you from any point in the initial state 307 00:16:15,210 --> 00:16:16,545 and point in goal state. 308 00:16:16,545 --> 00:16:21,137 So this is kind of representing all possible [INAUDIBLE].. 309 00:16:21,137 --> 00:16:23,542 So and then you search for these flow tubes 310 00:16:23,542 --> 00:16:26,909 to be a path to get your [INAUDIBLE].. 311 00:16:26,909 --> 00:16:32,850 And [INAUDIBLE] constraints so that you can also 312 00:16:32,850 --> 00:16:35,412 reason about complex systems and revise 313 00:16:35,412 --> 00:16:38,849 spatial and temporal coordinations like the walking 314 00:16:38,849 --> 00:16:41,795 robot that you have seen before. 315 00:16:41,795 --> 00:16:50,800 An [INAUDIBLE] about for using funnels for motion planning. 316 00:16:50,800 --> 00:16:54,350 So funnels is also a similar concept to produce. 317 00:16:54,350 --> 00:16:58,994 It's kind of like a [INAUDIBLE] region around your path. 318 00:16:58,994 --> 00:17:00,646 So that if you are inside a funnel, 319 00:17:00,646 --> 00:17:02,396 you're guaranteed to be inside the funnel. 320 00:17:02,396 --> 00:17:04,510 So in this picture, we're going to [INAUDIBLE] 321 00:17:04,510 --> 00:17:06,880 motion planning using funnels. 322 00:17:06,880 --> 00:17:10,198 Again, there are references for the other people's [INAUDIBLE].. 323 00:17:13,042 --> 00:17:15,698 So instead, you'll be using funnels [INAUDIBLE] 324 00:17:15,698 --> 00:17:18,158 for every path, you compute some region 325 00:17:18,158 --> 00:17:21,461 around the path that is a stable region. 326 00:17:21,461 --> 00:17:22,586 And that's called a funnel. 327 00:17:22,586 --> 00:17:25,538 [INAUDIBLE] your funnels [INAUDIBLE],, 328 00:17:25,538 --> 00:17:28,251 but for this part of the lecture, 329 00:17:28,251 --> 00:17:30,556 we are assuming we don't have a hundred of funnels, 330 00:17:30,556 --> 00:17:35,022 and that you'll see how to use these funnels to do motion 331 00:17:35,022 --> 00:17:35,974 planning. 332 00:17:35,974 --> 00:17:37,878 So the previous example is here. 333 00:17:37,878 --> 00:17:40,006 The [INAUDIBLE] funnel [INAUDIBLE] flied by. 334 00:17:40,006 --> 00:17:45,490 You see that it collides with the trees and [INAUDIBLE].. 335 00:17:45,490 --> 00:17:47,041 Then [INAUDIBLE] like these funnels 336 00:17:47,041 --> 00:17:50,546 are [INAUDIBLE] uncertainty in the world that you have. 337 00:17:50,546 --> 00:17:56,615 If [INAUDIBLE] everything with uncertainties, [INAUDIBLE] 338 00:17:56,615 --> 00:17:59,050 and then you compare funnels for that. 339 00:17:59,050 --> 00:18:00,511 Any questions so far? 340 00:18:04,407 --> 00:18:08,303 AUDIENCE: Can you please say again definition of funnel? 341 00:18:08,303 --> 00:18:10,750 PRESENTER 2: So it's kind of something that [INAUDIBLE] 342 00:18:10,750 --> 00:18:13,034 around [INAUDIBLE] around-- 343 00:18:13,034 --> 00:18:16,962 like you have a [INAUDIBLE] around there. 344 00:18:16,962 --> 00:18:20,399 So I think Gerard with explain more about it. 345 00:18:20,399 --> 00:18:23,836 So the [INAUDIBLE] with funnels is 346 00:18:23,836 --> 00:18:25,800 that you are inside the funnel at the point. 347 00:18:25,800 --> 00:18:27,273 When you [INAUDIBLE]. 348 00:18:31,692 --> 00:18:34,147 It's like [INAUDIBLE]. 349 00:18:34,147 --> 00:18:37,130 AUDIENCE: Yeah, you have an [INAUDIBLE].. 350 00:18:37,130 --> 00:18:39,780 So a funnel is basically-- 351 00:18:39,780 --> 00:18:42,402 it's kind of like a reach set around a certain point too. 352 00:18:42,402 --> 00:18:45,112 So the way that you do it is you have some [INAUDIBLE] 353 00:18:45,112 --> 00:18:45,612 trajectory. 354 00:18:45,612 --> 00:18:48,640 And then at each node point in that trajectory, 355 00:18:48,640 --> 00:18:50,903 you compute some kind of reachable 356 00:18:50,903 --> 00:18:53,270 set at that node point. 357 00:18:53,270 --> 00:18:56,440 And so you blow it up, and it becomes some kind of ellipsoid. 358 00:18:56,440 --> 00:18:58,320 And as long as you're within that ellipsoid, 359 00:18:58,320 --> 00:18:59,785 no matter what disturbance you get, 360 00:18:59,785 --> 00:19:01,826 you're going to go back towards the nominal path. 361 00:19:01,826 --> 00:19:04,690 And then so, when you join all of those ellipsoids 362 00:19:04,690 --> 00:19:07,600 over the trajectory, then you get a certain kind of funnel. 363 00:19:07,600 --> 00:19:09,790 And as long as you're inside that funnel, 364 00:19:09,790 --> 00:19:11,290 you're going to stay on that funnel. 365 00:19:11,290 --> 00:19:13,118 And you're going to be on the path you 366 00:19:13,118 --> 00:19:15,140 want to be at with some disturbance in this 367 00:19:15,140 --> 00:19:16,900 [INAUDIBLE]. 368 00:19:16,900 --> 00:19:18,702 So that the great thing that there would 369 00:19:18,702 --> 00:19:20,305 be an example of a funnel. 370 00:19:20,305 --> 00:19:21,930 As long as you're in the funnel, you're 371 00:19:21,930 --> 00:19:23,560 going to stay in the funnel, basically. 372 00:19:23,560 --> 00:19:27,085 AUDIENCE: So is this considered the control, or is 373 00:19:27,085 --> 00:19:28,289 it only the dynamics? 374 00:19:28,289 --> 00:19:30,288 PRESENTER 1: It's the dynamics with the control. 375 00:19:30,288 --> 00:19:34,590 So it's the flow tube system. 376 00:19:34,590 --> 00:19:36,215 PRESENTER 2: Yeah, so, you'll learn 377 00:19:36,215 --> 00:19:37,298 more of those [INAUDIBLE]. 378 00:19:39,974 --> 00:19:41,390 AUDIENCE: Let me just quickly add. 379 00:19:41,390 --> 00:19:44,350 So a funnel is type of flow tube, right? 380 00:19:44,350 --> 00:19:46,320 I mean, just different people either use 381 00:19:46,320 --> 00:19:48,450 the same terminology, use different terminology. 382 00:19:48,450 --> 00:19:50,940 Each of the applications of flow tubes 383 00:19:50,940 --> 00:19:53,316 has some invariant, which is different. 384 00:19:53,316 --> 00:19:56,010 And the particular invariant on this one 385 00:19:56,010 --> 00:19:59,550 is that if you are you in the funnel 386 00:19:59,550 --> 00:20:03,100 and you apply the LQR component, [INAUDIBLE] then 387 00:20:03,100 --> 00:20:05,366 you're guaranteed to stay within that tube. 388 00:20:05,366 --> 00:20:07,820 AUDIENCE: But I thought the flow tube is actually 389 00:20:07,820 --> 00:20:13,580 like getting smaller and smaller in the funnel [INAUDIBLE].. 390 00:20:13,580 --> 00:20:14,870 AUDIENCE: Not necessarily. 391 00:20:14,870 --> 00:20:16,980 In general, a flow tube is simply 392 00:20:16,980 --> 00:20:20,180 a bundle of trajectories, which capture some common features. 393 00:20:20,180 --> 00:20:22,636 And then maybe that they move to a limit of cycle, 394 00:20:22,636 --> 00:20:25,790 and maybe they stabilize to a point, and maybe that the move 395 00:20:25,790 --> 00:20:29,080 to a goal, maybe that they always maintain. 396 00:20:29,080 --> 00:20:31,130 They're stable within a tube. 397 00:20:31,130 --> 00:20:33,130 In a funnel they focus particularly on stability 398 00:20:33,130 --> 00:20:38,914 to disturbance and then staying within the tube. 399 00:20:38,914 --> 00:20:41,324 PRESENTER 2: OK, so the [INAUDIBLE] example 400 00:20:41,324 --> 00:20:47,432 is kind of useful to combine the reachability motion planning. 401 00:20:47,432 --> 00:20:49,428 So here is another situation where 402 00:20:49,428 --> 00:20:51,379 getting to the goal from the start [INAUDIBLE] 403 00:20:51,379 --> 00:20:53,420 and there are a couple of sort of trees lined up. 404 00:20:53,420 --> 00:20:57,412 But there is a path that goes in between the [INAUDIBLE].. 405 00:21:00,420 --> 00:21:03,952 This path looks kind of risky because it's 406 00:21:03,952 --> 00:21:05,940 pretty close to the two trees. 407 00:21:05,940 --> 00:21:07,679 But there is another path we can take 408 00:21:07,679 --> 00:21:09,916 which travel around the trees. 409 00:21:09,916 --> 00:21:15,880 And so if you don't need the [INAUDIBLE] safe. 410 00:21:15,880 --> 00:21:17,870 But maybe that's [INAUDIBLE] too. 411 00:21:17,870 --> 00:21:20,490 So that's why we do the combined reachability 412 00:21:20,490 --> 00:21:21,758 with motion planning. 413 00:21:21,758 --> 00:21:23,674 So if you combine that, you might 414 00:21:23,674 --> 00:21:26,229 find that the first path, if you compute a flow 415 00:21:26,229 --> 00:21:27,895 tube for the first path, [INAUDIBLE] it 416 00:21:27,895 --> 00:21:29,144 does not hit any of the trees. 417 00:21:29,144 --> 00:21:30,310 And it's indeed safe. 418 00:21:30,310 --> 00:21:32,964 But it might happen that the second path 419 00:21:32,964 --> 00:21:38,800 is more susceptible to the disturbances in [INAUDIBLE].. 420 00:21:38,800 --> 00:21:42,195 So that's why [INAUDIBLE] and also [INAUDIBLE] 421 00:21:42,195 --> 00:21:43,650 combined motion planning. 422 00:21:43,650 --> 00:21:48,500 Because what's intuitive is not actual. 423 00:21:48,500 --> 00:21:51,750 So far it's all about [INAUDIBLE] planning. 424 00:21:51,750 --> 00:21:54,412 So the [INAUDIBLE] everything about the environment, 425 00:21:54,412 --> 00:21:56,340 like where the obstacles are. 426 00:21:56,340 --> 00:21:57,532 So that's not always true. 427 00:21:57,532 --> 00:21:58,484 [INAUDIBLE] 428 00:21:58,484 --> 00:22:00,864 So you don't always know all the obstacles beforehand. 429 00:22:00,864 --> 00:22:04,672 You can't [INAUDIBLE] as you [INAUDIBLE].. 430 00:22:04,672 --> 00:22:07,421 So one problem with doing online planning, 431 00:22:07,421 --> 00:22:10,307 there is that you can not do any expensive computations 432 00:22:10,307 --> 00:22:11,750 during runtime. 433 00:22:11,750 --> 00:22:14,636 And all of these funnels can be places that are very expensive. 434 00:22:14,636 --> 00:22:16,560 [INAUDIBLE] solving an optimization problem. 435 00:22:16,560 --> 00:22:19,450 It takes a couple of hours to finish them. 436 00:22:19,450 --> 00:22:21,907 So you can not compute funnels on the fly. 437 00:22:21,907 --> 00:22:24,950 So the idea here is that you compute the funnels offline 438 00:22:24,950 --> 00:22:27,774 and do all possible funnels from the start state 439 00:22:27,774 --> 00:22:31,968 to the end state, and then use this library to [INAUDIBLE].. 440 00:22:31,968 --> 00:22:37,800 So you have the same [INAUDIBLE] going from the start state 441 00:22:37,800 --> 00:22:40,240 [INAUDIBLE] the goal state in the archives. 442 00:22:40,240 --> 00:22:43,204 So these are the set of possible paths from start state 443 00:22:43,204 --> 00:22:44,310 to goal state. 444 00:22:44,310 --> 00:22:46,043 And then from each possible trajectory, 445 00:22:46,043 --> 00:22:48,010 you compute the funnel. 446 00:22:48,010 --> 00:22:50,196 And the idea of online planning is 447 00:22:50,196 --> 00:22:52,300 to now find the sequence of these funnels 448 00:22:52,300 --> 00:22:55,266 that you can compose that takes you from the start state 449 00:22:55,266 --> 00:22:59,210 to end state without hitting any of the obstacles. 450 00:22:59,210 --> 00:23:02,168 So an important component here is 451 00:23:02,168 --> 00:23:07,610 finding a sequential composition of funnels [INAUDIBLE].. 452 00:23:07,610 --> 00:23:09,220 AUDIENCE: So why plan-- 453 00:23:09,220 --> 00:23:11,350 you're doing a forward search with funnels. 454 00:23:11,350 --> 00:23:14,310 Why use funnels instead of something like RIT? 455 00:23:17,810 --> 00:23:23,310 PRESENTER 2: I actually don't know what RITs are. 456 00:23:23,310 --> 00:23:25,138 AUDIENCE: Can I guess at the answer? 457 00:23:25,138 --> 00:23:28,810 AUDIENCE: [INAUDIBLE] thing. 458 00:23:28,810 --> 00:23:31,706 AUDIENCE: Why use funnels instead of RITs. 459 00:23:31,706 --> 00:23:33,819 AUDIENCE: Well, or why use funnels as opposed 460 00:23:33,819 --> 00:23:34,527 to anything else. 461 00:23:34,527 --> 00:23:37,710 AUDIENCE: Well, I guess RITs, you 462 00:23:37,710 --> 00:23:39,330 have like the classical example, where 463 00:23:39,330 --> 00:23:41,580 you want to go through a very-- 464 00:23:41,580 --> 00:23:45,820 well, if you want to go through a very narrow region. 465 00:23:45,820 --> 00:23:47,696 Well, first of all, I guess RITs are 466 00:23:47,696 --> 00:23:49,070 going to have a hard time finding 467 00:23:49,070 --> 00:23:51,820 the narrow region because you'd need like a point 468 00:23:51,820 --> 00:23:53,320 to go through that. 469 00:23:53,320 --> 00:23:56,830 And then, RITs by themselves don't really 470 00:23:56,830 --> 00:24:02,208 account for errors, maybe some extension. 471 00:24:02,208 --> 00:24:05,500 But funnels, you can be sure that you're always going 472 00:24:05,500 --> 00:24:06,870 to stay inside the funnel. 473 00:24:06,870 --> 00:24:08,090 So this if for [INAUDIBLE]. 474 00:24:08,090 --> 00:24:10,940 This is to make sure that we don't crash into anything. 475 00:24:10,940 --> 00:24:12,932 Does that answer your question? 476 00:24:12,932 --> 00:24:14,390 AUDIENCE: Do you want to answer it? 477 00:24:14,390 --> 00:24:19,870 AUDIENCE: Yeah, I think what he just said, it's-- 478 00:24:19,870 --> 00:24:23,450 the point of the funnels is that they provide a control policy. 479 00:24:23,450 --> 00:24:26,920 The actual reference trajectory that you have on the left 480 00:24:26,920 --> 00:24:28,690 is the motion planning. 481 00:24:28,690 --> 00:24:31,010 But with the funnels, you get a control policy. 482 00:24:31,010 --> 00:24:33,000 Because when you start executing a motion plan 483 00:24:33,000 --> 00:24:35,740 there's always going to be a disturbance. 484 00:24:35,740 --> 00:24:38,000 So you want a control policy that 485 00:24:38,000 --> 00:24:40,458 keeps you on that trajectory. 486 00:24:40,458 --> 00:24:43,115 And there's all sorts of control policies. 487 00:24:43,115 --> 00:24:45,775 You could use simple EID controllers. 488 00:24:45,775 --> 00:24:48,066 They work in some cases. 489 00:24:48,066 --> 00:24:49,855 But funnels provide better guarantees 490 00:24:49,855 --> 00:24:51,643 for the power plants. 491 00:24:56,553 --> 00:24:59,008 PRESENTER 2: Yeah, so the idea is 492 00:24:59,008 --> 00:25:01,454 that you have trajectory [INAUDIBLE] funnels 493 00:25:01,454 --> 00:25:01,954 [INAUDIBLE]. 494 00:25:01,954 --> 00:25:03,918 You're using this funnels compliance. 495 00:25:03,918 --> 00:25:07,832 You compose them to find your path to those presets 496 00:25:07,832 --> 00:25:09,760 that you wanted to go in. 497 00:25:13,616 --> 00:25:16,560 So you can not always compose funnels. 498 00:25:16,560 --> 00:25:20,234 Some [INAUDIBLE] positions that are legal, and some of those 499 00:25:20,234 --> 00:25:20,970 are not legal. 500 00:25:20,970 --> 00:25:25,380 So [INAUDIBLE] example, a time going from left to right. 501 00:25:25,380 --> 00:25:28,774 So you have a situation where there is a funnel. 502 00:25:28,774 --> 00:25:31,254 You're trying to compose a bigger funnel with a smaller 503 00:25:31,254 --> 00:25:32,246 funnel. 504 00:25:32,246 --> 00:25:34,726 And you have another situation where 505 00:25:34,726 --> 00:25:37,330 you're going to compose a smaller funnel with a bigger 506 00:25:37,330 --> 00:25:38,710 funnel. 507 00:25:38,710 --> 00:25:41,520 So what if I would have said, [INAUDIBLE].. 508 00:25:41,520 --> 00:25:43,770 So which of these combinations do you 509 00:25:43,770 --> 00:25:47,422 think is a legal composition? 510 00:25:47,422 --> 00:25:48,414 [INAUDIBLE] 511 00:25:51,390 --> 00:25:54,862 Legal or illegal, I mean that which of these [INAUDIBLE] 512 00:25:54,862 --> 00:25:58,334 do not receive the [INAUDIBLE]? 513 00:25:58,334 --> 00:25:59,822 AUDIENCE: The bottom [INAUDIBLE].. 514 00:25:59,822 --> 00:26:01,155 PRESENTER 2: The bottom one is-- 515 00:26:01,155 --> 00:26:03,390 AUDIENCE: --is actually marked because-- 516 00:26:03,390 --> 00:26:09,640 with the top one, if you're at the very top [INAUDIBLE].. 517 00:26:09,640 --> 00:26:10,940 PRESENTER 2: Yeah, that's true. 518 00:26:10,940 --> 00:26:13,892 So the first one is like illegal. 519 00:26:13,892 --> 00:26:16,352 And the second one is a legal composition. 520 00:26:16,352 --> 00:26:18,545 So why is that? 521 00:26:18,545 --> 00:26:20,030 So if you are inside this funnel, 522 00:26:20,030 --> 00:26:23,572 what this guarantees that you will stay inside the funnel. 523 00:26:23,572 --> 00:26:26,654 But it could happen that you can go through the funnel 524 00:26:26,654 --> 00:26:28,598 and make your outside [INAUDIBLE] funnel. 525 00:26:28,598 --> 00:26:32,486 And after this step, you can go anywhere. 526 00:26:32,486 --> 00:26:35,888 So you can [INAUDIBLE]. 527 00:26:35,888 --> 00:26:38,318 But if you're inside the second case, 528 00:26:38,318 --> 00:26:40,852 after you're through the first part, 529 00:26:40,852 --> 00:26:42,310 you're still set at the second part 530 00:26:42,310 --> 00:26:43,601 then we can decide [INAUDIBLE]. 531 00:26:48,720 --> 00:26:51,666 So now let's actually look at those online planning 532 00:26:51,666 --> 00:26:53,139 algorithms. 533 00:26:53,139 --> 00:26:56,576 So this the case of your planning [INAUDIBLE].. 534 00:26:56,576 --> 00:26:59,031 First you can [INAUDIBLE] with quantum's chronicles. 535 00:26:59,031 --> 00:27:00,995 It makes our analysis easier. 536 00:27:03,941 --> 00:27:06,912 So this is the algorithm that's going through each of the steps 537 00:27:06,912 --> 00:27:08,400 one-by-one. 538 00:27:08,400 --> 00:27:10,384 So this is online planning. 539 00:27:10,384 --> 00:27:12,864 You will always one information beforehand. 540 00:27:12,864 --> 00:27:14,848 [INAUDIBLE] 541 00:27:14,848 --> 00:27:17,824 And you get to know more about it as we go. 542 00:27:17,824 --> 00:27:21,792 But you still have the initial planned funnel sequence 543 00:27:21,792 --> 00:27:24,272 that takes you from the start state to goal state. 544 00:27:24,272 --> 00:27:29,232 And then you check for any new obstacles information 545 00:27:29,232 --> 00:27:31,216 when you go out from the sensor. 546 00:27:31,216 --> 00:27:36,176 So this is the region that you can sense some obstacles. 547 00:27:36,176 --> 00:27:38,676 And you also get the current state of your robot. 548 00:27:38,676 --> 00:27:41,574 This is also something concern [INAUDIBLE].. 549 00:27:45,430 --> 00:27:47,358 And you check if your current funnel path 550 00:27:47,358 --> 00:27:50,250 collides with any of the obstacles you have seen so far. 551 00:27:50,250 --> 00:27:52,670 And in this case, the answer is no. 552 00:27:52,670 --> 00:27:56,742 So then you apply the control corresponding 553 00:27:56,742 --> 00:28:00,200 to this funnel for this [INAUDIBLE] location and time. 554 00:28:00,200 --> 00:28:04,152 That take your one [INAUDIBLE] problem. 555 00:28:04,152 --> 00:28:07,610 Then you put Goto and then do this again and again. 556 00:28:07,610 --> 00:28:10,521 So [INAUDIBLE] update from certain information. 557 00:28:10,521 --> 00:28:11,562 And one obstacle is here. 558 00:28:11,562 --> 00:28:14,032 You can differentiate the other one. 559 00:28:14,032 --> 00:28:16,255 When we check at the Replan collides 560 00:28:16,255 --> 00:28:19,960 with any of the obstacles-- in this case, yes. 561 00:28:19,960 --> 00:28:21,936 So since it collides with the obstacles, 562 00:28:21,936 --> 00:28:23,912 you need to [INAUDIBLE] funnels. 563 00:28:23,912 --> 00:28:26,390 So how do you delete funnels? 564 00:28:26,390 --> 00:28:27,875 You have all this library funnels. 565 00:28:27,875 --> 00:28:30,310 So you go to each of them, and then you 566 00:28:30,310 --> 00:28:36,610 find one set of funnels that has-- 567 00:28:36,610 --> 00:28:38,602 you find a set of funnels that starts 568 00:28:38,602 --> 00:28:42,761 with your current location and [INAUDIBLE] of the obstacles. 569 00:28:42,761 --> 00:28:49,248 So this was a point, first of all, of a new funnel sequence. 570 00:28:49,248 --> 00:28:51,743 And then, again, you apply controls 571 00:28:51,743 --> 00:28:54,238 corresponding to the new sequence 572 00:28:54,238 --> 00:28:59,727 and doing it two dimensional [INAUDIBLE],, In the position, 573 00:28:59,727 --> 00:29:02,721 if it collides, and again collides, 574 00:29:02,721 --> 00:29:07,212 so you redirect [INAUDIBLE] apply 575 00:29:07,212 --> 00:29:09,707 the control for that funnel. 576 00:29:09,707 --> 00:29:11,703 And get a full solution. 577 00:29:11,703 --> 00:29:16,194 And then it collides, so you have to replan that part. 578 00:29:16,194 --> 00:29:18,689 Then you're OK. 579 00:29:18,689 --> 00:29:20,685 So now you reached the goal. 580 00:29:20,685 --> 00:29:26,426 So those are the planning plan using funnel libraries. 581 00:29:26,426 --> 00:29:28,911 And questions about it? 582 00:29:28,911 --> 00:29:31,450 AUDIENCE: Can you say more about the connotation 583 00:29:31,450 --> 00:29:32,760 of the funnel libraries? 584 00:29:32,760 --> 00:29:35,740 So they generate a set of funnels, which 585 00:29:35,740 --> 00:29:39,320 covered the complete set space? 586 00:29:39,320 --> 00:29:42,150 PRESENTER 2: Yeah, so that's like-- 587 00:29:42,150 --> 00:29:47,200 there's every possible [INAUDIBLE] end point. 588 00:29:47,200 --> 00:29:50,560 And so then you can make [INAUDIBLE] 589 00:29:50,560 --> 00:29:53,440 or least, have it for every initial [INAUDIBLE] 590 00:29:53,440 --> 00:29:55,840 you can compose all these [INAUDIBLE].. 591 00:29:55,840 --> 00:30:00,270 So if you're doing it for every initial [INAUDIBLE].. 592 00:30:00,270 --> 00:30:02,442 So you might have a funnel that exactly starts 593 00:30:02,442 --> 00:30:03,775 at your initial position. 594 00:30:03,775 --> 00:30:05,941 If there is a funnel that already started somewhere, 595 00:30:05,941 --> 00:30:08,376 where it goes through the funnel-- goes 596 00:30:08,376 --> 00:30:10,324 through your initial funnel, you can use that. 597 00:30:10,324 --> 00:30:14,220 So it's a truncation of your funnel. 598 00:30:14,220 --> 00:30:17,629 [INAUDIBLE] 599 00:30:17,629 --> 00:30:19,090 Any other questions? 600 00:30:22,500 --> 00:30:25,180 AUDIENCE: Why can't you use-- 601 00:30:25,180 --> 00:30:28,102 if it really is an online problem 602 00:30:28,102 --> 00:30:31,040 that you're not going to run out of a funnel, 603 00:30:31,040 --> 00:30:34,215 that you won't reach a dead end, will it be adaptable enough 604 00:30:34,215 --> 00:30:37,480 to make a U-turn at all times, either 605 00:30:37,480 --> 00:30:41,550 that there's come latency that would perfectly time it. 606 00:30:41,550 --> 00:30:44,360 And the robustness, that you'll always be able to find a path, 607 00:30:44,360 --> 00:30:46,234 even if we have guarantees that you'll always 608 00:30:46,234 --> 00:30:48,932 stay within a funnel. 609 00:30:48,932 --> 00:30:51,267 PRESENTER 2: So are you asking what the situation, 610 00:30:51,267 --> 00:30:54,882 like the funnel, if you're going [INAUDIBLE] backtrack? 611 00:30:54,882 --> 00:30:57,090 AUDIENCE: Yeah, just because these obstacles come out 612 00:30:57,090 --> 00:31:00,800 of nowhere, seemingly, that you don't have a guaranteed 613 00:31:00,800 --> 00:31:03,246 that the funnel is safe through the entire duration 614 00:31:03,246 --> 00:31:07,060 of our execution. 615 00:31:07,060 --> 00:31:10,766 PRESENTER 2: Yeah, so that's a valid point. 616 00:31:10,766 --> 00:31:15,050 [INAUDIBLE] you can use the adaptive [INAUDIBLE] backtrack 617 00:31:15,050 --> 00:31:18,860 [INAUDIBLE] combined with the [INAUDIBLE].. 618 00:31:18,860 --> 00:31:22,360 AUDIENCE: Even if the robots can't actually backtrack? 619 00:31:22,360 --> 00:31:24,100 PRESENTER 2: If the robots can what? 620 00:31:24,100 --> 00:31:25,535 Come back, or-- 621 00:31:25,535 --> 00:31:27,535 AUDIENCE: I mean, I guess, it's just like a UAB, 622 00:31:27,535 --> 00:31:29,710 it couldn't do that. 623 00:31:29,710 --> 00:31:34,296 I'm just saying, what guarantees do you need to have about 624 00:31:34,296 --> 00:31:38,305 the obstacles , since it's an online setup, right? 625 00:31:38,305 --> 00:31:40,554 PRESENTER 2: Maybe you'd have some initial information 626 00:31:40,554 --> 00:31:42,989 about some kind of obstacles. 627 00:31:42,989 --> 00:31:45,424 You can find a [INAUDIBLE] trajectory-- 628 00:31:45,424 --> 00:31:48,050 you can find a trajectory that goes from the start sequence. 629 00:31:48,050 --> 00:31:49,296 It's like [INAUDIBLE]. 630 00:31:53,264 --> 00:31:55,690 AUDIENCE: Well, I'm just going to say. 631 00:31:55,690 --> 00:31:58,592 If you're in some kind of glider that can't necessarily-- 632 00:31:58,592 --> 00:32:00,640 like a quart of stop, go backwards, 633 00:32:00,640 --> 00:32:02,480 stuff like that, depending on how funnels 634 00:32:02,480 --> 00:32:04,055 you can plan backwards. 635 00:32:04,055 --> 00:32:06,179 But if you're in some kind of glider going straight 636 00:32:06,179 --> 00:32:07,564 at a wall, there's no guarantee. 637 00:32:07,564 --> 00:32:10,510 You're just screwed up. 638 00:32:10,510 --> 00:32:12,560 I mean, even humans, they make errors. 639 00:32:12,560 --> 00:32:15,930 There's situations that humans can't dynamically get out of. 640 00:32:15,930 --> 00:32:17,770 So if your system is dynamically not 641 00:32:17,770 --> 00:32:20,110 going to be able to make a sharp enough turn 642 00:32:20,110 --> 00:32:22,394 or go straight into something, no matter 643 00:32:22,394 --> 00:32:23,935 how smart your planning algorithm is, 644 00:32:23,935 --> 00:32:25,901 no matter if you're like, there's a wall right there. 645 00:32:25,901 --> 00:32:26,620 Stop. 646 00:32:26,620 --> 00:32:29,608 If you can't stop, and you just go straight at it. 647 00:32:29,608 --> 00:32:31,268 There's obviously situations where 648 00:32:31,268 --> 00:32:33,592 you can pretty much [INAUDIBLE] algorithm [INAUDIBLE].. 649 00:32:33,592 --> 00:32:34,717 You're just going to crash. 650 00:32:34,717 --> 00:32:40,170 Hopefully you're in a situation where you're not [INAUDIBLE].. 651 00:32:40,170 --> 00:32:43,570 It's also based on how far away your sets are received. 652 00:32:43,570 --> 00:32:45,720 Your sensor can only see 5 meters ahead, 653 00:32:45,720 --> 00:32:49,050 and you're going 5 meters per second, [INAUDIBLE].. 654 00:32:49,050 --> 00:32:50,941 You're going to have make perfect decisions. 655 00:32:50,941 --> 00:32:53,150 But if your sensor has perfect information 656 00:32:53,150 --> 00:32:56,410 about the environment, then what seems like the initial best 657 00:32:56,410 --> 00:33:00,225 path may not actually be once you know the full [INAUDIBLE].. 658 00:33:00,225 --> 00:33:05,582 So it depends on the [INAUDIBLE] sensors. 659 00:33:05,582 --> 00:33:09,965 PRESENTER 2: Any other questions? 660 00:33:09,965 --> 00:33:14,748 OK, so finally I have some demos showing simulations 661 00:33:14,748 --> 00:33:18,716 of [INAUDIBLE]. 662 00:33:18,716 --> 00:33:20,700 Let's see how [INAUDIBLE]. 663 00:33:31,116 --> 00:33:33,100 So the [INAUDIBLE] applications. 664 00:33:33,100 --> 00:33:38,610 So we have seen how to use funnels 665 00:33:38,610 --> 00:33:40,660 to do robust motion planning. 666 00:33:40,660 --> 00:33:42,818 We also have the offline planning 667 00:33:42,818 --> 00:33:45,805 and come to do online planning using a sequence funnels 668 00:33:45,805 --> 00:33:48,010 and the funnel libraries. 669 00:33:48,010 --> 00:33:51,930 I will talk more about computing these funnels and flow tubes 670 00:33:51,930 --> 00:33:53,890 and other kind of reach sets. 671 00:34:05,929 --> 00:34:07,554 PRESENTER 3: Yeah, so I'm going to talk 672 00:34:07,554 --> 00:34:10,475 about how to actually compute flow tubes 673 00:34:10,475 --> 00:34:11,949 and funnels generally. 674 00:34:11,949 --> 00:34:15,999 I'm going to give an example of what each one is used for. 675 00:34:15,999 --> 00:34:18,540 So we had the question before, how are flow tubes and funnels 676 00:34:18,540 --> 00:34:19,950 different? 677 00:34:19,950 --> 00:34:27,800 Flow tubes are-- so easiest way is 678 00:34:27,800 --> 00:34:31,442 they're both some kind of way to guarantee that you're going 679 00:34:31,442 --> 00:34:34,389 to-- the robustness guarantees. 680 00:34:34,389 --> 00:34:37,190 So say you are here. 681 00:34:37,190 --> 00:34:39,150 You want to be here. 682 00:34:39,150 --> 00:34:41,909 They're both going to-- in most planning algorithms, 683 00:34:41,909 --> 00:34:44,070 you've got some kind of path from here to here. 684 00:34:44,070 --> 00:34:46,199 But say there's some disturbance [INAUDIBLE] 685 00:34:46,199 --> 00:34:47,960 down here or something. 686 00:34:47,960 --> 00:34:49,655 You don't know if you're going to be 687 00:34:49,655 --> 00:34:50,780 able to reach there or not. 688 00:34:50,780 --> 00:34:53,570 What a flow tube is is it's some kind 689 00:34:53,570 --> 00:34:57,980 of set of trajectories that will basically 690 00:34:57,980 --> 00:35:01,680 go from some initial state, which are here, 691 00:35:01,680 --> 00:35:03,990 to some goal states over here. 692 00:35:03,990 --> 00:35:06,540 And basically, [INAUDIBLE] if you're within this flow tube, 693 00:35:06,540 --> 00:35:09,090 and you get pushed out on a different trajectory, 694 00:35:09,090 --> 00:35:11,030 you know how to get from here to here anyway. 695 00:35:11,030 --> 00:35:12,780 So you don't really care if you're pushed, 696 00:35:12,780 --> 00:35:14,440 as long as you're still within here. 697 00:35:14,440 --> 00:35:16,293 A funnel-- let's see. 698 00:35:21,950 --> 00:35:26,300 So a funnel is, say you compute some nominal trajectory 699 00:35:26,300 --> 00:35:28,000 around here. 700 00:35:28,000 --> 00:35:31,194 Using the system theory and stability theory, 701 00:35:31,194 --> 00:35:34,410 you know that, with your control inputs, 702 00:35:34,410 --> 00:35:37,664 you're going to stay at each of these points. 703 00:35:37,664 --> 00:35:40,545 And you're going to stay within here within these circles. 704 00:35:40,545 --> 00:35:41,962 So if you get pushed out here, you 705 00:35:41,962 --> 00:35:44,253 know you're going to be able to get back onto your path 706 00:35:44,253 --> 00:35:46,119 when you're going to try to converge back 707 00:35:46,119 --> 00:35:47,394 to your nominal path. 708 00:35:47,394 --> 00:35:50,740 So you have some sort of funnel. 709 00:35:50,740 --> 00:35:52,874 Yes? 710 00:35:52,874 --> 00:35:54,040 AUDIENCE: I have a question. 711 00:35:54,040 --> 00:35:55,770 How complete is the funnel? 712 00:35:55,770 --> 00:35:59,310 It sort of related to what Brian was saying. 713 00:35:59,310 --> 00:36:02,370 PRESENTER 3: Completeness as in like these edges are-- 714 00:36:02,370 --> 00:36:05,110 AUDIENCE: Well, if you have a high dimensional state space, 715 00:36:05,110 --> 00:36:09,170 does the funnel cover it completely? 716 00:36:09,170 --> 00:36:10,950 AUDIENCE: There's a set of funnels. 717 00:36:10,950 --> 00:36:12,604 PRESENTER 3: A set of funnels-- 718 00:36:12,604 --> 00:36:15,270 AUDIENCE: So the question wasn't about if the individual funnel, 719 00:36:15,270 --> 00:36:19,150 but in the particular [INAUDIBLE].. 720 00:36:19,150 --> 00:36:21,740 When he generates a set of funnels, 721 00:36:21,740 --> 00:36:25,316 does the set of funnels completely cover the space? 722 00:36:25,316 --> 00:36:27,233 PRESENTER 3: It depends how much time you 723 00:36:27,233 --> 00:36:29,640 want to put into it, generally. 724 00:36:29,640 --> 00:36:33,240 If you only compute two funnels, one of them goes over here 725 00:36:33,240 --> 00:36:35,426 and one of them goes here, then you're not you're 726 00:36:35,426 --> 00:36:37,320 not going to be covered in these states. 727 00:36:37,320 --> 00:36:39,830 So it depends on how much computation you 728 00:36:39,830 --> 00:36:41,846 want to do offline previously. 729 00:36:41,846 --> 00:36:43,520 So you get a set of funnels that's here, 730 00:36:43,520 --> 00:36:45,830 another one that's right here, another one that's here. 731 00:36:45,830 --> 00:36:47,740 And you have your big library of funnels 732 00:36:47,740 --> 00:36:49,180 that cover the whole space. 733 00:36:49,180 --> 00:36:51,880 AUDIENCE: I think I skimmed that paper. 734 00:36:51,880 --> 00:36:55,016 And, yeah, I think it is probabilistically [INAUDIBLE].. 735 00:36:55,016 --> 00:36:56,824 PRESENTER 3: OK, yeah. 736 00:36:56,824 --> 00:37:00,150 All right, yeah, but I mean, as far as computing 737 00:37:00,150 --> 00:37:03,918 where you're going to go, if you compute that path of it, 738 00:37:03,918 --> 00:37:04,750 you should be good. 739 00:37:04,750 --> 00:37:05,888 But yes, you're right. 740 00:37:05,888 --> 00:37:09,600 The probabilistically-- 741 00:37:09,600 --> 00:37:11,860 So here is what I explained. 742 00:37:11,860 --> 00:37:13,736 Normally you have your optimal trajectory. 743 00:37:13,736 --> 00:37:15,235 But if you get pushed off of it, you 744 00:37:15,235 --> 00:37:16,870 may not get back to the goal state. 745 00:37:16,870 --> 00:37:20,162 But if you have a set of trajectories 746 00:37:20,162 --> 00:37:22,354 that go from some initial states to your goal state, 747 00:37:22,354 --> 00:37:23,770 and you stay within that, you know 748 00:37:23,770 --> 00:37:29,720 how to get to your goal state, even if you get pushed. 749 00:37:29,720 --> 00:37:31,960 Again, so some ways to approximate flow tubes, 750 00:37:31,960 --> 00:37:33,930 you can use some kind of polytope, 751 00:37:33,930 --> 00:37:36,650 which is as Gabriel explained previously, 752 00:37:36,650 --> 00:37:39,440 as long as it's a convex polytope, 753 00:37:39,440 --> 00:37:41,720 you can take that cross-sectional area 754 00:37:41,720 --> 00:37:44,780 and you can propagate it down here for the tube. 755 00:37:44,780 --> 00:37:51,678 You can also use ellipsoids or rectangles as cross-sections. 756 00:37:51,678 --> 00:37:54,500 And important point is to know that they're 757 00:37:54,500 --> 00:37:56,480 intercross-sectional approximations. 758 00:37:56,480 --> 00:37:58,730 So as you see here, you may-- 759 00:37:58,730 --> 00:38:00,720 this would be your actually flow tube. 760 00:38:00,720 --> 00:38:02,770 But your approximation has to be an inter one, 761 00:38:02,770 --> 00:38:04,685 because that guarantees that you're with a flow tube. 762 00:38:04,685 --> 00:38:07,226 But it means you may also miss some of the outer trajectories 763 00:38:07,226 --> 00:38:11,264 , which also, if you want to compute a more thorough 764 00:38:11,264 --> 00:38:13,216 approximation area you get better flow tube 765 00:38:13,216 --> 00:38:16,144 representation. 766 00:38:16,144 --> 00:38:22,450 OK, so robust planning, you plan a trajectory from here to here, 767 00:38:22,450 --> 00:38:25,740 and that should be good. 768 00:38:25,740 --> 00:38:27,182 But then you get disturbed. 769 00:38:27,182 --> 00:38:28,640 You're still within the trajectory, 770 00:38:28,640 --> 00:38:30,466 so you're still good. 771 00:38:30,466 --> 00:38:34,680 But some work done by Professor Williams and Hoffman 772 00:38:34,680 --> 00:38:35,760 shows that-- 773 00:38:35,760 --> 00:38:40,660 so what do you do when you're actually outside of the flow? 774 00:38:40,660 --> 00:38:43,380 Now what you can do is temporal planning. 775 00:38:43,380 --> 00:38:45,407 So we're using the algorithm that we previously 776 00:38:45,407 --> 00:38:46,360 learned in class. 777 00:38:46,360 --> 00:38:51,260 You can take your goal state and move the timeline back 778 00:38:51,260 --> 00:38:52,830 to a different time. 779 00:38:52,830 --> 00:38:56,950 So here, this flow tube is, if you're here 780 00:38:56,950 --> 00:39:00,010 in a certain amount of time, can you get to here? 781 00:39:00,010 --> 00:39:03,450 And if you get outside of it, then you can't do that anymore. 782 00:39:03,450 --> 00:39:05,670 But you can just use our algorithm 783 00:39:05,670 --> 00:39:08,819 and move back the goal time. 784 00:39:08,819 --> 00:39:10,360 And then when you move the goal time, 785 00:39:10,360 --> 00:39:12,980 the whole funnel shifts because now you're 786 00:39:12,980 --> 00:39:14,280 going to be over here. 787 00:39:14,280 --> 00:39:16,635 And you don't care about getting here at this time. 788 00:39:16,635 --> 00:39:18,810 You can here at this time now. 789 00:39:18,810 --> 00:39:20,510 So then you move over. 790 00:39:20,510 --> 00:39:23,290 And now where you, you get back into it 791 00:39:23,290 --> 00:39:25,206 because you're now inside the flow tube again. 792 00:39:27,978 --> 00:39:31,470 OK, so one example is a humanoid footstep planning. 793 00:39:31,470 --> 00:39:32,925 So this take a complex systems. 794 00:39:32,925 --> 00:39:35,250 You have a bunch of different parts of the system. 795 00:39:35,250 --> 00:39:37,000 You have your center of mass dynamics. 796 00:39:37,000 --> 00:39:40,090 You have your leg dynamics, foot dynamics. 797 00:39:40,090 --> 00:39:44,700 So what you're trying to do is plan your footsteps forward 798 00:39:44,700 --> 00:39:46,340 and through time. 799 00:39:46,340 --> 00:39:48,030 So you have your original plan of where 800 00:39:48,030 --> 00:39:50,800 you want your footsteps to be for different parts. 801 00:39:50,800 --> 00:39:54,820 So there's discrete things that happen in the system, 802 00:39:54,820 --> 00:39:57,660 as we've previously seen in a lecture. 803 00:39:57,660 --> 00:40:01,320 So one thing that can happen is your left foot hits the ground, 804 00:40:01,320 --> 00:40:02,993 and then your right foot lifts off. 805 00:40:02,993 --> 00:40:04,951 You're left foot lifts off-- or your right foot 806 00:40:04,951 --> 00:40:06,915 hits the ground, and then your left foot lifts off. 807 00:40:06,915 --> 00:40:08,831 So those are different things that can happen. 808 00:40:08,831 --> 00:40:12,510 So you have certain temporal constraints 809 00:40:12,510 --> 00:40:15,550 on the system that you want to [INAUDIBLE] by. 810 00:40:15,550 --> 00:40:20,480 And so as you start planning, you 811 00:40:20,480 --> 00:40:23,680 have flow tubes to get you from one step to another step. 812 00:40:23,680 --> 00:40:27,290 And that guarantees that you're going to stay within those. 813 00:40:27,290 --> 00:40:29,112 Even if you get disturbed and get pushed, 814 00:40:29,112 --> 00:40:32,510 your feet can still get from one step to the other. 815 00:40:32,510 --> 00:40:34,110 But then also, with the thing that we 816 00:40:34,110 --> 00:40:37,630 saw in the previous slide, you can move the timeline 817 00:40:37,630 --> 00:40:39,540 back and forth, as long as you're 818 00:40:39,540 --> 00:40:43,860 withing your temporal constraints that you had. 819 00:40:43,860 --> 00:40:46,260 So those are flow tubes for the feet. 820 00:40:46,260 --> 00:40:47,884 And that would guarantee that your feet 821 00:40:47,884 --> 00:40:49,980 go where they want to. 822 00:40:49,980 --> 00:40:52,050 But you can decompose the system to also 823 00:40:52,050 --> 00:40:54,210 have flow tubes for the center of mass. 824 00:40:54,210 --> 00:40:55,870 So what the center of mass does is 825 00:40:55,870 --> 00:41:00,220 to be broken down into separate flow tubes. 826 00:41:00,220 --> 00:41:02,180 So does that make sense? 827 00:41:05,610 --> 00:41:08,040 So this is the humanoid footstep planning 828 00:41:08,040 --> 00:41:09,320 that we saw previously. 829 00:41:09,320 --> 00:41:10,736 And now you're going to understand 830 00:41:10,736 --> 00:41:13,080 how the feet are planned to go to each of the blocks. 831 00:41:13,080 --> 00:41:17,412 [INAUDIBLE] go video. 832 00:41:17,412 --> 00:41:18,900 AUDIENCE: I have a quick question. 833 00:41:18,900 --> 00:41:20,610 You said that you have a separate flow 834 00:41:20,610 --> 00:41:21,776 tube for the center of mass. 835 00:41:21,776 --> 00:41:24,335 But aren't they really just the same flow tube, 836 00:41:24,335 --> 00:41:25,630 like a high dimensional-- 837 00:41:25,630 --> 00:41:28,010 PRESENTER 3: Yes, but that's-- when you decompose this 838 00:41:28,010 --> 00:41:31,387 and then you [INAUDIBLE] flow tube rather than a full system 839 00:41:31,387 --> 00:41:32,220 high dimensionality. 840 00:41:32,220 --> 00:41:35,392 AUDIENCE: Is it hard to recouple them? 841 00:41:35,392 --> 00:41:38,062 How do you know that they're consistent [INAUDIBLE]?? 842 00:41:38,062 --> 00:41:39,520 PRESENTER 3: Well, it still adheres 843 00:41:39,520 --> 00:41:40,860 to the dynamics of the system. 844 00:41:40,860 --> 00:41:45,355 So you can couple how you want, how you want it to move. 845 00:41:45,355 --> 00:41:47,350 And you want to move any basic constraints. 846 00:41:47,350 --> 00:41:50,059 But eventually, as you said, when you move your feet, 847 00:41:50,059 --> 00:41:51,600 your center of mass is going to move. 848 00:41:51,600 --> 00:41:53,320 When you step forward, you're center of mass 849 00:41:53,320 --> 00:41:54,070 is going to move. 850 00:41:54,070 --> 00:41:58,200 [INAUDIBLE] analysis of it. 851 00:41:58,200 --> 00:42:00,661 AUDIENCE: Can I make a comment about that? 852 00:42:00,661 --> 00:42:04,950 Yeah, there's a technique called feedback linearization that 853 00:42:04,950 --> 00:42:09,460 can be used to decompose a complex non-linear dynamics 854 00:42:09,460 --> 00:42:12,750 assuming to the set of linear ones. 855 00:42:12,750 --> 00:42:16,330 And that allows you to treat the center of mass 856 00:42:16,330 --> 00:42:20,500 as a [INAUDIBLE] separately from a control in the flow tube 857 00:42:20,500 --> 00:42:24,370 computations and while guaranteeing that [INAUDIBLE].. 858 00:42:27,280 --> 00:42:28,735 PRESENTER 3: So this is work done 859 00:42:28,735 --> 00:42:31,160 by Professor Williams experiment, which is actually 860 00:42:31,160 --> 00:42:34,070 [INAUDIBLE]. 861 00:42:34,070 --> 00:42:39,253 This is the robot doing the same kind of thing on Mars. 862 00:42:43,090 --> 00:42:46,230 This is walking on stones and planning its footsteps 863 00:42:46,230 --> 00:42:50,110 through a pretty complicated environment. 864 00:42:50,110 --> 00:42:52,231 The stones are not exactly in the path 865 00:42:52,231 --> 00:42:53,814 where you would normally want to walk. 866 00:42:53,814 --> 00:42:58,081 But moving them around, as long as you're within the flow tube, 867 00:42:58,081 --> 00:43:13,510 you'll get to wherever [INAUDIBLE] Awesome. 868 00:43:13,510 --> 00:43:17,772 So that was how to compute flow tubes and-- oh, 869 00:43:17,772 --> 00:43:19,980 and another way you can also compute flow tubes 870 00:43:19,980 --> 00:43:21,270 is by learning. 871 00:43:21,270 --> 00:43:23,910 So you can have some kind of example, 872 00:43:23,910 --> 00:43:27,150 move through trajectories from one state to the other. 873 00:43:27,150 --> 00:43:29,942 And you can estimate a flow tube based 874 00:43:29,942 --> 00:43:32,025 on where the trajectories are, as long as the flow 875 00:43:32,025 --> 00:43:37,660 tube encompasses all the possible trajectories. 876 00:43:37,660 --> 00:43:40,056 AUDIENCE: Is the dynamics always linear? 877 00:43:40,056 --> 00:43:43,330 Because I though if your polytope, 878 00:43:43,330 --> 00:43:45,970 and it would be like kind of, is it a complex proposal when 879 00:43:45,970 --> 00:43:48,127 you would use a non-linear dynamic, 880 00:43:48,127 --> 00:43:49,528 then you move a little bit. 881 00:43:49,528 --> 00:43:53,057 Then you would move a little bit, not being the convex shape 882 00:43:53,057 --> 00:43:54,020 then. 883 00:43:54,020 --> 00:43:57,150 PRESENTER 3: I mean, you can plan non-linear systems too. 884 00:43:57,150 --> 00:43:59,320 But as far as I'm concerned, [INAUDIBLE].. 885 00:44:03,550 --> 00:44:07,300 AUDIENCE: So, yeah, the polytopes 886 00:44:07,300 --> 00:44:10,200 generally require linearization with the system. 887 00:44:10,200 --> 00:44:14,760 And there's a limit to the validity of the-- the range 888 00:44:14,760 --> 00:44:16,580 of the linearization. 889 00:44:16,580 --> 00:44:18,651 And that's concluded in-- 890 00:44:18,651 --> 00:44:20,151 that's one of the things that limits 891 00:44:20,151 --> 00:44:23,050 the size of the polytopes. 892 00:44:23,050 --> 00:44:24,300 AUDIENCE: But it is the case-- 893 00:44:24,300 --> 00:44:25,450 I mean, you've just got to understand. 894 00:44:25,450 --> 00:44:27,324 The thing that you do for non-linear systems, 895 00:44:27,324 --> 00:44:29,850 which is a piece-- if you're making a piece-wise linear, 896 00:44:29,850 --> 00:44:31,030 but you are-- 897 00:44:31,030 --> 00:44:33,249 you are linearizing them at the w step. 898 00:44:33,249 --> 00:44:34,915 And there's other techniques that people 899 00:44:34,915 --> 00:44:39,012 have developed with flow tubes where you do require the input 900 00:44:39,012 --> 00:44:40,120 system to be linear. 901 00:44:40,120 --> 00:44:41,453 Right here it can be non-linear. 902 00:44:41,453 --> 00:44:43,922 But... it's an approximation. 903 00:44:49,240 --> 00:44:51,230 PRESENTER 3: OK, so funnels, the goal 904 00:44:51,230 --> 00:44:54,015 is basically to find a region that guarantees you safety 905 00:44:54,015 --> 00:44:57,370 on a bounded uncertainty. 906 00:44:57,370 --> 00:45:00,090 So there are regions of finite time variance 907 00:45:00,090 --> 00:45:03,550 throughout all time during that trajectory that you've defined. 908 00:45:03,550 --> 00:45:07,986 And so in practice, there's a trade-off between computation 909 00:45:07,986 --> 00:45:09,850 time and guarantees. 910 00:45:09,850 --> 00:45:12,600 So if your trajectory, if you compute more nodes, 911 00:45:12,600 --> 00:45:15,111 then you're going to be able to fill in these little gaps 912 00:45:15,111 --> 00:45:17,416 between each of the ellipsoid. 913 00:45:17,416 --> 00:45:19,280 Whereas, if you lessen them, it's 914 00:45:19,280 --> 00:45:22,070 going to take less time to compute each ellipsoid. 915 00:45:22,070 --> 00:45:25,940 But it's also going to not be as guaranteed. 916 00:45:25,940 --> 00:45:27,737 And especially important when planning 917 00:45:27,737 --> 00:45:30,070 is that, if you're planning in some kind of point cloud, 918 00:45:30,070 --> 00:45:34,240 then some of the points may be right here, where one ellipsoid 919 00:45:34,240 --> 00:45:35,830 doesn't intersect the other. 920 00:45:35,830 --> 00:45:38,710 And you might think that's a safe path, when actually it's 921 00:45:38,710 --> 00:45:39,640 not at all. 922 00:45:43,360 --> 00:45:46,380 Yeah, so an example is this little glider, 923 00:45:46,380 --> 00:45:49,650 which is given in the paper by Anirudha and Russ. 924 00:45:49,650 --> 00:45:56,640 And so what you start doing is you create your system, 925 00:45:56,640 --> 00:45:57,720 your function. 926 00:45:57,720 --> 00:45:59,752 And this is dependent on your state, time, 927 00:45:59,752 --> 00:46:03,310 and w, which is some kind of bounded uncertainty. 928 00:46:03,310 --> 00:46:06,030 And you choose the bounded uncertainty, 929 00:46:06,030 --> 00:46:11,820 which means that you choose some kind of reasonable estimate 930 00:46:11,820 --> 00:46:14,820 of how much can happen to your system 931 00:46:14,820 --> 00:46:17,430 that you didn't account for. 932 00:46:17,430 --> 00:46:19,510 So you start it. 933 00:46:19,510 --> 00:46:21,900 Your velocity can be different from what you want. 934 00:46:21,900 --> 00:46:24,650 Say your nominal velocity is 10 meters per second. 935 00:46:24,650 --> 00:46:26,839 You can have some kind of drag, or you 936 00:46:26,839 --> 00:46:29,170 can have some inconsistency in your motors. 937 00:46:29,170 --> 00:46:31,800 And so what you expect is that there's 938 00:46:31,800 --> 00:46:36,340 a plus or minus 0.5 meters per second to your nominal. 939 00:46:36,340 --> 00:46:39,460 So when you start running your equations, 940 00:46:39,460 --> 00:46:41,810 this is what you expect your robot to do. 941 00:46:41,810 --> 00:46:44,666 And then that can vary forward and backwards depending 942 00:46:44,666 --> 00:46:46,520 on what your actual was. 943 00:46:46,520 --> 00:46:50,284 But then you add some kind of wind on your system, which-- 944 00:46:50,284 --> 00:46:52,200 some kind of cross-sectional wind, [INAUDIBLE] 945 00:46:52,200 --> 00:46:55,301 direction, which we see there. 946 00:46:55,301 --> 00:46:58,690 And so what that ends up doing is pushing you 947 00:46:58,690 --> 00:47:01,335 system away from where you want it to actually be. 948 00:47:01,335 --> 00:47:06,010 So now you have some kind of velocity uncertainty. 949 00:47:06,010 --> 00:47:10,820 And you also have wind that can push you one way or the other. 950 00:47:10,820 --> 00:47:14,237 So how do you deal with that? 951 00:47:14,237 --> 00:47:16,070 Well, you start with your nominal trajectory 952 00:47:16,070 --> 00:47:19,622 that has a plane flying perfectly straight. 953 00:47:19,622 --> 00:47:20,580 There's no uncertainty. 954 00:47:20,580 --> 00:47:22,360 Everything is deterministic. 955 00:47:22,360 --> 00:47:23,940 And it acts like you want it to. 956 00:47:27,500 --> 00:47:31,120 And then, so right there the wind hits it. 957 00:47:31,120 --> 00:47:32,200 So what do you do? 958 00:47:32,200 --> 00:47:35,380 You have to have some kind of control, 959 00:47:35,380 --> 00:47:37,150 some kind of controller to bring you back 960 00:47:37,150 --> 00:47:39,750 to your nominal trajectory and try to control you 961 00:47:39,750 --> 00:47:41,090 around the system. 962 00:47:41,090 --> 00:47:46,350 So a standard way to do that is to have a cause function 963 00:47:46,350 --> 00:47:49,390 and create your optimal trajectory. 964 00:47:49,390 --> 00:47:52,320 And this cause function basically, 965 00:47:52,320 --> 00:47:56,520 it kind of mirrors a LQR controller. 966 00:47:56,520 --> 00:47:58,696 And by solving a lot of these equations, which 967 00:47:58,696 --> 00:48:02,260 is a pretty standard process, and to find out how to do that, 968 00:48:02,260 --> 00:48:05,390 you get a controller that tried to bring you back 969 00:48:05,390 --> 00:48:06,737 to your nominal trajectory. 970 00:48:06,737 --> 00:48:09,719 And so you get back. 971 00:48:09,719 --> 00:48:11,210 You're happy. 972 00:48:11,210 --> 00:48:13,089 But you don't have any guarantees 973 00:48:13,089 --> 00:48:14,130 just with the controller. 974 00:48:14,130 --> 00:48:16,640 You don't have any guarantees on how far you can get pushed. 975 00:48:16,640 --> 00:48:19,230 You don't have any guarantees on where you're going to go 976 00:48:19,230 --> 00:48:21,910 and where your system really can be pushed. 977 00:48:25,170 --> 00:48:28,630 So when you compute the funnel, what you do 978 00:48:28,630 --> 00:48:30,695 is you choose a Lyapunov function. 979 00:48:30,695 --> 00:48:34,844 And I'll explain what that is in the next slide. 980 00:48:34,844 --> 00:48:37,144 And you try to minimize the space around that function 981 00:48:37,144 --> 00:48:38,310 that tried to bring it back. 982 00:48:38,310 --> 00:48:41,276 So what this is is-- 983 00:48:41,276 --> 00:48:46,110 so you have some kind of your initial state. 984 00:48:46,110 --> 00:48:47,520 This would be the initial state. 985 00:48:47,520 --> 00:48:50,590 And the whole region, what you're trying to do 986 00:48:50,590 --> 00:48:53,786 is minimize it around it. 987 00:48:53,786 --> 00:48:56,686 So does that makes sense why you do that? 988 00:48:56,686 --> 00:48:59,250 So your trajectory is basically going 989 00:48:59,250 --> 00:49:01,667 to go anywhere around here. 990 00:49:01,667 --> 00:49:04,000 And what you're trying to do is find the region of space 991 00:49:04,000 --> 00:49:05,610 that minimizes-- 992 00:49:05,610 --> 00:49:07,620 that encompasses all of the places 993 00:49:07,620 --> 00:49:10,890 that your system is going to get to. 994 00:49:10,890 --> 00:49:13,030 So that's easy to do when you it out 995 00:49:13,030 --> 00:49:15,860 and you know exactly where your system's going to go. 996 00:49:15,860 --> 00:49:19,040 It's easy to just shrink your ball around it. 997 00:49:19,040 --> 00:49:20,950 But you actually compute that. 998 00:49:25,220 --> 00:49:25,803 No, forget it. 999 00:49:25,803 --> 00:49:26,610 OK. 1000 00:49:26,610 --> 00:49:30,180 So when you have that for each point in the trajectory, 1001 00:49:30,180 --> 00:49:32,209 you know that you're going to stay within here, 1002 00:49:32,209 --> 00:49:33,834 because you're going to have some kinds 1003 00:49:33,834 --> 00:49:35,330 of-- from your nominal trajectory, 1004 00:49:35,330 --> 00:49:37,880 you're going to have different places where your system can 1005 00:49:37,880 --> 00:49:42,340 go under the given conditions of velocity and wind uncertainty. 1006 00:49:42,340 --> 00:49:44,160 You're going to go anywhere withing that. 1007 00:49:44,160 --> 00:49:47,319 But as long as you know you're still in that ellipsoid, 1008 00:49:47,319 --> 00:49:49,360 then you're going to stay within those ellipsoids 1009 00:49:49,360 --> 00:49:51,845 as you go down the path. 1010 00:49:51,845 --> 00:49:52,637 Does it make sense? 1011 00:49:52,637 --> 00:49:53,137 Good. 1012 00:49:56,820 --> 00:50:00,200 So the reason they use Lyapunov functions 1013 00:50:00,200 --> 00:50:03,780 is there's different ways to measure stability. 1014 00:50:03,780 --> 00:50:08,175 And so I'll move forward to this. 1015 00:50:08,175 --> 00:50:10,470 So there's different ways to measure stability 1016 00:50:10,470 --> 00:50:13,480 in a non-linear system. 1017 00:50:13,480 --> 00:50:15,544 So in a linear system, you're either unstable 1018 00:50:15,544 --> 00:50:17,210 or you're globally exponentially stable. 1019 00:50:17,210 --> 00:50:19,134 So you're going to converge back to your-- 1020 00:50:19,134 --> 00:50:20,870 to whatever stability equilibrium, 1021 00:50:20,870 --> 00:50:23,920 what you have at an exponential rate. 1022 00:50:23,920 --> 00:50:26,710 But there is also, in non-linear systems, 1023 00:50:26,710 --> 00:50:28,305 there's global exponential stability. 1024 00:50:28,305 --> 00:50:30,270 There asymptotic stability. 1025 00:50:30,270 --> 00:50:32,660 And there's stability in the sense of Lyapunov, 1026 00:50:32,660 --> 00:50:34,330 which is what we care about. 1027 00:50:34,330 --> 00:50:37,015 So the difference between that is-- 1028 00:50:37,015 --> 00:50:39,320 so say this is your nominal. 1029 00:50:39,320 --> 00:50:41,680 And globally exponentially stable 1030 00:50:41,680 --> 00:50:44,310 means that no matter where you start anywhere on the board, 1031 00:50:44,310 --> 00:50:47,080 you're going to be converging back to this equilibrium 1032 00:50:47,080 --> 00:50:49,100 going at an exponential rate. 1033 00:50:49,100 --> 00:50:50,836 So that's the best case scenario. 1034 00:50:50,836 --> 00:50:51,710 That's what you want. 1035 00:50:54,240 --> 00:50:56,080 Asymptotic stability means that you're 1036 00:50:56,080 --> 00:50:59,660 going to be going from somewhere on the board, 1037 00:50:59,660 --> 00:51:02,230 within a certain region, back to this nominal trajectory. 1038 00:51:02,230 --> 00:51:04,163 But it doesn't have to be an exponential rate. 1039 00:51:04,163 --> 00:51:06,815 So you can do something like that, as long as eventually 1040 00:51:06,815 --> 00:51:08,950 you sort of converging back to it. 1041 00:51:08,950 --> 00:51:12,890 And then there's stability in the sense of Lyapunov, 1042 00:51:12,890 --> 00:51:15,000 which is-- so, say you're here. 1043 00:51:15,000 --> 00:51:19,540 Your system can be doing anything, anything crazy, 1044 00:51:19,540 --> 00:51:23,830 as long as it stays within some certain thing, which 1045 00:51:23,830 --> 00:51:27,945 in the 1D case we saw was the little ball going around it. 1046 00:51:27,945 --> 00:51:32,764 So imagine there's like a ball for each of these. 1047 00:51:32,764 --> 00:51:34,930 and this is where your trajectory could possibly go. 1048 00:51:34,930 --> 00:51:37,263 As long as it stays within that, you can say your system 1049 00:51:37,263 --> 00:51:39,302 is stable in the sense Lyapunov. 1050 00:51:39,302 --> 00:51:40,844 Does that make sense? 1051 00:51:40,844 --> 00:51:42,080 Cool. 1052 00:51:42,080 --> 00:51:45,350 So know this, does that-- 1053 00:51:45,350 --> 00:51:47,150 AUDIENCE: I just have a basic question. 1054 00:51:47,150 --> 00:51:52,320 So the Lyapunov function is around a stable set point. 1055 00:51:52,320 --> 00:51:55,390 But the trajectory has non-zero velocity. 1056 00:51:55,390 --> 00:52:01,110 So what is the point that it's stabilizing around? 1057 00:52:01,110 --> 00:52:05,550 PRESENTER 3: You can stabilize around a trajectory, which also 1058 00:52:05,550 --> 00:52:09,050 what the funnels do. 1059 00:52:09,050 --> 00:52:12,375 So we have your little point here. 1060 00:52:12,375 --> 00:52:15,485 And this is your nominal trick, some kind of state. 1061 00:52:15,485 --> 00:52:17,430 And you're wind can knock you this way. 1062 00:52:17,430 --> 00:52:20,510 Your velocity difference can knock you this way or this way. 1063 00:52:20,510 --> 00:52:22,600 But as long as you're still within that, 1064 00:52:22,600 --> 00:52:24,300 You've got to converge back to it. 1065 00:52:24,300 --> 00:52:26,810 And this is the value for your Lyapunov function. 1066 00:52:26,810 --> 00:52:29,936 And these are the different states you can have. 1067 00:52:29,936 --> 00:52:33,040 An important thing to notice is the derivative 1068 00:52:33,040 --> 00:52:36,400 is a negative definite-- or negative semi-definite 1069 00:52:36,400 --> 00:52:38,260 in the case. 1070 00:52:38,260 --> 00:52:41,979 And that means that basically all your trajectories, 1071 00:52:41,979 --> 00:52:43,520 no matter where you go, they're going 1072 00:52:43,520 --> 00:52:45,440 to be going down this cone. 1073 00:52:45,440 --> 00:52:49,731 And eventually they're going to to down to some value. 1074 00:52:49,731 --> 00:52:50,730 So does that make sense? 1075 00:52:50,730 --> 00:52:54,044 That's like pretty amazing stuff and your system stuff. 1076 00:52:54,044 --> 00:52:55,870 Cool. 1077 00:52:55,870 --> 00:52:58,470 So once you know that, it makes sense 1078 00:52:58,470 --> 00:53:00,390 to use Lyapunov functions as candidates 1079 00:53:00,390 --> 00:53:04,044 for computing funnels. 1080 00:53:10,250 --> 00:53:15,246 So an ellipsoid is actually defined by a quadratic Lyapunov 1081 00:53:15,246 --> 00:53:18,600 function, which is down here. 1082 00:53:18,600 --> 00:53:24,890 [INAUDIBLE] shown the equation for an ellipsoid 1083 00:53:24,890 --> 00:53:38,680 is some V times S. So that was the equation for an ellipsoid 1084 00:53:38,680 --> 00:53:40,640 that Gabriel showed previously. 1085 00:53:40,640 --> 00:53:45,130 The quadratic Lyapunov function has the same structure, 1086 00:53:45,130 --> 00:53:51,085 where you have this being x to [INAUDIBLE],, which is basically 1087 00:53:51,085 --> 00:53:52,440 the error of you state. 1088 00:53:52,440 --> 00:53:58,605 So it's some kind of exact mean of the state 1089 00:53:58,605 --> 00:54:03,110 that you're actually in minus x0, which is the nominal point 1090 00:54:03,110 --> 00:54:04,200 that you want to reach. 1091 00:54:04,200 --> 00:54:08,250 So this defines the region around your-- 1092 00:54:08,250 --> 00:54:10,740 the nominal point, which would be somewhere in there. 1093 00:54:10,740 --> 00:54:14,070 And the ellipsoid is computed by doing that minimization 1094 00:54:14,070 --> 00:54:16,630 that I showed you on the previous slides. 1095 00:54:16,630 --> 00:54:20,075 And then you can figure out the region inside of it 1096 00:54:20,075 --> 00:54:21,790 by solving that equation. 1097 00:54:21,790 --> 00:54:26,750 And if it's less than 1, I believe you inside. 1098 00:54:26,750 --> 00:54:28,270 And those are all the red dots that 1099 00:54:28,270 --> 00:54:29,560 show that you're inside of it. 1100 00:54:29,560 --> 00:54:34,336 So that's used when computing trajectories. 1101 00:54:34,336 --> 00:54:37,320 You solve for-- say that you're inside a point cloud, 1102 00:54:37,320 --> 00:54:39,320 you know which points you're going to get inside 1103 00:54:39,320 --> 00:54:40,970 of this ellipsoid. 1104 00:54:40,970 --> 00:54:42,970 So when you're planning, you solve that equation 1105 00:54:42,970 --> 00:54:44,095 for each of the ellipsoids. 1106 00:54:44,095 --> 00:54:46,815 And you know if you're going to hit something or not. 1107 00:54:51,565 --> 00:54:56,360 All right, so this is a video that [? Ani ?] did. 1108 00:54:59,021 --> 00:55:01,010 And this is using the funnel libraries 1109 00:55:01,010 --> 00:55:02,420 for collision avoidance. 1110 00:55:02,420 --> 00:55:05,150 This is showing for just one funnel. 1111 00:55:05,150 --> 00:55:09,000 The glider dynamics were shown in one of the previous slides. 1112 00:55:09,000 --> 00:55:12,160 They were pre-set by the glider dynamics. 1113 00:55:12,160 --> 00:55:16,960 But [INAUDIBLE]. 1114 00:55:16,960 --> 00:55:20,830 So you see right there that there's objects, 1115 00:55:20,830 --> 00:55:25,096 and the glider plans a path around them. 1116 00:55:27,808 --> 00:55:31,370 So the funnels-- this is one possible one. 1117 00:55:31,370 --> 00:55:34,106 Right here, I'm pretty sure they tell it where objects are, 1118 00:55:34,106 --> 00:55:35,730 even though they're not actually there. 1119 00:55:35,730 --> 00:55:40,040 And it finds that funnel being the one the guy wants. 1120 00:55:40,040 --> 00:55:43,170 And you see that throughout the entire path, 1121 00:55:43,170 --> 00:55:45,332 the glider will stay within the funnel. 1122 00:55:51,410 --> 00:55:54,110 And then when you're searching with the online planning 1123 00:55:54,110 --> 00:55:56,450 algorithm that was shown previously, 1124 00:55:56,450 --> 00:55:59,716 it goes through all of these funnels 1125 00:55:59,716 --> 00:56:02,515 and eventually finds the best safe one. 1126 00:56:02,515 --> 00:56:04,915 You won't always find a safe one, as discussed. 1127 00:56:04,915 --> 00:56:06,300 In this case you did. 1128 00:56:06,300 --> 00:56:12,350 But it finds the best one around the path. 1129 00:56:12,350 --> 00:56:13,970 So one way that it finds the best one 1130 00:56:13,970 --> 00:56:17,410 is by finding all of-- so if you're planning a point cloud, 1131 00:56:17,410 --> 00:56:19,640 you find all the points that lie with the ellipsoids. 1132 00:56:19,640 --> 00:56:21,814 And the one with the least amount of points 1133 00:56:21,814 --> 00:56:23,758 is probably going to be the safest one. 1134 00:56:27,660 --> 00:56:31,930 So here's a bunch of different obstacles. 1135 00:56:31,930 --> 00:56:33,956 And it safely maneuvers all. 1136 00:56:33,956 --> 00:56:37,602 And there's some pretty dynamic movements, which is cool too. 1137 00:56:45,966 --> 00:56:47,934 So within that there is-- 1138 00:56:51,870 --> 00:56:54,330 let's see. 1139 00:56:54,330 --> 00:56:55,314 I'm going to back to-- 1140 00:56:59,250 --> 00:57:04,339 is there a way to get back to the full screen [INAUDIBLE]?? 1141 00:57:04,339 --> 00:57:07,748 AUDIENCE: [INAUDIBLE] 1142 00:57:07,748 --> 00:57:20,440 PRESENTER 3: [INAUDIBLE] 1143 00:57:20,440 --> 00:57:23,400 So with the online planning algorithm, 1144 00:57:23,400 --> 00:57:24,805 here's one of the possible paths. 1145 00:57:24,805 --> 00:57:29,054 You have your point cloud of trees. 1146 00:57:29,054 --> 00:57:33,340 And those were shown in the previous, the little round 1147 00:57:33,340 --> 00:57:37,450 thing with the green foxy tree-looking things. 1148 00:57:37,450 --> 00:57:40,165 Using a sensor model, you get a point of that. 1149 00:57:40,165 --> 00:57:42,740 And as you're going, you plan your path. 1150 00:57:42,740 --> 00:57:45,655 And the way that this works is every five meters, 1151 00:57:45,655 --> 00:57:46,330 you plan a path. 1152 00:57:46,330 --> 00:57:47,904 And then as you're flying through it, 1153 00:57:47,904 --> 00:57:49,195 you get new sensor information. 1154 00:57:49,195 --> 00:57:52,282 And you can replan your path using the algorithm. 1155 00:57:57,480 --> 00:57:59,674 And that will guarantee you that you're safe. 1156 00:57:59,674 --> 00:58:01,350 And when you're flying, obviously you 1157 00:58:01,350 --> 00:58:02,580 don't see the funnels. 1158 00:58:02,580 --> 00:58:05,690 But right here you can see there's probably 1159 00:58:05,690 --> 00:58:07,820 one funnel here and then another funnel 1160 00:58:07,820 --> 00:58:10,715 that plans this way, another funnel that goes to here, 1161 00:58:10,715 --> 00:58:12,256 and then another one that goes there. 1162 00:58:12,256 --> 00:58:13,704 And that's a full path. 1163 00:58:13,704 --> 00:58:16,120 And there's also a cool one , because it shows that you go 1164 00:58:16,120 --> 00:58:17,170 through the tree. 1165 00:58:17,170 --> 00:58:18,920 And that's where one of the funnels 1166 00:58:18,920 --> 00:58:21,320 is rather than going around. 1167 00:58:21,320 --> 00:58:24,270 It is possible that you start computing a new funnel-- 1168 00:58:24,270 --> 00:58:27,180 or you start searching a new library here. 1169 00:58:27,180 --> 00:58:30,106 And you may not be able to make it up the way in time, 1170 00:58:30,106 --> 00:58:33,970 given what speed you're going at. 1171 00:58:33,970 --> 00:58:36,385 Does anyone have any questions? 1172 00:58:41,710 --> 00:58:44,140 And this is the online planning algorithm 1173 00:58:44,140 --> 00:58:46,562 that we saw before written out. 1174 00:58:51,272 --> 00:58:54,590 And some of the references, the paper 1175 00:58:54,590 --> 00:58:57,560 from the video that we just saw, that's given here. 1176 00:58:57,560 --> 00:59:00,480 And that also go to the example [INAUDIBLE].. 1177 00:59:00,480 --> 00:59:04,990 Frazzoli was one of the original people 1178 00:59:04,990 --> 00:59:06,397 that computed a flow tube. 1179 00:59:06,397 --> 00:59:10,355 Hoffman and Williams did the temporal planning for footsteps 1180 00:59:10,355 --> 00:59:12,852 and decoupled humanoid system. 1181 00:59:12,852 --> 00:59:21,810 And I did most of the stuff on [INAUDIBLE] for that years ago. 1182 00:59:24,440 --> 00:59:28,220 Another important thing to note that was a big thing 1183 00:59:28,220 --> 00:59:31,830 in my personal research was that even though you may note be 1184 00:59:31,830 --> 00:59:35,293 able to compute-- or that you may not find a funnel that 1185 00:59:35,293 --> 00:59:36,870 necessarily goes-- 1186 00:59:36,870 --> 00:59:39,657 finds a safe path, you can shift that funnel around. 1187 00:59:39,657 --> 00:59:41,490 You could even move it slightly up and down, 1188 00:59:41,490 --> 00:59:43,805 as long as the first ellipsoid is still within-- 1189 00:59:43,805 --> 00:59:47,330 as long as your initial state is still within better ellipsoid. 1190 00:59:47,330 --> 00:59:50,550 And that's easy to do because you can just 1191 00:59:50,550 --> 00:59:54,530 give it a simple transformation between one 1192 00:59:54,530 --> 00:59:55,820 state and the other. 1193 00:59:55,820 --> 00:59:59,069 And if you transform this S matrix, 1194 00:59:59,069 --> 01:00:00,860 then that will transform your entire funnel 1195 01:00:00,860 --> 01:00:02,026 and it will shift it around. 1196 01:00:02,026 --> 01:00:03,630 So you can find your best funnel, 1197 01:00:03,630 --> 01:00:05,045 even though it may hit something. 1198 01:00:05,045 --> 01:00:07,120 If it was slightly shifted to the left, 1199 01:00:07,120 --> 01:00:10,557 you can just shift it using that transformation. 1200 01:00:10,557 --> 01:00:14,485 So that's one of the [INAUDIBLE] funnels too. 1201 01:00:18,413 --> 01:00:22,341 Does everyone understand funnels and flow tubes now? 1202 01:00:22,341 --> 01:00:23,840 AUDIENCE: So I have two questions. 1203 01:00:23,840 --> 01:00:26,083 So the side of that funnel is computed 1204 01:00:26,083 --> 01:00:27,082 by the transform script. 1205 01:00:27,082 --> 01:00:27,665 Is that right? 1206 01:00:27,665 --> 01:00:31,390 PRESENTER 3: Yeah, if you want to get it some ridiculous wind, 1207 01:00:31,390 --> 01:00:33,440 like 1,000 miles per hour, then you're 1208 01:00:33,440 --> 01:00:34,875 going to get huge funnels. 1209 01:00:34,875 --> 01:00:37,300 But that's under some kind of reasonable-- 1210 01:00:37,300 --> 01:00:40,550 you know in this region of the forest or something 1211 01:00:40,550 --> 01:00:43,530 there's only three mile per hour winds or something like that. 1212 01:00:43,530 --> 01:00:47,310 Yeah, that's based a lot on what your counts are. 1213 01:00:47,310 --> 01:00:50,840 AUDIENCE: So do you have any algorithm that in your mind 1214 01:00:50,840 --> 01:00:52,850 that is not using offline [INAUDIBLE]?? 1215 01:00:52,850 --> 01:00:55,178 So this is like mostly you do the offline 1216 01:00:55,178 --> 01:00:56,552 and the you do the online search. 1217 01:00:56,552 --> 01:00:59,904 But if you were in a wild environment, you do nothing. 1218 01:00:59,904 --> 01:01:02,310 Then do you have any [INAUDIBLE] that isn't-- 1219 01:01:02,310 --> 01:01:04,519 PRESENTER 3: I mean, there are algorithms that will-- 1220 01:01:04,519 --> 01:01:06,851 well, just the basic controller will try to get you back 1221 01:01:06,851 --> 01:01:07,770 to nominal trajectory. 1222 01:01:07,770 --> 01:01:09,730 But there's nothing that I know of at least 1223 01:01:09,730 --> 01:01:12,050 that will guarantee you safety and will give you 1224 01:01:12,050 --> 01:01:17,320 an all-encompassing region like flow tube or a funnel. 1225 01:01:17,320 --> 01:01:20,530 So flow tube you find there's an infinite number of paths 1226 01:01:20,530 --> 01:01:22,220 that will get you from here to here 1227 01:01:22,220 --> 01:01:24,720 with your system, basically every little minute 1228 01:01:24,720 --> 01:01:26,132 change that you have. 1229 01:01:26,132 --> 01:01:28,590 And that obviously takes awhile to compute and approximate. 1230 01:01:28,590 --> 01:01:33,260 And the funnels, it takes awhile to compute the regions 1231 01:01:33,260 --> 01:01:34,270 where it can go. 1232 01:01:34,270 --> 01:01:36,204 So I don't know anything that will online 1233 01:01:36,204 --> 01:01:37,550 compute this region. 1234 01:01:37,550 --> 01:01:40,720 But online you will be able to compute some trajectory. 1235 01:01:40,720 --> 01:01:45,156 And then let your controller will take your state error 1236 01:01:45,156 --> 01:01:46,650 and control it. 1237 01:01:46,650 --> 01:01:50,197 But it won't guarantee [INAUDIBLE].. 1238 01:01:50,197 --> 01:01:51,780 AUDIENCE: With the funnels, how do you 1239 01:01:51,780 --> 01:01:54,590 compute your initial set of states, 1240 01:01:54,590 --> 01:01:57,160 or the allowed initial set of states? 1241 01:01:57,160 --> 01:02:00,400 You have these uncertainties, like for the wind and velocity, 1242 01:02:00,400 --> 01:02:05,120 but what about the initial state before those disturbances 1243 01:02:05,120 --> 01:02:05,880 happen? 1244 01:02:05,880 --> 01:02:08,150 You'd probably want more than one initial state. 1245 01:02:16,970 --> 01:02:18,440 AUDIENCE: Here's and eraser. 1246 01:02:18,440 --> 01:02:20,890 PRESENTER 3: Yeah, that'd be good. 1247 01:02:20,890 --> 01:02:21,860 Cool. 1248 01:02:21,860 --> 01:02:22,360 Thanks. 1249 01:02:25,300 --> 01:02:34,488 So with the funnels, so you have your nominal trajectory again, 1250 01:02:34,488 --> 01:02:39,197 and then your ellipsoids around it. 1251 01:02:39,197 --> 01:02:41,530 So when your system starts, you have your initial state. 1252 01:02:41,530 --> 01:02:43,071 And your initial state is just-- it's 1253 01:02:43,071 --> 01:02:45,350 going to be here at time t0. 1254 01:02:45,350 --> 01:02:48,800 But over the time computed, you can 1255 01:02:48,800 --> 01:02:51,262 go over here, or anywhere around here really, 1256 01:02:51,262 --> 01:02:52,555 depending on what happens. 1257 01:02:52,555 --> 01:02:55,060 AUDIENCE: But I just me that you'd 1258 01:02:55,060 --> 01:02:58,580 want to apply the funnel multiple times. 1259 01:02:58,580 --> 01:03:02,160 And you're initial state may not be exactly the same. 1260 01:03:02,160 --> 01:03:07,682 So it should be possible to use the same funnel even 1261 01:03:07,682 --> 01:03:10,350 though the initial state is off by a little bit. 1262 01:03:10,350 --> 01:03:11,330 PRESENTER 3: Yeah, OK. 1263 01:03:11,330 --> 01:03:13,590 So say that you chose this funnel first. 1264 01:03:13,590 --> 01:03:16,570 And eventually what actually happens is you do this 1265 01:03:16,570 --> 01:03:17,670 and you get pushed around. 1266 01:03:17,670 --> 01:03:20,719 And then you end up here instead of this funnel. 1267 01:03:20,719 --> 01:03:22,510 As long as your next funnel that you plan-- 1268 01:03:22,510 --> 01:03:26,760 so you can start a new funnel at any point in this trajectory, 1269 01:03:26,760 --> 01:03:29,230 as long as the next funnel is also-- 1270 01:03:29,230 --> 01:03:31,766 as long as you have V intersection between the point 1271 01:03:31,766 --> 01:03:33,810 and the next funnel. 1272 01:03:33,810 --> 01:03:37,450 And if you're within this region, 1273 01:03:37,450 --> 01:03:40,530 and you plan the next funnel, what do you do 1274 01:03:40,530 --> 01:03:45,928 is you plan the next funnel with this being the original x0. 1275 01:03:45,928 --> 01:03:49,180 So as long as that's you next x0, 1276 01:03:49,180 --> 01:03:52,152 and then this will take on a new nominal trajectory. 1277 01:03:52,152 --> 01:03:54,120 AUDIENCE: Yeah, I'm just saying, asking 1278 01:03:54,120 --> 01:04:00,520 how you, like for the one all the way on the left, that one, 1279 01:04:00,520 --> 01:04:05,230 yeah, how do you define how big that initial region is? 1280 01:04:05,230 --> 01:04:11,440 PRESENTER 3: Oh, OK, so that one, say, if you start, 1281 01:04:11,440 --> 01:04:13,560 say, not moving or something and you got pushed? 1282 01:04:13,560 --> 01:04:15,620 Is that what you're asking for-- 1283 01:04:15,620 --> 01:04:17,120 AUDIENCE: Well, I mean, I understand 1284 01:04:17,120 --> 01:04:19,350 that you're using the V for uncertainty, 1285 01:04:19,350 --> 01:04:21,700 and V and W. So that essentially defines 1286 01:04:21,700 --> 01:04:23,900 how big those funnels are. 1287 01:04:23,900 --> 01:04:26,662 Do the also define how big the first one is? 1288 01:04:26,662 --> 01:04:27,370 PRESENTER 3: Yes. 1289 01:04:27,370 --> 01:04:28,160 Yeah, the do. 1290 01:04:28,160 --> 01:04:29,590 AUDIENCE: OK. 1291 01:04:29,590 --> 01:04:32,200 PRESENTER 3: So what you're doing, because what you want 1292 01:04:32,200 --> 01:04:35,690 to do is use the funnels and have some funnel library 1293 01:04:35,690 --> 01:04:39,670 and be able to use those throughout all time. 1294 01:04:39,670 --> 01:04:41,770 So you don't want-- 1295 01:04:41,770 --> 01:04:45,360 so I guess what you're asking, the first funnel, 1296 01:04:45,360 --> 01:04:47,520 you're going to start at some initial state 1297 01:04:47,520 --> 01:04:49,021 0 with no velocity, stuff like that. 1298 01:04:49,021 --> 01:04:50,978 And so you're not going to have any uncertainty 1299 01:04:50,978 --> 01:04:53,360 on the first thing because you know where you start, 1300 01:04:53,360 --> 01:04:54,960 the initial state. 1301 01:04:54,960 --> 01:04:58,310 AUDIENCE: Yeah, I'm just asking independent 1302 01:04:58,310 --> 01:05:01,420 of the wind and stuff like that, you 1303 01:05:01,420 --> 01:05:04,080 might just be starting at a point 1304 01:05:04,080 --> 01:05:06,510 other than what that nominal point is. 1305 01:05:06,510 --> 01:05:10,110 So you may want to define that initial funnel size 1306 01:05:10,110 --> 01:05:13,966 by some other criteria besides wind. 1307 01:05:13,966 --> 01:05:16,372 Is there-- 1308 01:05:16,372 --> 01:05:18,730 AUDIENCE: So [INAUDIBLE] sensor how sure 1309 01:05:18,730 --> 01:05:21,487 you are about where initial location is. 1310 01:05:21,487 --> 01:05:22,570 AUDIENCE: Yeah, and then-- 1311 01:05:22,570 --> 01:05:24,028 I mean, there's sensor uncertainty. 1312 01:05:24,028 --> 01:05:27,050 But you just may happen to be in the-- if you're 1313 01:05:27,050 --> 01:05:30,560 doing the glider experiment 10 times, 1314 01:05:30,560 --> 01:05:33,210 you may not start it from exactly the same position 1315 01:05:33,210 --> 01:05:33,720 every time. 1316 01:05:33,720 --> 01:05:35,760 PRESENTER 3: Yeah, you should-- 1317 01:05:35,760 --> 01:05:38,820 your funnel, every time you plan a new funnel, 1318 01:05:38,820 --> 01:05:40,459 you start at the nominal trajectory 1319 01:05:40,459 --> 01:05:41,375 above that new funnel. 1320 01:05:41,375 --> 01:05:43,570 So you're not going to have this funnel. 1321 01:05:43,570 --> 01:05:46,920 And you're never going to start over here on the first one. 1322 01:05:46,920 --> 01:05:49,600 You're always going to start at this point. 1323 01:05:49,600 --> 01:05:51,410 [INTERPOSING VOICES] 1324 01:05:51,410 --> 01:05:53,160 AUDIENCE: I though the point of the funnel 1325 01:05:53,160 --> 01:05:58,265 was so that you can reuse it without having to replan. 1326 01:05:58,265 --> 01:06:00,390 PRESENTER 3: Yeah, you can move the funnels around. 1327 01:06:00,390 --> 01:06:01,035 AUDIENCE: Oh, you can move? 1328 01:06:01,035 --> 01:06:01,535 OK. 1329 01:06:01,535 --> 01:06:04,050 PRESENTER 3: Yeah, yeah, that was-- so 1330 01:06:04,050 --> 01:06:05,960 every time you start a new funnel, 1331 01:06:05,960 --> 01:06:07,650 you start at this nominal trajectory. 1332 01:06:07,650 --> 01:06:10,126 But the next time you use the same funnel, 1333 01:06:10,126 --> 01:06:13,080 you could be over here and just shift the funnel down 1334 01:06:13,080 --> 01:06:15,030 to exactly the point. 1335 01:06:15,030 --> 01:06:18,001 So the initial state is never going to be anywhere starting 1336 01:06:18,001 --> 01:06:20,974 at t0, it's not going to be somewhere other 1337 01:06:20,974 --> 01:06:22,140 than the nominal trajectory. 1338 01:06:22,140 --> 01:06:24,070 But at t1 it could be over here. 1339 01:06:24,070 --> 01:06:26,060 And so you just shift the whole funnel around. 1340 01:06:26,060 --> 01:06:29,010 And as long as your t0 starts at the new funnel, 1341 01:06:29,010 --> 01:06:35,968 and as long as t0 is within the funnel above t-- last funnel, 1342 01:06:35,968 --> 01:06:37,970 then you just shift it around. 1343 01:06:37,970 --> 01:06:43,355 You can also turn it, as long as you can multiply this and this. 1344 01:06:43,355 --> 01:06:44,855 AUDIENCE: It seems like the shifting 1345 01:06:44,855 --> 01:06:50,325 and turning is a pretty complex search problem in itself. 1346 01:06:50,325 --> 01:06:53,550 Is that a hard problem? 1347 01:06:53,550 --> 01:06:56,295 PRESENTER 3: No, that was actually the-- 1348 01:06:56,295 --> 01:06:58,203 [INAUDIBLE] I got rid of the slide. 1349 01:06:58,203 --> 01:07:01,159 I might have gotten rid of that slide. 1350 01:07:01,159 --> 01:07:02,700 I shouldn't because that was the work 1351 01:07:02,700 --> 01:07:04,592 that I did for the [INAUDIBLE]. 1352 01:07:04,592 --> 01:07:07,430 Let's see [INAUDIBLE]. 1353 01:07:07,430 --> 01:07:11,240 But, yeah, there's a bunch of different ways to do it. 1354 01:07:11,240 --> 01:07:14,980 I did a pretty not very smart search, 1355 01:07:14,980 --> 01:07:19,810 where I just looked for the funnels, the safest funnel 1356 01:07:19,810 --> 01:07:22,346 being the one with the least number of points in the point 1357 01:07:22,346 --> 01:07:25,544 cloud within that entire funnel. 1358 01:07:25,544 --> 01:07:32,432 And then-- oh, man, I did get rid of this. 1359 01:07:44,240 --> 01:07:46,920 But basically what I did was find the safest funnel. 1360 01:07:46,920 --> 01:07:49,490 And if there still was a collision within the safest 1361 01:07:49,490 --> 01:07:51,650 funnel, the I admit I had a minimization problem 1362 01:07:51,650 --> 01:07:54,474 as you shifted back and forth. 1363 01:07:54,474 --> 01:07:57,390 And there was a cost function that-- 1364 01:07:57,390 --> 01:07:58,732 see if I can bring it up. 1365 01:07:58,732 --> 01:08:00,440 AUDIENCE: So you're doing an optimization 1366 01:08:00,440 --> 01:08:02,840 of the online running of the-- 1367 01:08:02,840 --> 01:08:03,764 PRESENTER 3: Yeah. 1368 01:08:03,764 --> 01:08:05,750 That was an input that was implemented 1369 01:08:05,750 --> 01:08:07,440 in realtime simulation. 1370 01:08:07,440 --> 01:08:11,182 But that wasn't implemented on the actual glider as of 1371 01:08:11,182 --> 01:08:13,652 [INAUDIBLE]. 1372 01:08:13,652 --> 01:08:18,592 So let's see, all right [INAUDIBLE].. 1373 01:08:25,040 --> 01:08:26,870 And you also want-- 1374 01:08:26,870 --> 01:08:30,720 I also made is so you minimize the amount that you 1375 01:08:30,720 --> 01:08:31,696 shift it to. 1376 01:08:31,696 --> 01:08:33,779 So you don't want to shift it completely somewhere 1377 01:08:33,779 --> 01:08:37,020 else because it won't be in your path. 1378 01:08:37,020 --> 01:08:39,660 And you'll end up doing some dynamic [INAUDIBLE].. 1379 01:08:39,660 --> 01:08:42,496 Like, you'll be flying, and then if you compute a funnel that's 1380 01:08:42,496 --> 01:08:43,870 here that's kind of safe, but you 1381 01:08:43,870 --> 01:08:45,769 shift it all the way down to here. 1382 01:08:45,769 --> 01:08:48,146 Then you're gliders going to be doing something crazy. 1383 01:08:48,146 --> 01:08:51,625 And that may-- I guess it would be [INAUDIBLE].. 1384 01:08:51,625 --> 01:08:57,589 But I minimized that for at least [INAUDIBLE] shift it. 1385 01:08:57,589 --> 01:09:00,074 Does anybody have other questions? 1386 01:09:12,499 --> 01:09:15,580 Yeah, so does anybody have any questions on-- 1387 01:09:15,580 --> 01:09:17,960 AUDIENCE: Can I ask one? 1388 01:09:17,960 --> 01:09:21,899 So you've given us models of bounded uncertainty 1389 01:09:21,899 --> 01:09:23,240 in your dynamics. 1390 01:09:23,240 --> 01:09:25,460 So if you use probabilistic models, 1391 01:09:25,460 --> 01:09:29,979 then your funnels start looking like risk allocations. 1392 01:09:29,979 --> 01:09:32,479 Is there an interpretation of one 1393 01:09:32,479 --> 01:09:33,840 in terms of the [INAUDIBLE]? 1394 01:09:33,840 --> 01:09:34,923 PRESENTER 3: I don't know. 1395 01:09:34,923 --> 01:09:38,021 No, but I'm sure if you look it up, yeah. 1396 01:09:38,021 --> 01:09:40,516 I'm sure somebody's been working on that. 1397 01:09:40,516 --> 01:09:42,512 I'm not really sure that fits-- 1398 01:09:42,512 --> 01:09:45,007 I know I haven't done that. 1399 01:09:47,829 --> 01:09:49,870 AUDIENCE: Talk a little bit about the interaction 1400 01:09:49,870 --> 01:09:55,424 between the flow tube selection or the funnel selections 1401 01:09:55,424 --> 01:09:56,820 and the underlying [INAUDIBLE]. 1402 01:09:56,820 --> 01:09:59,361 So let's say you have something that's planning the reference 1403 01:09:59,361 --> 01:10:02,320 trajectory that's separate from your flow tube 1404 01:10:02,320 --> 01:10:04,450 selection or your funnel selection. 1405 01:10:04,450 --> 01:10:06,475 And then you have to select the funnels and flow 1406 01:10:06,475 --> 01:10:10,485 tubes that allow you to follow that trajectory the best 1407 01:10:10,485 --> 01:10:12,120 you can. 1408 01:10:12,120 --> 01:10:14,347 How do the interact if you have a flow tube-- 1409 01:10:14,347 --> 01:10:16,930 or don't have a safe flow tube or funnel [INAUDIBLE] reference 1410 01:10:16,930 --> 01:10:18,385 trajectory? 1411 01:10:18,385 --> 01:10:21,040 PRESENTER 3: So you're asking basically the difference 1412 01:10:21,040 --> 01:10:23,768 between planning with a funnel laddering 1413 01:10:23,768 --> 01:10:25,140 and trajectory laddering. 1414 01:10:25,140 --> 01:10:28,120 AUDIENCE: Yeah, kind of sort of-- well, because I 1415 01:10:28,120 --> 01:10:31,960 know the checkoff planner that uses an incremental pathfinder, 1416 01:10:31,960 --> 01:10:34,560 so the planned path or something like that. 1417 01:10:34,560 --> 01:10:37,310 And then you fit-- are you fitting flow tuber 1418 01:10:37,310 --> 01:10:38,610 to the reference trajectory? 1419 01:10:38,610 --> 01:10:40,276 PRESENTER 3: Oh, you do that off and on. 1420 01:10:40,276 --> 01:10:42,744 So you compute-- they're called funnel libraries. 1421 01:10:42,744 --> 01:10:44,410 Or usually they're trajectory libraries. 1422 01:10:44,410 --> 01:10:46,810 So ever computing a trajectory in realtime 1423 01:10:46,810 --> 01:10:50,380 for a fast-moving dynamic system is going to be expensive. 1424 01:10:50,380 --> 01:10:52,210 And then computing a funnel on top of that 1425 01:10:52,210 --> 01:10:53,850 is going to be even more expensive. 1426 01:10:53,850 --> 01:10:56,296 So what a lot of people do is they 1427 01:10:56,296 --> 01:10:59,660 compute the library offline for a trajectory and plan using 1428 01:10:59,660 --> 01:11:00,160 that. 1429 01:11:00,160 --> 01:11:03,000 But on this one, you compute your trajectory, 1430 01:11:03,000 --> 01:11:05,360 compute the funnel around that trajectory offline. 1431 01:11:05,360 --> 01:11:06,980 And then you search through the funnel library. 1432 01:11:06,980 --> 01:11:08,521 You don't search through trajectories 1433 01:11:08,521 --> 01:11:10,809 and then try to fit a funnel around that one. 1434 01:11:10,809 --> 01:11:12,600 You just search through the funnel storage. 1435 01:11:12,600 --> 01:11:14,724 PRESENTER 2: If you don't have a very good library, 1436 01:11:14,724 --> 01:11:17,226 then you will not get a very good trajectory. 1437 01:11:17,226 --> 01:11:19,100 PRESENTER 3: Also, a cool thing about funnels 1438 01:11:19,100 --> 01:11:22,646 versus trajectories is a lot of trajectories 1439 01:11:22,646 --> 01:11:26,820 will be discretized for speed, so you have your nodes. 1440 01:11:26,820 --> 01:11:31,750 And so, say this is what your trajectory does, and you have 1441 01:11:31,750 --> 01:11:35,490 node points here, and you're trying to fly past a wall 1442 01:11:35,490 --> 01:11:36,310 or something. 1443 01:11:36,310 --> 01:11:38,960 If your wall goes here, you're algorithm 1444 01:11:38,960 --> 01:11:41,625 is going to search these points, and it's going to say, 1445 01:11:41,625 --> 01:11:45,295 OK, well, this is a safe path because none of the node point 1446 01:11:45,295 --> 01:11:46,488 intersect with this wall. 1447 01:11:46,488 --> 01:11:53,310 So you fly [INAUDIBLE] a little [INAUDIBLE].. 1448 01:11:53,310 --> 01:11:57,690 But a funnel, since you have this region around it, you-- 1449 01:11:57,690 --> 01:12:01,780 no, I did a bad job of drawing that, but OK. 1450 01:12:01,780 --> 01:12:05,890 When we search the algorithm and see 1451 01:12:05,890 --> 01:12:07,876 if it's less than or greater than 1, 1452 01:12:07,876 --> 01:12:12,152 you're going to find all these points being in that region 1453 01:12:12,152 --> 01:12:14,462 also. 1454 01:12:14,462 --> 01:12:16,935 I guess that depends on how well you want to discretize it. 1455 01:12:16,935 --> 01:12:19,500 If your trajectory is [INAUDIBLE] of really, really 1456 01:12:19,500 --> 01:12:23,670 small points, then you're not going to run into that issue. 1457 01:12:23,670 --> 01:12:25,310 AUDIENCE: Seems like you could-- like 1458 01:12:25,310 --> 01:12:28,160 when you're building a normal RIT without funnels, 1459 01:12:28,160 --> 01:12:30,970 from concave points, if you say, yeah, they're illegal, 1460 01:12:30,970 --> 01:12:33,440 it seem that if you're automatically 1461 01:12:33,440 --> 01:12:35,778 adding on to that funnel instead of generating 1462 01:12:35,778 --> 01:12:38,040 an entire trajectory and then making a funnel, 1463 01:12:38,040 --> 01:12:41,480 you could save computational time for [INAUDIBLE] things 1464 01:12:41,480 --> 01:12:41,980 like that. 1465 01:12:41,980 --> 01:12:44,474 Do you know if that's done? 1466 01:12:44,474 --> 01:12:46,282 PRESENTER 3: No, I don't. 1467 01:12:46,282 --> 01:12:48,510 I do know that, I mean, computing, 1468 01:12:48,510 --> 01:12:50,635 you obviously want to minimize computation time. 1469 01:12:50,635 --> 01:12:53,010 But it's not a critical thing when computing, I guess, 1470 01:12:53,010 --> 01:12:55,726 funnels and flow tubes, because you do that all offline. 1471 01:12:55,726 --> 01:12:57,290 And you want to-- 1472 01:12:57,290 --> 01:12:59,534 I don't think it's even close to the point 1473 01:12:59,534 --> 01:13:01,642 where you go to online to compute a funnel. 1474 01:13:01,642 --> 01:13:05,610 It takes like six hours to compute it, so-- 1475 01:13:05,610 --> 01:13:08,690 depending on how many dimensions your state has. 1476 01:13:08,690 --> 01:13:10,790 So, yeah, it's not like you're flying 1477 01:13:10,790 --> 01:13:14,090 and you can compute one of these things. 1478 01:13:14,090 --> 01:13:15,890 You'll crash like [INAUDIBLE]. 1479 01:13:29,990 --> 01:13:30,590 OK. 1480 01:13:30,590 --> 01:13:33,640 [APPLAUSE]