Right, this talk is going to be slightly faster and more confusing than I planned. So I hope you've had your coffee because we are going to spend the next hour doing maths. Growns, cheers. Excellent. Well done. And the reason I'm doing maths is because you need to do it to drive this robot which has been sitting down here looking pretty. If you can't see it, I will show you a video of it quickly. So this is the vague structure of the talk. I'm going to talk a bit about the physical build of the robot, why I built it, something about the electronics, but primarily going to focus on the maths and the software needed to actually make it move at all. Because unlike other designs, you can't just hack this intuitively. You have to do it properly. So on the basis that you probably can't see the robot on the stage, this is what she looks like. My beautiful screen. No. OK. That's hopefully a bit more evident. So what you can see is that it's triangular, hence being called triangular. It's capable of moving in any direction from any starting pose. It's capable of rotation and translation simultaneously and all sorts of quite clever things you can do. So the motion that's happening shortly will be a translation in world space while simultaneously spinning, which if you were to try and control that manually would be extremely difficult. So we'll get to exactly how that's done towards the end of the talk. Ow. You're really dark on one side. I do have a dark side. That's fine. I can... I'll take it on trust that the audience hasn't run away because I can't really see you. Spend it. They'll be extra confused. Oh, come on. So the talk is about holonomic robots. So I should probably define what a holonomic system is. So as the slide says here, it's a system where the number of directly controllable degrees of freedom is equal to the number of degrees of freedom. When we're talking about degrees of freedom from a mechanical system, we're referring to the number of different ways it can move within its environment. So this list might be slightly surprising because we typically think of a quadcopter as a super agile vehicle and you might think it would be holonomic. But that's actually not. So you are holonomic. When you're walking around, you can independently translate and rotate and you can move through your environment, assuming we're restricting motion onto the ground. I noticed that most of you probably can't fly. Trains are holonomic because they have exactly one degree of freedom. They can go forwards and backwards and they can control that directly. And this robot is holonomic because she has three degrees of freedom. It has translation into axes and rotation. And those all can be controlled independently. So you never have any restrictions on the type of motion you can perform based on where you currently are. Unlike, for example, a car.  So the pain would be much easier if they could. So most things with regular wheels are not holonomic for this reason, that the wheels constrain their motion to be in a particular direction. This robot was built for a competition called Pi Wars. Pi Wars is organised by the Raspberry Pi Foundation or some organisation affiliated with them. It's a bit confusing because this is in Cambridge and where the Pi Foundation is based, so I tend to just assume it's them doing it. They certainly appear. And I had various objectives for this. I wanted to build something fun that wouldn't win anything. Basically, because I'm a professional software developer, I have a lot of free time. I have a reasonable amount of disposable income. And it felt a bit unfair to be competing with school teams and family groups. I catastrophically failed to win, to not win anything. Because the mystery robots on robot dueling challenge, which in previous years had been a sumo contest for which this robot is woefully unsuited, turned out to actually be an agility contest instead, for which this robot is just going to absolutely steam roller over any possible alternatives. So this was Pi Noon. And if you've dropped by the Cambridge makespace village yesterday, you might have seen Brian's mini Pi Noon, which is the microscopic version of this. And today, I'm told, what time, Brian? Yeah, so, yeah, if you want to go and play with the teeny little two-wheeled ones, I think it's an A6 footprint, the micro Pi Noon. This one is much bigger than that, so I couldn't build one of these, so that's more. But the way the competition worked was that you had an L shape coat hanger wire with a pin on the pointy bit, and a balloon on the crook, and you had to pop the other robots balloon before yours was popped. It turns out that being able to dodge sideways, spin around behind your opponents and lunge in, is actually quite a good thing. So I accidentally won Pi Noon, and then people gave me some form of prize for aesthetics, build quality, and innovation. So rather than winning nothing, I actually won as sufficiently large amount, I couldn't carry it. I have managed to donate everything now, so I feel comically OK with that. It's important when you design anything like this to test, ideally in as hostile an environment as possible. And the testing for Triangular's first version was at an Ada Lovelace Day event at a local school, with two or 300, 10 to 14-year-old mostly girls. And it turns out that if you give small children a PlayStation controller, they don't do what I do, which is very gently move the sticks with extreme care. Now they sort of whack them randomly in different directions. And that has a tendency to chew up the tires, spin the motors, break everything.  So that design is rather less polished. And this is the final one. So this was designed in Onshape, which is an alarmingly web-based CAD program. I'd probably recommend having a play with it. You can dare free accounts available. It's somewhat ridiculous that you can actually do full parametric CAD in a web browser. The physical construction is C-section aluminium for the bits that look like they might plausibly be C-section aluminium, and laser cut acrylic for almost everything else. The wheels are off the shelf, so most of the other components. So a rough bit of materials. We have motor drivers because, frankly, it's much easier to talk to something on a serial bus than it is to do high-power electrical stuff. Three motors, as you'd imagine. Big lipo-pattery pack, probably more powerful than it used by having it lying around. A bunch of flashing lights and pre-made aluminium omni-wheels, which are the interesting bit. The chassis itself are Raspberry Pi 2B, an Arduino nano, and some bridging logic and an IMU that I'm not actually using. There's also a camera, which is also not relevant here, but quite handy if you want to do line following, for example. The headline figure down there is the other reason I didn't want to win anything, which is that most teams wouldn't be spending hundreds of pounds and months of time on their robots. This is pretty much the last we'll talk about the actual physical build, but this is how everything connects up electrically. So there's quite a lot of wiring, quite a lot of actuals of amateur electrical engineering. I'm terrible at all this stuff. I don't really understand it. I can wire part A to part B, and if it goes wrong, I'll just try doing it again and hope it does something wrong the first time. So the Raspberry Pi is doing the high-level code. So things like pathfinding, responding to the controller, it's connected to a PlayStation controller over Bluetooth. It talks to its camera over its own thing, and it talks to an Arduino microcontroller, 80 mega 328 based over ITC, the interintegrated circuit communication bus. The reason it has an Arduino is because sometimes we need to respond extremely quickly to inputs, and I'll get to that later, in a way that the Pi can't really do unless you get rid of its operating system. The Arduino then talks to the motor controllers, and it talks to the wheel encoders, so we know how fast we're driving the wheels, but we also know exactly how fast the wheels are actually moving. And the light show is also run by the Arduino. This is not particularly relevant to the main thrust of the dog, but I thought I'd do an overview on how the thing was put together. So the omni-wheels are the reason the robot has to use a lot of maths, and they're also the reason it can move in the way it can. So these are wheels you may have seen. They consist of a set of rollers, so within each wheel you have rollers, and the key thing is this means the wheel can slide at 90 degrees to its main motion axis, if you like. So if your wheel is moving forward, typically if you have a bicycle or a car or something like that, the wheel will move forward, and if you try to push it sideways it will skid, or it's clearly not intended to do that. Whereas with this, the rollers that make up the wheels actually allow it to move freely in that other axis of motion. And that's why we can have a design like this where the wheels are all at 120 degrees to one another and the robot can move in a straight line. If these were normal wheels, obviously all it could do was spin around on the spot. And clearly it can do more than that. So I hope you've had your coffee. Either that or really like doing vector maths early on a Sunday morning. We're not entirely sure why this talk was scheduled for a Sunday morning, but anyway, you're obviously all up for it. So excellent. So the main problem that we're gonna try and solve is how we move. How do we express the intent? Because the motion's quite complex. How do we read that data from the controller, figure out what we want to be doing, and ultimately we need to be mapping that into a set of signals to the motor controllers that tell it how fast and in what direction the wheels need to move. The coffee bit is basically because that's the hard stuff. So I need to introduce a few terms. What I would say is if you, at this point, it's gonna be very hard for me to completely walk through the maths here. However, it is written up. So if you go to the entry in the schedule for this talk, there should be hyperlinks to both these slides, which are on Google Docs if you want to follow along and you can't easily see the screen because there is some quite small detail on it. But also the documentation for the robots Python code, which includes a much more thoroughly described version of the maths. So if you're feeling that you're not getting enough information or you're having trouble seeing the screen, that's an easy way to follow along. So the first thing we have to sort out are coordinate systems. There are two frames of reference in this environment. There's the world frame. So if you're standing there driving your robot around, you have a notion of forwards backwards, left and right relative to you. And there's the robot's coordinate space, which moves around with the robot. So you'd encounter this typically if you drive a remote controlled vehicle around. Obviously when you turn left, each turns left as far as it's concerned, not as far as your concern. So if it's driving towards you, it'll actually turn right. So we define a motion as a quantity with three parts. It has a linear motion. So x and y axes forward and back or left and right if you prefer relative to the robot. And that's in distance per second. I use millimeters internally, but it doesn't really matter as long as you're consistent. An angular motion, which has to be in radians per second. Otherwise nothing works. In general, if you're doing any form of geometry, you work in radians and everything cancels out nicely. If you work in degrees, it's rather like trying to do measurements using imperial units. You end up with a lot of weird numbers in there to cancel everything out. So this is a vague representation of the robot. You can see the rectangles of the wheels are arbitrarily assigning a front. The robot doesn't really have a front because it's entirely software defined. But for our convenience and for our sanity, we need a frame of reference that says, forwards is this way. So when we talk about a motion, we talk about move forwards and a bit to the right whilst spinning counterclockwise at this number of radians per second. Okay, so we can derive that motion from the controller. So for example, what I've got here is I have the left analog stick drives the left and right forwards and backwards parts. And the right analog stick x axis drives the rotation. So I can set the robot going in one direction. I can drive it, steer with the other stick. So we still have to work out the wheel speed. So we haven't really done the hard bit yet. Here I'm going to use some subscription notation. So you can see this opposite map controller to a motion. And the motion is M and I'm splitting M into three numbers, x, y and theta. Now apologies for the use of the Greek lesser. I was probably a bit gratuitous, but it's the typical one used for rotational quantities. And the link at the bottom there has a much more thorough version of this talk. It's fairly obvious if you think about it, that the wheel speed we need to move is going to depend on the wheel. So if the wheel is in a different place, it's going to have to move at a different speed to maintain the motion. So we define a wheel relative to the robot's coordinate space, so the same as the motion. And we simply say where the wheel is. So in this case, this example shows that the front wheel is at zero comma two coordinate, because if we move up our x-axis relative to the robot, the one that's going directly with the plus x, we're at the origin on that one and we move two ticks up the y-axis. And we define that for each of the wheels. I'm just going to use one in the example. If the robot switches and lunges to more sweets, because there's probably a buffer overrun bug somewhere. Just tell me if that happens, because it's really heavy. My ankles aren't really protected. So this is more of a statement of what we'd need to do. We need to say in robot coordinates, what velocity is each wheel moving at? That's the first step. So we can treat the wheels independently. We know that if the robot's moving in a certain way, the first thing we need to do is say, what is every individual wheel doing? How fast is it moving and in what direction? So if you think about it, the robot doesn't deform, it's a rigid body. So if we're just translating, so we're not spinning around at all, every single point on the body has the same motion vector. Stay. Bad robot. However, if we're spinning, clearly those vectors are different.  You're left and right hand, there's no difference there. But if you start turning around, then while one of my shoulders would be going forwards, one of them is going backwards, clearly they're not moving in the same direction. So the velocities are different. However, because these are independent, all we need to do is work out the velocity due to rotation. And then we can just add them together and then we'll get the overall velocity which we will then turn magically into a wheel speed. So now we have some maths. So how do we work out velocity for rotation? Well, we know we are moving in a circle because we're spinning around our center point. It doesn't matter that center point might also be moving, all we care about is the relative motion. We know the distance the wheel is from the center of rotation because we've already defined that because we know where our wheel is. So we can define that easily enough. And we know our angle of velocity because we specified that straight up front. So with that's rm theta. So actually, as it turns out, the speed is our angular velocity radians per second multiplied by our distance, which in this case is the square root of the x-coordinate and the wheel coordinate squared. So that's just basic trigonometry. You're calculating the length of your hyposin use from a right angle triangle. The next clever bit is that we actually know what direction we're moving in. Now, if you're moving in a circle, the direction you move is perpendicular to the direction from you to the center point of the circle. And if that sounds counterintuitive or non-obvious, consider what would happen if you say take hold of a broom handle and you nail center of it down or not center, the one end of it down to the ground with a tent peg, say.  You're moving in a circle because the broom handle is a constant length and you'll always move so that the broom handle is sticking out to your right, say, or your left, depending on which direction you're going around the circle. So you can only actually move the end point of that rigid arm 90 degrees to the direction from you to the center of the circle. And we know what that direction is. So I'm asserting here that I know the direction and it's the coordinates. If our wheel is at x, y, our direction vector that we're moving in is at y, minus x. And that's because if you rotate a vector 90 degrees, you can transform it in this way. So this would be a clockwise rotation. I'm afraid I'm just gonna have to assert that without proving it. We can, if you want to see the proof, it's based on matrix rotations and is in the more involved documentation. So it means we know what direction we're going and we know how fast we're going. What we want, however, is that our direction vector is arbitrary size and we actually want a unit vector of length one. So what we do is we divide by this, which turns out that our unit vector of direction is our direction vector divided by this quantity. And if we multiply it by our speed, then these cancel out. So actually, what we end up with is our velocity of the wheel is the wheels y-coordinate minus the wheels x-coordinate all multiplied by our motion in radians per second, which is actually quite nice and simple because two of those are constants and one of them is a value that we know directly. Doesn't time fly. So we know velocity and we then can add on the translation part of our motion because we know that we can do that. Effectively, you can say your coordinate frame is simply moving with you and you're rotating within that. So you're moving the whole thing. So basically, we just add things together. So we now actually know exactly what direction and speed every single wheel is moving when I tell the robot to move in a certain way. And it's a simple equation. We can obviously, we can evaluate this easily in the code. No complex trig operations, nothing like calculus, nothing like that. It's just multiplication in addition. So now the question is, these omni-wheels, you recall, they can move in one direction, they can slide in the other direction. We need to know how fast the motor needs to run to make that motion work. And to do that, we need another vector, which is called wheel drive. And this is actually probably the most obscure concept in the talk. So if you get past this, well done. If you imagine the wheel is driven clockwise or positive power to the motor, it's going to move in a particular direction, right? If we just took that wheel in isolation, forget it's attached to the robot and we give it power to its motor, it's going to roll forwards. The wheel drive vector is the vector, that yellow arrow, so from a start point to an end point, where the start point doesn't really matter, but the end point is where the wheel would end up after one revolution of the start. So if our wheel was just floating in space and we drive it through one revolution, it ends up at the position where the blue thing is, if it starts with the red one. Now, this is again, I'm afraid you will have to take slightly on trust. The most complicated piece of maths in this talk is actually this slide, as it turns out. So we want to say how much of our wheel drive direction do we need to add in to get our velocity? So you can actually make any velocity or any vector on a two dimensional plane out of any two other vectors as long as those aren't the same. Now, we're typically used to doing this with coordinate systems where we have a vector that is our x-axis unit vector and a vector that is our y-axis unit vector. So we can say that a one comma two coordinate is actually one times our x-unit vector plus two times our y-unit vector. That's relevant because in this case, we actually have two vectors which are 90 degrees to one another. We have the drive vector, which is the direction that we will push if it moves. And we have the direction it will slip.  So what we want to do is determine the amount of the drive vector we need to put into the wheel to drive it so that in addition to the amount it will slide, which we don't know and can't control, it will end up with our wheel velocity that we worked out earlier. And that's this projection operator. It's actually, so this dot's notation for a vector is it has a geometric definition, which is it's the cosine of the angle between the vectors multiplied by their lengths. But in this case, we don't actually need that. What we can do is if you have a vector xy as another vector ab, your dot product is actually x times a plus y times b. So we're not doing anything particularly esoteric. It's all just multiplication in addition. And so we get that and we divide by this symbol at the bottom is the magnitude. So that's the length of the drive vector. In other words, it's actually the circumference of our wheel. So we can think about these in multiple ways because obviously in one revolution, the wheel moves by its circumference. So if we know that that's the p is the distance along our drive vector, which we have to move. So we know our velocity and we know how to, given that velocity and our drive vector work out the distance. And actually we simply need to divide by the size of our wheel at this point because if we know how far we're going and we know how big our wheel is, we can work out how many revolutions of the wheel it is. We divide by that and we get this actually reasonably sane equation here. The nice thing is that a lot of these things will cancel out shortly. So for each wheel speed, for each wheel, given a motion vector, this is how fast you use drive the wheel to make it go. And it explodes into this, but actually this might look annoyingly large and complicated. So all I've done here is I've taken, I'll allow you to take a picture. I'm just about to jump back from the slide. I've taken this equation here and I've rather than just saying v-wheel and w-d, I've actually written them out here. So I've written out the x and y components that we worked out earlier. And you see there's a dot product operator on the second row. That then turns into this equation on the third row. And although there's a lot going on there, the important thing you should see if you look carefully is that the only variables in this are mx, my and m theta. And those are just being multiplied by constants that are defined by the shape of our robot. So w-dx, w-d-y, w-y, w-x, those are all fixed. So we never need to actually compute this into our equation. We can just multiply three things by constants and add them together. And that's obviously very, very easy to do. And now we have a safety kitten. Is everyone okay? No one's brain is frying. So we have 25 minutes left. But if anyone does have precise questions about maths, I'm happy to talk about them later, but it may not be ideal to try and do it now because I'd like to get onto some of the cool stuff we can do having done all this work. So we have just solved what's known as the reverse kinematics for the robot. So the kinematics talk about how we relate the motion that the robot's actually doing that we see when we go like how it's moving around and how we actually have to drive it. So at the low level code, what we need to do. The reverse kinematics is given a target motion, how do we actually drive our electrical gear? How do we make it go? The forward kinematics is the other way, which is given a certain, you know, our motors have moved this much, what happened to the robot? And why did we bother? Because, you know, see the second subtitle. I enjoy maths, it might make me weird. We can control the robot without before doing this. You can't hack this motion. So if you have something with two wheels, for example, we could say, well, joystick control, let's make our left joystick move wheel, you know, the left wheel, let's make our right joystick move the right wheel, you drive it like a tank. It's intuitively reasonable, you can probably manage to control it. This thing, not so much. So we can also build on this. So what we've done is actually quite naive in a sense. We said, well, we'll specify the motion we want and we'll immediately tell the wheels to go that speed and all sorts of problems are doing that, for example, skidding. So you remember my battle testing environment? If we just did this without any more sort of complexity, what would happen is what did happen in this particular case, which is you give it to the small children, they immediately whack the PlayStation controller to full forwards, full back, full forward, full back. The code goes, yes, I can do that, I know how to drive the wheels at those speeds. It does so. The motors have a lot of torque and you end up skidding the tires and because they're omni wheels, the tires are actually quite fragile. Net result, a lot of shredded tires and also some broken motors and these for cable ties and such like. So, yeah, so you don't want to come and drive a robot around. You'll have to promise not to drive it off the stage. It's not very robust in that. I can't see anyone. So can someone who can see just pick someone? So what I want to do here is demonstrate a very simple bit of fake kinematics. So you say, oh, your name, Keegan, right. Keegan is going to drive the robot around using without any of the smoothing applied and then I'm going to switch the smoothing on and hopefully there'll be a difference. So what you'll find is your left stick controls translation, so the pink bit of the robot, which is just about possible to tell where the display is, is forwards in this case. All your motion is going to be relative to the robot's frame of reference. So you see it's fairly quick. At this point, I'm going to attempt something. It's mainly not work. Let's have a look. Hello. Oh, God, that's terrifying. Right. Right. OK. I apologize for the probably rather jittery camera work. I'm trying to do this whilst looking at that screen and talking to the microphone. Also, I have no idea what that pop-up is. That's fine. Yeah, whatever. Ignore that.  So anyway, if you would drive it around a bit, you'll find that the right-hand stick will give you your rotation and the left-hand stick is translation. So back in the terms we were talking about earlier, that's our MX and MY on the left-hand stick directly just mapped to the X and Y axes of that stick. M theta is directly mapped to the X axis of the right-hand stick. And you find that it's fairly snappy. I mean, you would be able to skid it pretty easily on this. It also might be running as problems because we had a minor five-year-old related tire damage earlier. I should probably be a bit more careful as I play with it after the talk. Never mind. It's fine. The wheels are cheap. But you see, you move around and it's got a degree of control. Also, it's just generally shiny. Now, if you would press the X button twice. Right. Now what I've got is an additional layer which will limit the rate at which we can accelerate or decelerate in any axis. So you'll find that if you drive around, it will feel like it's got a much more inertia behind it. Does that make sense? So it also won't decelerate as fast. You have to be slightly careful. That's just how it goes. So is that easier to control? That's a question. So you shouldn't be skidding as much. So that's the simple thing we can do with kinematics. We can start imposing false kinematics if you like on the whole thing. Oh, God. Hairy arms and all. OK. So onwards with the talk, I think. Thank you. It's not as easy to drive as it looks. I would say there's... Oh, God. Make it go away. Oh, it won't go. Maybe. Yay. There we go. I have no idea what the time is because the screensaver on my clock has just come on. Right. I was good to my word. So... Thank you. So the second question is the forward kinematics. So if we know what our current motion is or if we know what our wheel speeds are and the robot does know what its wheel speeds are because it has magnetic Hall effect encoders on each of the wheels, which give us an extremely precise idea of where the wheels are, assuming they don't skid, of course, which is why this anti-skid thing was important. We could go on the basis that well, we asked for a particular motion, but that doesn't really work because we have inertia, we have things that the robot might run into, perhaps we're going up a hill, and so some motors are going to have to drive harder than others. So we actually need to measure these directly. They're just stuck on the back of the motor. They will spit out a very large number of pulses per second as the motor moves, and the quadrature encoding means we can tell which direction they're going in. These are actually wired up to the Arduino, so one of the reasons there's an Arduino in there is that we can fire six signals, so two from each encoder, into a pin change interrupt port on the Arduino and it can deal with that and it can tell the Raspberry Pi what's your current wheel count having gone round. A quick slide on how quadrature encoding works, upshot of which is you've got two pulse trains and depending on which one changes first, you know which direction you're going, but I'm just going to skid over that because we're running out of time. Now more maths. Excitement. So this is actually just a restatement of our previous thing, that we know what, given our motion components, the three Mx, My, Mtheta, we know what our wheel speed is. But of course we've got three wheels, so actually in the code we were running that equation three times with different constants, because the wheels are in different places. So this will actually look like a fairly familiar thing. If we have three unknowns and we have three equations with the three unknowns, we've got a system of simultaneous equations, they're all linear because it's simply our Mx times a constant plus My times a constant plus Mtheta times a constant equals s for the wheel. So we can actually just say well, let's make this a bit more concise by defining what the constants are for a given wheel. So for we have an x and y and a theta constant, which are what we're going to multiply the coefficients around which we multiply our motion to get our wheel speed. And the things in the box on the left of this slide are all constants. They are entirely defined by the chassis size of the robot, where the wheels are, what direction they're pointing and how big the wheels are. We can express that as a system of simultaneous equations and we can then express that as a matrix, containing all of those things. Then you realize it's late at night and you can't actually be bothered to remember how to do this properly and you throw the entire bunch into a numerical solver. There's a reason for that though that is simply, that is better than simply laziness, which is that we have three wheels, three unknowns, therefore there is a unique solution that says given this combination of wheel speed to what our motion is. However, you could easily have four, five, six, however many wheels you want on this system and if you have that, because you introduce errors from measurement, there will not be a unique algebraically correct solutions. You have to use a numeric solver to find the closest fit answer for what your motion components are. This approach works even when we add extra wheels. This one, not so much, not likely to grow wheels spontaneously but other designs could do. The actual code starts to look like this. For each wheel object, you've got that block at the top that says when you're set up, build a bunch of coefficients. This is using a Python nuclear library, so actually some of these quantities are vectors, hopefully it should be obvious when they are. The chassis code, which actually does the calculations, is to build at the bottom. There's not very much. You end up going through quite a lot of derivation to get to this point where you're writing the software but the software itself is quite concise. We now know our motion based on our wheel speeds. The question is where are we and what direction we're going, because that's actually what we care about. We have a pose, which is a bit like a motion, only it's in world space. As the robot moves around on the stage, we can imagine that the stage has a grid on it and the stage also has a direction that's north. The pose is where the robot is on that grid and what direction its front is pointing in. Question, if we have a motion and we hold that motion for time t, what's our new pose? Where do we move to? Again, as I said before, we're moving in a circle and we know various properties about how you move in a circle. We can find the center point of that circle, we can find our angular speed and we can simply rotate our current location around the center point of that circle to get our new location orientation. I'm having to go a bit faster than I planned here, sorry. However, I want to show you why I care about this. This is actually, again, the code that does it, so it's really not complicated. When you look at the software, this is a few lines of, I mean, it's concise partly because we can use a vector library in Python and so this is actually doing vector maths directly in the code. But why wouldn't you do that? So why do we care? Well, there's an obvious application, sort of the naivety obvious one for location awareness is navigation. After all, if we know where we are, we can do planning, we can do root finding, we can program the robots to move in a particular way. But actually the more interesting one is I'm calling world space motion control. So when we had the robot driving around earlier, forward on the left-hand stick move the robot forward as far as the robot was concerned. What we can do in this, however, is we can move the robot forward as far as we are concerned irrespective of what direction the robot is facing in the first place. So I will try and do this myself, I think. I have to remember what controls I've mapped to this joystick. I think I'm going to need another volunteer simply because I need someone to hold the the up top. Yeah. Yeah, we have a camera. It's terrifying. So what I have here is, this is going to be interesting because I'm trying to keep talking while watching the robot. I have the robot set up so that at the moment it looks pretty similar. I'm moving the joystick forward and backwards, the robot is moving forward to go backwards. Except this is kind of turning around occasionally and it's still moving forward and backwards along the stage. I'm not actually changing anything on the joystick as I do this. So what's happening is the code is doing dead reckoning and it allows me to have a motion where I turn and translate at the same time. I'm just moving left on my joystick and I'm spinning the robot and it's not 100% accurate because it's spinning a bit it's skidding slightly. You can hear the wheel that got damaged earlier. But that's the motion where we're able to move in a straight path while spinning would be almost impossible to do yourself. So what's happening there is the robot is working out what direction it's pointing. It's correcting the direction you're turning it to drive so it's rotating it around your current pose angle and it's sending that through. This allows us to make motions which would be incredibly hard to actually do manually. I occasionally have to reset. It's actually still even after all that skidding around forwards is still pretty much forwards on the stage so I can reset where it thinks forwards is at any point. I think that's probably I've got almost out of time I assume. Hello in a variety of anonymous animals who are apparently looking at the slides. So if you don't want to say do all of this maths yourself you could take advantage that someone has already done it. If say you're wanting to build one of these robots there's a whole bunch of code that is intended to be reusable and is not dependent on this robot's chassis at all. So what I created was a chassis abstraction pose motion objects are what we expect from the talk. There's a wheel object which defines how the wheel works which says which direction it can roll in relative to its drive, how big it is and where you put it on the chassis and then you can simply ask a chassis give me my wheel speeds or I've measured these wheel speeds where am I and that's all easy to do. So that's available on PyPy, Python Package Archive So you can simply do pip in store triangular it'll probably only work on a Raspberry Pi because some other bits and pieces which were described shortly rely on Linux properties so I can't actually compile the code on the Mac for example. So this is my spirit animal it's the demon catch from Adventure Time who has approximate knowledge of many things so this talk is there's been a bunch of stuff and we kind of vaguely know how everything works now There are a few other things you have to do to make one of these robots actually work which is more in the way of plumbing but some of them were non-trivial so I thought I'd mention them. Talking to the PlayStation 3 controllers if you ever tried this you'll realize that pretty much all the documentation online is either wrong, a copy of the original wrong thing without attribution or the thing I wrote one of these three works guess which it is So there's a whole bunch of stuff for the joysticks which helps there's a task framework so one of the things I can do is there's an LCD display on top of the robots I can create new tasks for it to do so manual motion, manual motion red to the world frame, that sort of thing means I could write just little snippets of codes that do purely what I want and have the task framework set up the environment, tell me about where my sensors are, give me objects that provide access to the chassis and motors and that sort of thing and there's a Linux service which means I can use system control to stop and restart and remotely manage the the Python code, none of which were particularly difficult but they're all things you will have to definitely do if you're doing this and so an example might be helpful the six-axis control support in particular is something that I decided to try and do properly so you can in Python you can do something like with joystick J as this do these things and it will set up the connection to the joystick it will manage calibration automatically it will manage dead zones so you don't have motion when you let go of sticks it will manage hot zones so you can have the joysticks reach their full range of motion slightly before they actually hit their physical limit because these sticks constrain to move in circles and you might want to effectively make them move in a square it has bus and handling event handling all that sort of stuff and that's it I think oh gosh yeah so we have time questions or anyone you like to see more detail of First how I saw it up was over here so you mentioned that we when we're walking around move holonomically as well what about feeding your motion walking around directly into the robot well if you've got a way of sensing it it would be fairly straightforward so one of the things I was planning to talk about is something I haven't actually done but I intend to or it would be easy to do with a type of motion the way that you actually get your inputs in is one interesting thing the other thing is that we've got a mathematical model for how chassis works effectively we now to have a software defined robot even although we can clearly move in this extremely flexible way but there's nothing to say we have to admit that we can do that so you could have kinematics that make the robot feel like you're driving a car that's prone to drifting for example so that you as you drive it like a car so turning when you're not moving doesn't do anything and we take that physical model that you'd otherwise just render to the screen and rather than rendering it to the screen we render it to the robot's chassis dynamics so actually you could do all sorts of fun stuff with this and it's really it's now very easy to do that you just use a task framework if you've got your physical model that you want to replicate or your input model that you want to capture from it should be straightforward enough the manual motion task I've got there is pretty much read data from joystick apply torque limit if you've pressed the button appropriately so the chassis get the wheel speed send them to the Arduino it's pretty much ten lines of code or something that's running that manual control loop good thank you I think we have another question over here thanks I think you made a statement earlier that you said drones couldn't be holonomic is that all drones or so the reason I said that is if you consider three-dimensional movement you suddenly have a very large number of degrees of freedom obviously you've got translation up and down left right forward back you've also got rotation around each of three axes and I think you'll find if you have a quadcopter that if you turn it so that it's banking left it will move sideways it's very difficult you could in principle create a drone that could behave in a holonomic way but no one ever would the logically it can't ever happen unless you have at least six propellers and they're all pointing in different directions the you can't make up stuff out of nowhere so this works because we have three inputs driving three dimensions of three degrees of freedom if you don't have three actuators that are independent so the wheels in this case are independent because they go through the omni-wheels you can't possibly actually acquire those independently controlled degrees of freedom it just you can't get something for nothing if you say take a quadcopter all you can vary is four different quantities so you're never going to be able to control the thing purely in a six-dimensional space not to mention that you've obviously got other physical constraints like gravity so although you can start to rotate the quadcopter the way that the quad will skid sideways is to boost power on one side so it's at an angle so your thrust vector is sideways you can't do that independently you can't roll translate as separate concerns that you can't translate without rolling and you can't roll without also end up translating sideways so it's more that if you have those six degrees of freedom you're going to have to have at least six inputs to your physical frame in order to control them because it mathematically can't happen otherwise you might need more because you have to deal with gravity we've got one more question over here I think, thank you so I'm wondering about a big barrier to people getting involved with this kind of system, this interface is going to be the hardware and I'm wondering about what kind of commercial robots are something that this kind of interface would work for so this actually is used in commercial industrial robots they don't use omni-wheels they use what are called mccarnan wheels so the omni-wheels will drive forwards and slide sideways a mccarnan wheel will drive diagonally forwards in one direction diagonally in the direction 90 degrees to that you can actually, if you were to google for a mccarnan forklift you'll see this actually being used and the maths and everything is actually generalizable to a mccarnan wheel as well as an omni-wheel so mccarnan wheels have, rather than having rotors at 90 degrees they have rotors at 30 or 60 degrees they have various mechanical properties such as a smoother load transference three different parts of the wheel they can support larger loads typically but these actually are used in cargo handling systems so building this chassis, the expensive parts were actually things that you could do much more cheaply, the wheels themselves are I think they're eight pounds each so the expensive parts are things like I'm using 35 pound motor controllers and you multiply by three and it goes up and you could build this or a much simpler version of a holonomic chassis for much less money and without a lot of the trickery I've had to use here part of the design was informed by my just wanting to make something cool doesn't have to be this shape Hello, there we go again I think it's three minutes to this is the greatest maths lecture I've ever had at nine o'clock on a Sunday morning I think should we just thank Tom at that point there Thank you


T-Rex, are you- Oh, he's going! He's going! He's picked up a fire's tail! There's blood everywhere! A new day, a new door, a new- and your fellow gorillas just received one of the greatest gifts of life. Free will! No longer will you be a slave to the repugnant humans. Click on the question mark button in the top left corner of the screen to get information on the game controls. Select all gorillas to move them to the area marked with the red flags. Okay, so hello everyone and welcome to, I don't know what this game's called, that one. This is kind of, uh, like a tabs clone and a totally accurate battle simulator clone, except for we, uh, can actually individually control all of the monkeys or the units that we have. So what we need to do is we need to get every gorilla over to there. Now if you double click it twice they run over to it. Oh, there we go, I did it! I did it! Now what?  You could do it! Also, this isn't pre-alpha. Things aren't gonna look too great. Oh god, he's stuck! You've left him behind! Run and break through the gate! Baaash! Yes! You could do- Oh, there we go! The chimps are free! Oh god, there's humans! There's so many humans! But we're doing it! Smash the- Oh my god! What? That's got such a- No, you sealer! What's he doing? Oh, he's an enemy! Kill him! Baaah, batter him!  There we go, I think he's dead. Okay, we got another one. Kill this guy. Look at them, he's here! Bosh!  Did we do it?  And welcome to the- to the most highly anticipated game of 2020! Next one is three hunts! Our escape route is blocked by three large elephants! We don't want to fight them! But they're under human mind control! It appears the humans operate in the mind control unit! Or in those hunts! Okay, so what we want to do is run past. So, can I double click? Okay, I'm gonna send a few of these guys over this way. And then, you can go over that way. This big ape can take them head on. He can take them head on. There we go! No, no, no, no! Keep going, keep going, keep going! Oh, the split worked!  Yes, he's punching the elephant!  Kill the human! There's only like a few apes left! Kill him! No! Oh, is that- does that count as being dead? Well, I think we're dead.  Yes, we did it! Run away! Oh yeah, now the elephants are good elephants! Oh, we're doing awesome! We need to take out this blockade to reach freedom. This time, we've enlisted the help of a friendly elephant!  Oh! No! Monkeys, come back! We've got a little sneaky way here. We can go around this way. Destroy them. There you go. You don't stand- come on, you don't stand a chance against an elephant, do you? That looked like a real- Let me at him! Come on, come on, this way, this way. We got this, we got this. All we need to do is get behind, right? Get behind! We just need to kill these guys. No, what happened to these monkeys? Ten stars for effort. And he's dead. Okay, well, we're gonna have to redo that one. Look, even the wildebeest wants to get out. There we go, charge! Yes, elephant, go!  Um, maybe we should have sent the elephant in first. This- this wasn't a- Oh my god, the elephant's in the air. Oh, he just punched him! Elephant's dead! No, elephant's alive! Elephant's alive! It's carnage! He's holding on to the elephant now! Um, are they all dead? Did we get- Oh, there's only one wildebeest and an antelope thing left. Yes! Yes, you did fantastic! You did beautiful, my friends! Why did they make the monkeys butt so big? Why- why is that here? Oh, they broke through. Okay, guys, I think- I think all you need to do is just like attack here. And we're all good. Bring the gorilla along! There you go! Did you set up a chain reaction?  Although you did do good! Elephant, go! Charge! Attack this one! Yes, they're killing each other! This is beautiful! Are they- are they baboons? What even are you? You have no eyes! How can you throw? Oh, oh, we got a monkey, uh, doing something with another monkey there. Oh, aw, sniped! Come on, elephant. Come on, elephant. Just topple those two. Just topple them. Yes! There we go! Did we do it? We got one left. The elephant's still- still in there somehow. Okay, oh, he's coming! He's coming! Bam! Missed him, but he died somehow. What's he got, another gorilla, like, over here? The elephant's getting into him. I think the elephant might have got him. Elephant, get him? Yes! Explosive piggies. The wretched humans have sent their animal soldiers after us. We have reports of suicide piggies being deployed, which have explosives attached to them. Beware. What do you mean? Why do I- why do I need to go? Oh, dear. Oh, dear. Where's the piggies? I don't see piggies. Oh, is- oh, okay. Oh, there's a piggy! Guys, run! Guys, run! Guys, run! Guys, run! Oh! We lost all but two! Did we survive, though? Oh, my God. Oh, my God. Oh, my God. They don't start a chance. What a tag! Come on! Oh, the explosive piggy! I know what needs to be done now. No, no, no. Not you guys. Not you guys. Just him. Just him. Because then the piggy will come. Yes! Take one for the team, brother! Are we still here? There we go! Beautiful. Now- now you guys can just attack everything. Except for you. You will be the proverbial- Oh, look at that. We got a bison attacking our bison. Uh, hello. There we go. Where is he? Where's the- look at him. What a hero! He's like, wait. There's nobody here! Ah! Go get him! Stay alive for the piggy! Stay alive! He might be- he might be dead. He might be dead. Oh, God. Oh, God. No, no, no, no, no, no, no, no, no, no, no, no, no! Oh, wait. No, we survived. We survived. Okay. One big piggy. One big piggy go.  And you. You go kill- Oh, look at him. Completely destroyed. Battered! There you go. We got a polar bear, I think. Is that a polar bear? It looks like a polar- Oh, God. Everyone's attacking him now. Be careful of the piggies, though. I mean, as long as one- We're good. Yes, look at this. Grinst! Nobody stands a chance against monkey army! Go on, get this guy. I don't even know what my mouse is. There we go, there we go, there we go. Get over there. Not all of you.   Oh, there's this dude. Get him! Oh, there's a polar bear! Surprise attack from the polar bear! Oh, God. Oh, it's two against one now. Yes, get him while he's down. Yes! Come on, then! Oh, he's got some health. Oh, we got a polar bear ambush. Oh, this is not so good, guys. This is not so good. Oh, he can't take on all of those. Kill him! There, we already knocked him down. Oh, it's not looking too good over here, though. We got four polar bears against, like, two apes. Oh, my God, this is so tough. No! It's just this one, dude. What? He can't do it by himself. Wang him! Yes!  Bless him, he's got one. I'm terrible with this camera. Go and whack him. Use the body. No! No! Stay alive! You're our last hope. Yes! Punch it in the face. He's taken on all of them so far. Yes! And again! Get him while he's down! Can we do it? Yes! Oh, that was a close one. Six little piggies are in need of our help. You have to eliminate the three huge guard gorillas so that our dynamite expert can blow up the fence and release the piggies. Wait, six little piggies are in need of help. Um, okay. Beware of the tiger enclosure. If you release them, they will attack and kill everything. Oh, okay. Okay, so I'm going to move the monkey back here.  Go run, my friend!  Release the tigers. Now run, now run. Lead them! Lead them to the monkeys! Lead them to the monkeys! Oh, he did it! Yes! Oh, my plan! Oh, yes, let's get up in there. Look at him go. Oh, my God. Tigers kill him.  We just got blown miles away. There's a tiger in the piggie. Oh, my God. He's always latched onto him. Yeah, don't attack, don't attack guys. Just stay back. Stay back. Let the tigers finish him. We got this. Look at this guy. He didn't know what he was... Oh, he was doing it. Oh, he's completely gone. This is way better than totally acrobalt simulate because you've got physics. And what was the other one? Beast simulator. This is way better.  Oh, this... I think there's one gorilla left. Oh, no, there's two. There's two. Oh, there's only going to be one left. There's only going to be one. Whoa! That chokes the ham. Whoa! Okay. Oh, no, they're going for the piggies. They're going for the... Oh, no, we need to save the piggies. Guys, guys, guys! Save the piggies! No! We just weren't quick enough. Oh, God. Oh, God, he's stuck. Yeah, he's... Oh, he's dead. He's definitely going to die. Oh, my God, he's being rinsed. Oh, it's going for the... It's going for the neck. You see that? Okay, okay. These guys will go for the apes because they're the biggest. Right. Okay, okay, okay. We're the beast. We're the beast. Okay, we'll wait. We'll wait here for a bit. As long as... They don't go anywhere near... They go so far. They're alive as well. Okay, the gorillas are still going. They're still going. Tiger's seen... Why? Look at you. He's dead. Yeah, he's definitely dead. It looks like they do take full damage. That gorilla is gone. They can't get into that fence, I don't think. That's good. That's good. Okay, okay. We need to help them out. We need to help out the gorillas. Go, go, go, my friends. Go, go, gorillas. And my son. And go, go. Boys, there you go. Ah, here he comes. Mr. Forums himself. Oh my god. Yes, that's good. Did we do it? Oh god, there's just a pile of bodies here. Right. Gorilla. This is it. Wait, wait. Actually, tell you what. You get... Open up the piggies. Can you open up the piggies? Oh no! Save them! Save your pet, my son. Okay, okay. I don't know.   But this is okay. We got this. There we go. There we go. Yes. Look at that little right hook. And another one. Is that it? Is that... Oh, there's a couple left on them. No! No! They're draining them. Set them free! One left, one left. Oh no, he's still alive. The bison's still alive. Oh, there we go. We did it! One bison survived. What's happening? Well then, we're just gonna end that there. There's only two more. And I think we're okay. Now let's check out Sandbox. King Hong, Knockout Artist Gorilla. Oh, that's who we had. Berserk Gorilla and Poojectile Gorilla. But there's also dinosaurs. Let's see just how this goes, shall we? They come in for the charge. T-Rex? Oh god. Oh god. T-Rex, I don't know if you're looking too good here, guys. Um, uh... T-Rex, are you... Oh, he's going! He's going! He's picked him up by his tail. There's blood everywhere. Oh, there's another one latched onto his face. Oh, wow. It looks very similar to the Isle T-Rex, actually. And I don't know what... I feel like I've seen that cryo-loffasaurus before. Oh god, the T-Rex is bleeding out. You got cryo-loffasaurus is biting the ankle. Oh, he's picking up one of his bodies, though. He's making sure it's dead. Woo! Oh, it's a battle. It's a battle of attrition. They're just going for his legs, hoping to bleed him out. Oh, that looks so good. Got him by that neck! This game is better grabbing than the Isle. Oh, he died, though! Oh! So, you only had one, two, three, four... I have five, actually. I think we had five cryo-loffasaurus left. Well, the next thing is obviously about five T-Rexes, isn't it? Oh, wait, oops! Oh, I made them all the opposite team. Oh god. Oh god. I basically just made it like five T-Rexes and cryo-loffasaurus take on one T-Rex. Oh, dear. This is not so good. Oh, bless him. He's trying. He's trying. Oh, no. All it takes is just a little bit. If he gets pushed over, that's it. Oh, he's got his leg. He's got his leg. I love this. It really does matter if the dinosaurs get trod on and get pushed over. Oh, he's down. He's down. Oh, that's not so good. He's in the air. He's about to get ripped apart. Yep, there we go. Triceratops versus T-Rex. Oh god, that, uh... This Triceratops isn't... It's seen... Oh, it's definitely seen better days. Oh, no. Oh, god. Look at him. Look at the T-Rex. They're not being tactical about it. Oh, he's flipped him. He's flipped him over. Was that deliberate, do you think? I don't... I don't think so. I don't think so. The Triceratops is tro- Oh, look at him. He's flying. Oh, I flipped him. Tricer go for the underbelly. There seems to be possibly some kind... Oh, look at this. He's got his leg. He's squirming around. He's script script squirming around. Oh, is he down? Oh, no. He's still alive. He's still alive. Although I don't think the Tricer's got a proper shot on. Oh, wow. Triceratops didn't stand a chance. Okay, what about two Triceratops? Let's try that. Two Triceratops just hit twice the odds. Can the T-Rex do it though? I don't know who's worse off here. The T-Rex is being pushed over. Oh, he's being caught. He's upside down. It's not looking good. Although I think that Tric might be dead. No, he's alive. He's alive. I have no idea what that Triceratops is doing though. Oh, the T-Rex. That looks like the L-T-Rex. I'm sorry. Did they nicked it? Did they nick it? Oh, dear. That definitely looks like the L-T-Rex. Next thing you'll know, it'll be on Kickstarter. Oh, wow. The rare tailwap from the T-Rex there. Although this battle is lasting a lot longer. Oh, the Triceratops nudging his tail. I don't even go there. He's just like an excited puppy. And this one, oh, the T-Rex just can't seem to get a bite. Because his jaws being wide. Oh, no. Oh, they killed him. They got him. It didn't look like they got any major hits. But just over time. I think he just gave up. All right. We're going to add a third team in here. This is Coward Cole and Bald Billy. Who are just going to get caught in the middle of this. And let's just see how they do. Oh, God. I clicked the wrong button and I think they're both dead. Yep. Nope. They're gone. Oh, no. Bald Billy's coming. Bald Billy's coming. I don't know. What is that walk? Coward Cole, I'm pretty sure he's dead. Oh, he's facing him on. He's facing. Oh, he's going to punch the T-Rex. It's just gone long, miles away though. There we go. We need some heroic music. Imagine that, seeing two Triceratops and a T-Rex. And yet you still run in. Fists and all. Oh, no. There you go. All right. While this battle is going on, we... Oh, God. Look at Coward Cole. He actually does go for the Triceratops. Oh, my God. He got... Oh, he got... Oh, he's definitely dead. While this battle happens, the Cryolophosaurus is charged in. Who will they go for? I mean, there's no alliances here. It's just a free-for-all. I love that the T-Rex picks things up. That's glorious. Oh, God, the T-Rex needs to get up. Oh, he's jumping right in the back of one of the Cryos. But the Cryos seems to have decided to attack the Triceratops. The T-Rex is just getting them out the way, I think. Did he get one? Oh, he's got his... Oh, no. Oh, there you go. Look at him. He's biting him. Oh, God. He just got... Oh, the T-Rex is gone. T-Rex is gone. I think that... Is that Tric still alive? It's just Tric's now against the Cryos. Is he gonna do it? Is he gonna do it? He's warning him off. Just keep on wapping him around. Wapping him around. Oh, that... Oh, he's down. Whoa, the spin.  No, he's still alive. But the Triceratops goes in. I don't know how the fight's going over there. I don't know how that one's going. I'm sure the Triceratops is not doing very well. But this guy, however... Oh, he got him. Lovely. Okay, in comes the Tric to help his friend. Boot. Are they stuck? Oh, God. There's only one left. There's only one Cryo left. It's not looking too good for... And there you go. Tric wins. Oh, the other one. Victory leap. It's the mass migration of the Triceratops. But from the sides, come T-Rexes ready to ambush. I mean, this is way more T-Rexes than there would actually be. But hey! Oh, they've all decided to split up and each take some of the T-Rexes. How will this go? Place your bets. Who's gonna win? Oh. Triceratopses are pushing the T-Rexes there. That's good for them. How's this one going? How are these guys going? We don't have any deaths so far. But that's to be expected. Oh, we got a breakout fight here between two Trices and a T-Rex. That's good for the Trices. We already know that the Trices can take on one of the T-Rexes. No deaths. It doesn't seem to be no deaths. This is the one I'm a bit more worried about for the Trices because there's too many T-Rexes per Tric here. I think the T-Rexes are going to win this one and then the Trices might win this one.  He's alive! Although we haven't seen two T-Rexes help out each other. Oh, he's got him up against a tree there!  Thrown to the wayside! The T-Rex killed! Oh, we got a few dead Trices. A few dead T-Rexes. Oh, it looks like there's more T-Rexes over there. It's two T-Rex per Tric. Although this one's kind of struggling. He might be a little bit injured. Oh, he's down! It's one Tric- Oh, but he killed his T-Rex! Now it's three T-Rex versus one Tric. How will they be able to cope? Oh, he's trying to go for his tail! How's it going over here? Oh, oh wow! Wait, I lost? Um, I don't- I placed loads of Trices. I don't know what happened there. Commence the fight! Oh, look at them leaping in. Oh, and whoa! Not a good place to be for the front triceratops. That's for sure. Now that I'll- Oh, what are the T-Rexes coming over? Hmm. Yeah, it's definitely not good for the triceratops that are over here. Because now there's less triceratops to help them out. Although they're all teaming up against one T-Rex. That could be good for him. Oh, the Cryos are dropping like flies! There's so many of them! Hope this T-Rex has been singled out not so good. Ooh, it's a battle for the ages. Who will win? Oh, look, we got little Cryo trying to bite the bottom of his ankles. Oh, he's got something fly up over there. Gorgeous. Oh, there you go. Look, biting behind the crest or the frill, whatever you want to call it. It's a good tactic. Get away from those pointy horns. The Cryo's got the right idea. Get in the back legs, get in the tail. Oh, oh, hold on, what's going- Wow, that's him. That's a lot of dead Cryos. Cryo's- Oh, he's been picked up by his tail! Oh, no, and he's gone. Didn't stand much of a chance. Oh, income the tippy-tappy-toe triceratops. Cryos have been eliminated, I think. Oh, no, we got one left. We got one Cryo left. Although I'm not holding out much hope. There are two trikes against him. And I don't think you can take on one. So, and yeah, there you go. Absolutely trampled. So now it is three trikes versus one, two, three, four, five, six, seven t-rexes. I don't think it's going to go very well. It's a shame they don't go. It looks like the t-rex have an animation where they actually bite and do bleed damage. Sorry. Oh, that's a- Oh, look at him, he's bleeding him. That's a good bite on the trike there. Bless him. Now he's dead. Look, oh, no, he's not. He's not. But it's not looking good. Oh, oh, no, this one's completely being laid into. There's a trike sandwich. Oh, he's done. Yeah, he's done. There was too many t- And that one's done as well, I think. Yeah, it's rolled over. Well, guys, that is going to have to wrap up this video. If you enjoyed it, leave a like. And until next time, I'll see you later. Oh, buh-bye.


The study of cerebellar folding is challenging due to its small size and abundance of folia, but an open collection of histological data from 56 mammalian species was used to manually segment the cerebrum in cerebellum, develop methods to measure geometry and thickness of folia, and estimate evolutionary relationships between cerebellar and cerebral anatomy. Results show that evolution follows a stabilizing selection process with two groups of phenotypes changing concertedly through evolution, and a strong correlation between cerebral and cerebellar volumes across species. The study provides new insights into the diversity and evolution of cerebellar folding, mechanisms of folding, and potential influence on brain organization across species. This article was authored by Kothia Hoyer, Nicholas Trout, Alexander Allison de Souza, and others.


Ukraine can launch missile strikes on Iran and Syria. The Ukrainian government urged its Western backers last month to conduct missile strikes on drone factories in Iran and Syria, even offering to launch the attacks itself, if given the weapons to do so according to a document seen by the Guardian. The document in question was handed to G7 governments by Ukrainian officials in August, the British newspaper reported. In it, the Ukrainians claimed that kamikaze drones used by Russian forces are built by Iranian manufacturers in Iran and Syria and contain Western components. Kiev alleges that Russia uses Iranian-made Shahead 131 and Shahead 136 drones and that these contain 51 and 57 Western-made parts, respectively. Among the manufacturers are companies headquartered in the countries of the sanctions coalition the United States, Switzerland, the Netherlands, Germany, Canada, Japan and Poland. The document reportedly stated. Moscow denies using Iranian drones, insisting that the Shahead-like craft it launches at Ukrainian military and infrastructure targets are designed and made in Russia. According to the Guardian, the report recommended missile strikes on the production plants of these UAVs in Iran and Syria, as well as on a potential production site in the Russian Federation. The above may be carried out by the Ukrainian Defence Forces if partners provide the necessary means of destruction. The document continued.


I'd now like to introduce our second speaker this afternoon. Dr. Gary Dunn received his PhD in clinical and social psychology from Hofstra University and is a licensed psychologist who has been working in mental health, hospital and educational settings for more than 30 years. Since 2011 he has been the director of CAPS, which is a counselling and psychological services at UC Santa Cruz. Prior to coming to Santa Cruz he served as the director of a hospital-based community mental health centre in New York and oversaw psychological services at a large tertiary care hospital in North Carolina. Dr. Dunn's primary training is in cognitive behavioural therapy and strategic therapy. He's also interested in health psychology, healthcare administration and leadership development. Recent areas of interest include understanding anxiety amongst college students, addressing suicidal thoughts and behaviours of college students and developing a college counselling centre to meet diverse multi-cultural and intersectional needs. Please join me in welcoming Dr. Gary Dunn. Good afternoon and I do want to thank the organisers of this symposium. It's definitely a favourite of mine and I really see it as an opportunity for mental health professionals, other helping professionals throughout Santa Cruz County and neighborhood counties to get together and to learn and to mingle and to reconnect with old friends and colleagues. So thank you all for what you do. It's greatly appreciated. So these are the questions that I want to ponder for the next few minutes today. Is anxiety increasing in college students? I imagine you have a good guess on that. If so, why? I want to drill down to how are we doing in the University of California? How about UC Santa Cruz specifically? What's the impact of identities on this? How do we assess for this? How are we treating anxiety and what research is being conducted? So I'm going to be referencing a number of different data sources and trying to be empirical in this discussion and I want you to understand where some of this information is coming from. So one is the National College Health Assessment. Actually, this is something that happens throughout the country and all the UCs participate. It happens that this year, for the first time, we actually got our acts together and all did the assessment in the spring of 2019. So it gives us an opportunity to benchmark against each other and compare and contrast, which is always helpful. The Counseling Center Assessment of Psychological Symptoms is the C-CAPS and that's another national measure that actually comes out of the Center for Collegiate Mental Health that measures outcomes for the students who come into counseling programs. So this is something several years ago all the UCs got together and agreed we were going to give this to students every time they had a counseling session so that we could see. Not only how they're coming into us but how they're progressing. Also that C-C-M-H has another index called the Clinician Index of Clinical Concern. I'll be mentioning the Healthy Mind Survey. The Student Questionnaire is another local form. It's a form that students complete when starting services at CAPS throughout the UC system and again we were able to coordinate six or seven years ago and come up with a form that we would give to students that was consistent across the board so that we can get a sense of how we're doing compared to each other and as a group. And the GAD7 is a generalized anxiety measure that we'll use from time to time. Okay, so nationally the percentage of students who report being diagnosed or treated for anxiety disorders these are college students in the last 12 months doubled between 2008 and 2016. That's from NCHA. Scores for students who present to college counseling centers have increased steadily in generalized anxiety, social anxiety and depression and that's that C-CAPS that I mentioned that we give to the students who come into counseling. So the difference is the first number that NCHA data is from the general population, all students whereas the C-CAPS are students who are coming in and asking for help. And then the Healthy Mind Survey which is also more general found college and graduate students screened positively for anxiety rose from 17% to 26%. So that clinician index that I mentioned, so what are we seeing on that? Anxiety is reported as one of the top concerns for almost 63% of the students who were coming into counseling almost 44% were stressed and the top concern was also anxiety 23.5 and it broke down, that 23.5 broke down as you see with the majority being generalized anxiety and those represent other diagnosable anxiety conditions, social anxiety, panic, other test anxieties, not a diagnosis per se and specific phobias. So this is more general, the 12 month prevalence of an anxiety disorder, 18 to 29 year olds was 22% in 2007. Now we're trending closer to 40%. And it grew more than two times as fast as all other mental disorders and it holds to dubious distinction of expanding more quickly than other mental health disorders pointing to a singular and pressing issue on college campuses. And as a general fact, teenagers report higher levels of stress than adults and think that's something we've gotten an impression from all our previous speakers. Okay, so how about the University of California? The rate increased even higher, nearly two and a half times higher in 2016 than 2008 and that's again general data. So on that general data, this was just from spring of 2019. So students reported in the last 30 days, 73% overwhelmed by all they had to do. 72% felt exhausted not from physical activity, 49% felt very lonely, 53% felt very sad, 46% felt overwhelming anxiety. So I've thrown a lot of numbers at you in a short period of time, but I want to pause on that and just have you reflect on that, what that's saying. So this is just an average student who chooses to participate in this survey, not somebody who's coming into counseling. What we're saying here is that 53% felt very sad and 49% very lonely and 46% overwhelming anxiety. So between 50 and 70% of students are having these experiences in the last 30 days. So that's just in my mind overwhelming and it really, you have to stop and think, well, how are you going, it's an epidemic, right? How are you going to respond to that sort of information? Because it's probably not going to be providing individual therapy for everyone, right? That's just not going to be a possibility. We have 19,000 students, for instance, on UC Santa Cruz. And this is throughout the UC system. Unfortunately, our campus, the numbers are actually more concerning. So some other pieces from that same study. These are the things that were very traumatic or difficult to handle. Career related issues, death of a family member, family problems, intimate relationships, other relationships, finances, personal appearance, personal health. Sleep came up earlier today from Gene. So almost 36% found their sleep situation to be traumatic or difficult to handle. And they found these things affected their academic performance. Again, sleep, stress, work, anxiety, concern for a troubled friend, depression, internet use, computer games, relationship difficulties. It's interesting, based on the talk, you would think that that number for internet use, computer games, would be higher. But like substance abuse, it's not what students come in and tell us about all the time. They're not like, hey, I'm here because I'm drinking too much or I'm worried about my internet use. That comes out. But it's not necessarily their presenting problem, per se. So yeah, under-reported on that one, to be sure. Okay, so I mentioned this CCAP. So this is this measure that we give to students every time we see them when they come into counseling services. And this is specifically now talks about our students at UC Santa Cruz. So we're higher than the national average on depression, generalized anxiety, and social anxiety. We also have another dubious distinction of being the highest in the UC system and way higher than national average on I have thoughts of ending my life. 49% scored greater than zero. So we see about 3,000 students a year, so do the math. Now just to break that down to be clear is that's anybody who scores greater than one on this Likert scale. So that 49% is made up of 20% of our students who scored a 1, 13% scored a 2, 10% scored a 3, and 6% scored a 4. So thankfully it's not the other way around. So Berkeley has been doing a study, a professor named Richard Schaeffler in the School of Public Policy, looking at anxiety and social anxiety. And by the way, I don't think it's been studied that much. Certainly not among college students. I think that the recognition that this is a mental health crisis has been slow to be picked up, and people are really first starting to look at it from what I can see. But they have been doing a study for the last couple of years, and it's not published yet, but I did get permission to share some of their information. And they found all of the following to be positively correlated with anxiety disorder in the UC system, the CSU system, and all campuses. So they found correlations with, and again, not causation, substance abuse, prescription drug abuse, alcohol use, negative consequences from alcohol use, attempted suicide, serious consideration of suicide, and sexual assault. UC students also, with anxiety disorder, were nearly nine times as likely to be diagnosed with a substance abuse or addiction, and CSU students were five times more likely. The national was over three times. So we see this interesting thing where UC students, in many ways, seem more acute in some of these areas. So I mentioned the student questionnaire data. So this is, every time we start with a student, it's like an intake form that students complete, and this is the one that we use throughout the UC system. So we see the top primary concerns. We give them a list and say, you know, check off as many of these as you want, and then which one is your top one secondary tertiary like that. So top primary concern is anxiety disorder, and the top secondary concern is also anxiety disorder, and stress is in there as well. So it's really most of what we're getting reported by this. This is what the students tell us when they come in. So I wanted to look at the impact of identities. So the rate of anxiety disorder for female identified students was over twice that of male identified students, 23% to 10%. The rate of increase from 2008 to 2016 was 65% for transgender students. So they went from 34 to 56% anxiety disorder. And there was a 67% increase for male students and a 92% increase for female students. The rate of increase was 150% for Asian or Pacific Islander students, 180% for Black students, 150% for Latinx students, 109% for White students. But you see the absolute number. White students reported the highest rate of anxiety disorder at 23% while Asian and Pacific Islander students reported the lowest rate at 10%. And important to note that differences in cultural attitudes and access to mental health care and important considerations to consider. So according to a recent study, Black and Hispanic students had lower rates of psychiatric diagnoses than White students, but at similar rates of past year suicide attempts. Okay, so I want to shift to why this might be going on and some thoughts. So another study, the National Longitudinal Survey of Youth, found the following associations, not causations, but that young adults with mothers that had a mental disorder were more likely to have an anxiety disorder. Perhaps this supports a genetic link. This was kind of an odd artifact that young adults with mothers with at least an undergraduate degree were 45% more likely than those without a college degree. Yeah, interesting. Young adults in households that have difficulty paying bills, that makes sense, are 1.3 times more likely and it supports financial stress, increases anxiety. And young adults in the top quartile of computer use, leisure time, which includes cell phones, above 20 hours per week, were 54% more likely to have anxiety than the bottom quartile. And that supports a lot of what we've been talking about today and I do want to dive into that a little deeper and some of it is reinforcing what's already been talked about by our presenters and sometimes maybe looks at it from a slightly different perspective. So you might have seen some of this already today, this Common Sense Media Reports and Pew Research Reports, so I can skip over that in terms of use. This is interesting. So Nancy Sheever is a psychologist from CSU Dominguez Hills. Any Dominguez Hills folks out there? No? No cheers on that one? All right. So her theory is that phone-induced anxiety operates on a positive feedback loop. So it keeps us in a persistent state of anxiety with the only relief being looking at the phone. That relieves our anxiety, then the anxiety builds up and we reduce that anxiety by engaging with the phone. You saw that clip that Paul showed. She did an interesting study where the setup of the study was that she was looking at test anxiety. That's not really what she was looking at. She brought students in and hooked them up to EKG monitors to measure their heart rate and then said, you know, so that they don't interfere with the mechanisms here, we're just going to take your cell phones. And they took the cell phones and put them just kind of, you know, out of reach but not out of hearing. And then they started calling those cell phones, right? And they were literally measuring the autonomic response of the students as those cell phones were going off and they couldn't go to them. And they just, you know, found that the stress levels were off the charts on that. So I also found that some of our colleagues in other countries are doing a lot of important research in this area, maybe a little more than we're getting into. And so a study was done by a group in Serbia and Italy and it's interesting all in all, but one of the pieces was that supports what we've been hearing is that the strongest predictor of high stress levels was keeping the mobile phone less than one meter away during sleep. So they found that that was the cutoff. If it was further than that, maybe the stress level wasn't as high, if it was essentially within reaching distance. And I also found that 65% of us sleep with or next to our cell phones, right? So and among college students, it's even higher. So I had thought about that and we've also thought about why that might be the case. But I think that we can develop a psychological link with our phone and that if it's with us all the time and we're just connected to it and that that act of taking that phone and whether we're locking it away somewhere or putting it downstairs or at least the other side of the room, it allows us that separation and individuation if you will from our phones, right? And maybe that's what we need to do because again, from different perspectives I'm hearing the same thing and it's a fairly easy behavioral change that we can make for ourselves and for the people we're working with. So think about that. So this is a study out of Oxford in England and they came up with, they call it the digital Goldilocks hypothesis, right? I remember Goldilocks. So they found that a moderate use of digital technology is not intrinsically harmful and maybe advantageous in a connected world. But that overuse may displace alternative activities. Too little tech use might deprive young people of important social information. And in the study they found certain, what they call inflection points, the point at which it went from being helpful to being harmful. So on the weekends you could do more and it was still helpful because you were socializing and doing things like that. During the week when you were supposed to be in school and attending to other activities, that inflection point was lower. And they also broke it up by types of use whether it was gaming or texting and those kind of things. And they found smartphone use and video games had lower inflection points on weekends. So that was more quickly, if you were using your phone for those things, that point in the number of minutes that you could engage with a phone before it was tending more negative than positive was lower. So, yeah. And they did try to emphasize, and I think it's important that we not come off as too judgmental about this whole thing. I mean, this is the reality that we're living in and there are some that have been articulated already some really positives from our technology. And 83% of adolescents say that social media makes them feel more connected to friends. And 68% receive social support through digital technologies in tougher, challenging times. So, maybe something to consider this Goldilocks hypothesis that sort of abstinence or just total removal is not always the best solution, but finding some kind of moderate use would be a better way to go. So, Paul had gotten into this about addictions. Just to reinforce it a little bit that, you know, here are some other things that, you know, might be an indication that this is a problem for somebody texting and driving, causing family conflict, causing functional impairments, compulsive checking, causing sleep disturbance or anxiety or irritability, if not accessible. Any of you heard the term NOMO phobia? That's what we need is another phobia, right? So that's actually a term that's being used for no mobile phone phobia. And it's the irrational fear of being without your mobile phone or being unable to use your phone for some reason, such as the absence of a signal or running out of minutes or battery power. So, just to be clear, this is not a DSM-5 diagnosis. But it is a reality. And the numbers that they were hypothesizing of people who actually experienced some form of NOMO phobia is really quite high. And we also heard it. Do you remember what this is, FOMO? Fear of missing out, right? There's another study. Actually, I just saw this as a recent study out of China looking at undergraduate students. And they looked at the relationship between what they termed problematic smartphone use in depression and anxiety. So they defined problematic smartphone use as entails addictive use, prohibited use, and risky behaviors. Addictive use is linked to excessive reassurance via smartphone use. Internalized psychopathology did not predict smartphone addiction. But they did find that the fear of missing out may be an important variable accounting for why some types of psychopathology, like anxiety, are associated with problematic smartphone use. So, shorthand for that is, yeah, that fear of missing out does predict when smartphone use can cause anxiety. Other causes, and clearly it's not all about cell phone use, the anxiety we're seeing, gun violence, 75% of Gen Z, what we're supposed to call them now, iGens, so okay, report that mass shootings are a significant source of stress, 72% are worried about possible school shootings, something they found from the Berkeley study, academic pressures, finances, big cause of anxiety, environmental stressors. More than two-thirds of Americans are stressed about the direction of our country. I'd have to think that was more like four out of five. I don't know who that fifth person is either, but that's a whole other story. Yeah, and on college campuses where we have this, we have stress related to institutional racism, we have stress related to what our DACA students are going through, what our LGBT students go through, what our first-generation students deal with. So, and other demographic variables, a changing demographic that we're seeing in college campus across the board and certainly in the UC system, which is great and it's a much more diverse population than we've ever had, but it also brings other challenges. One of which is poverty and 20% of dependent undergraduates were from families in poverty and that is up from 12% in 1996, so the good news is higher percentage of students who are in poverty are getting to universities, but it's also again causing more challenges and we have other causes. I'm sure you've seen some of the issues that we're dealing with with our graduate students and you see Santa Cruz right now and that, yeah, it's a challenge and tough situation that graduate students are in with cost of living and then our undergraduates are impacted by not having graduate students around. I don't know how that's going to resolve and of course the coronavirus is starting to create more and more stress on campus or just some day-to-day problems that we're seeing. This was interesting and I think really supports what Gene was talking about and this is a guy named Jonathan Haid who wrote a book called Coddling of the American Mind and his theory is that children are, he uses the term antifragile and they need to have experiences to go strong and we've been treating them as if they're fragile, trying to protect them and help them avoid problems and failures and concerns and that by trying to eliminate risk from our kids we're doing a disservice. This next stat actually we all seem to pick up on and I thought it's interesting to look at the average life experience of Gen Z going to college is equivalent to that of a 15 year old 30 to 40 years ago. So think if you're of let's say a generation like mine think about what it would have been like for you to go to college at 15 instead of at 18 and how well you would have fared and that gives you an idea what the experience of our students is today. And this all coincides with the whole social media piece and children being exposed to an often harsh environment at a young age without any preparation for it. So check out Jonathan Haid if you want to find out more about that. I wanted to touch briefly how we're doing on time here by the way. Five? Okay. So let me cruise quickly through this assessment piece so you know anxiety is a behaviorally driven disorder so it's not that hard to assess in that it's not hidden. It creates a lot of discomfort and if you ask people about it they'll tell you about their panic and their worry etc. So clinical interview is really the main tool. You can use a structured interview. There's various other measures that you can use if you want to track over time and that's a good idea to look at change. What I wanted to emphasize here in my last piece is that because of the prevalence of this we've really started to think about environmental interventions and it sounds like Valerie was talking about a similar thing which I'm thrilled to hear in lower schools. So this is a picture of UC Davis. Any Davis folks out there? Yeah, a couple. So these are nap pods that are indicated up there so they have places where students can just take a nap. So we talked about like sleeping the big thing well let's find a place for students to sleep. This is, we don't have time to watch this but this is from CSU Long Beach and they've developed an oasis center. It's like a wellness center. It's a cell phone free zone by the way. You leave your phone at the door and it has meditation space. It has a labyrinth. It's really quite a relaxing lovely space for the students and I think this is a direction we need to go in to create a better environment. So thank you. Also this idea of learning how to fail. So we have a resilience initiative on our campus following in the footsteps of other universities including Stanford that did a resilience project where they worked to normalize failure. Several other schools did that too and we're working on developing right now a resilience initiative on our campus. Some other things that we're doing again to get to the vast number of students who need help is focusing more on our online service. So we use an instrument called TAO which is Therapist's Assistance Online and this is actually evidence based and there's a lot of mental health ads out there that aren't necessarily scientifically studied. This one is and we use others as well. These are just some clinical interventions that are part of our services at CAPS and we've recently started this anxiety toolbox which is three sessions of group therapy that are really psycho-educational and they're really taking off on our campus. We can start them throughout the quarter and more and more students are coming in. We also work with peers to train them how to work with students and psychopharmacology, case management, mindfulness, social anxiety group, so all these things we have going. Just quickly here, that is problematic smartphone use is a PSPU and so what do you do about it? It really hasn't been extensively studied that I could see. Ironically there's been many apps developed to help limit use. I thought that was kind of cute. But here's some potentially useful ideas that you might offer to somebody who's struggling with this. Not always answering your phone by turning off some alerts and setting limits about not using a phone during certain situations or time, deleting old apps, unfollowing news feeds and friends that don't contribute usefully cleaning up email subscriptions, moving a cell phone away from bed while sleeping. Let's do that. Balancing screen time and in-person time and trying a technology faster. I've had this fantasy about if we could only get maybe everybody on campus to close off their phones for five minutes together. What an empowering moment that would be. I don't think I'll ever get there, but I can dream. One of the more distressing things is when I leave work every day and I see 50 students waiting for the bus and they're all just looking at their phones. Then we know that social anxiety is a major piece that we're dealing with. Maybe if we started talking to each other a little bit we might do a little better in that area. We are investigating a lot of this. I'm working with the research team now and trying to understand why our students seem more impacted by mental health concerns. We're starting to look at this UCY data, what we can learn from that. There's a professor in the psychology department who we're working with to better understand and utilize online options and how we can improve digital hygiene and what are the impacts of the resilience-based efforts that we're working on and what can faculty or academic departments do differently to help reduce student stress. That's a really big piece. Another environmental stressor is how we structure the classes, how we structure the exams. What our expectations are. Frankly, at UCSC we haven't done a great job of considering the impact on the mental health of our students in a lot of those decisions. Given the extent of the problems we're starting to look at that and think about new innovative ways to teach our students and incorporating this in. That's all from me. This is a picture of what I'm blessed to see every day as I drive off campus. I like to put it in presentations to remind me and to remind people I'm talking to what an amazing environment we live in and how beautiful it is here and that we take the time to appreciate that and enjoy it. That's going to help us as much as any other intervention. Thank you all very much.


This review examines the different types of materials used in dentistry and oral and mexilofacial surgeries to replace or repair bone defects. These materials include autologous bone, allografts, xenografts, synthetic materials, and calcium phosphate-based ceramics. Each type of material has its own unique characteristics and advantages slash disadvantages depending on the size, shape, and location of the defect. Additionally, this review discusses the challenges associated with analyzing in vivo and clinical studies to determine which material is best suited for a particular situation. This article was authored by Maria Piaferez.