[MUSIC] Hi everyone and welcome again to the Robotics Specialization Capstone. My name is Alex Zhu and I will be the TA for the Autonomous Rover track of this course. In this video, I'll give you a quick overview of the track, including the required equipment, the topics covered, as well as the final deliverables which will all be done using this autonomous rover that you'll build on your own. In the previous courses in the specialization, we've learned about a lot of theoretical things that we may have tested in simulation, but a crucial aspect of robotics is the real world implementation and integration of all of this theory. There is a significant challenge in simply just putting everything together and getting it working on a real world robot. And as a result, this track will be very hardware focused. So what this means is that you will actually be purchasing your own robot kit and putting it together which actually will require some soldering. And then finally you are going to be programming it with some autonomous behaviors that you've learned in the previous courses. Now, we'll go over the full kit a little bit later. But first, let's talk about some of the theory that you'll be covering. So the first thing that we're going to do is path planning or Dijkstra's. And basically this allows our robot to find it's way through a world and a map that we give it. Next, we're going to cover controls which allows us to calculate velocities to move the robot, that'll allow it to move to wherever we want to go. Next, we have estimation. In order for our robot to know where to go, it needs to know where it is right now. And finally, there is a lot of coordinate transformations involved in this course. We have a lot of sensors that we need to fuse together and so we need to know the difference in the positions that there are on the robot. Now our final goal will be to have a mobile robot that, when you give it a map of its environment, it can take any two positions from the user and move from the first position to the second one, while also avoiding obstacles in the map. Now I want to mention here that this is a basic robot. That doesn't mean that it's bad in any sense, but rather that there are a lot of ways to extend the algorithms that you'll be implementing. And so along the way, we'll actually be happy to provide potential directions for you to improve or maybe further complicate the algorithms that you're applying to the robot. Although these will not be required for the course. In addition, one other thing that you're going to find new in this course is that all the programming will be done in Python. Now MATLAB is great for simulations, but Python is just that much faster when you run it on something like the Pi. Now, one more thing before we get to the hardware, let's talk about why we want to build something like an autonomous ground rover. You're going to find that a lot of the existing robotic applications actually do very similar things to the final rover that you'll going to have at the end of this track. When you break it down, all the robots that you see in this slide have to do some kind of measurement of its outside world and then use that measurement to get an idea about where it is, and also where it needs to go. And then it has some controls that'll move it to wherever it wants to go. So for example in the self driving car, they have a lot of set laser sensing which they fuse with camera measurements and inertial measurements to get their 3D position. And then they just move to wherever the user wants them to go in the world. It's very similar thing is done in the Amazon Kiva as well as the iRobot Roomba. The Kiva actually has a camera that tracks basically what are bar codes on the floor and allow it to see where it is. And once again, it just does state estimation and then planning to move to its next position. And finally the Roomba is a little bit less sophisticated in its sensor array. Basically, it uses bump sensing technology, as well as some laser sensing so that it basically just goes until it hits an object and then just bounces around to find where it is in its world. We're also going to see that a lot of new robots in the future will have technology very similar to what we're building as well. Now, the robot that we build will be a little bit simpler than the ones we just saw. But it'll be able to do a quite a lot on its own. It'll be powered by a Raspberry Pi 3, which is running the robotic operating system or ROS as a framework. The Pi will talk to a DC motor driver which will control the wheels as well as the movement of the robot. And also we have an RGB camera on the front for perception as well the nine degree of freedom IMU that consists of an accelerometer, a gyroscope and a magnetometer. However, in this course, we will actually only be covering the gyroscope in the basic set. Although as an extension, you can include the accelerometer in the magnetometer to get more accurate estimates about your position. For a full list of all the specs and all the hardware that you will need to buy, please go to the link on this slide to see a wish list with everything that you'll need. Now, in addition to purchasing the robot, we're going to need a few more things to build and connect to the robot. First, in order to connect to the robot and then to perform some of the calibration steps, you're going to need an HDMI-compatible screen. This can be a monitor or a TV, but do make sure that you have either an HDMI port on the screen or you have some kind of HDMI to DVI or AVI adapter. You're also going to need a keyboard and mouse to communicate with the Pi. Although after you're set up, you can actually just use a laptop or another computer to connect to the robot remotely using SSH. Because of this, you're also going to need a WiFi network that allows you access to SSH into machines within the network. This should be fine on most public networks, although if you are at something like a university, you should check with your Internet provider first. You'll also need access to a printer, to print both the calibration patterns for the camera as well as AprilTags, which are basically just markers that allows us to get 3D information from the world using the camera. And finally when building the robot, you will need access to a screwdriver kit and a soldering iron. Now the soldering iron might be a challenge for some, but if you're comfortable with it, all you'll need to do is solder a few pins onto the motor board as well as a few wires going from the Pi to the IMU. Now that we've talked about what we need to buy, I want to give you a preview of some of the projects that we're going to cover in this course. So in this first video, the Pi is using the camera on the front to see the AprilTag that I'm holding on the ground. It uses this to calculate the position of the robot and it then it uses that information to feed into the controller which then moves the robot so that it continuously follows the tag. At one point, you'll notice that the Pi actually stops while following the tag. This is because the tag leaves the field of view of the camera, and so the Pi actually cannot see the tag anymore. And this is one important case where it's important to have sensor fusion, because sometimes, while we might not be able to see anything, our IMU is able to redirect us back on to the right track. Now on the second video, this is actually the final project of the course. Basically what you see is that the robot will see a number of tags in front of it. We have a map that relates each tag to a unique world origin so that by seeing any one tag, we can figure out where the Pi is with respect to that world. The Pi then uses this information and infuses it with the gyroscope information from the IMU to allow it to get a very accurate estimate of its world position. Now this time, the Pi will also loose the tags from its field of view. But because we have the IMU information fused in with its state, we can actually keep moving even though we don't see anything with the camera. Along the way, the Pi is also using path planning to avoid obstacles in which, in this case, they are the tags, so that it can manuever through this obstacle path without hitting anything on the way. Finally, I want to leave you with a full summary of what we're going to cover in this course week to week. So this week, because no one has their robot yet, we're going to implement Dykstra's and Python. Now this is going to be pretty much exactly the same as the assignment you did in the Computational Motion Planning course, except this time, we're not going to be programming in MATLAB. So this is just an exercise to get you used to programming in Python as well as getting you used to the robot simulator that we're going to be using throughout the course. Now next week in Week 2, hopefully you'ill have received your robot kit, and so we're going to spend the next week assembling the robot and getting everything up and running with the Pi. In Week 3, we're going to spend our time calibrating the system. Now, this involves calibrating the intrinsics of our camera, as well as the accelerometer on the IMU and also the DC motors. So, this allows us to get very accurate information from our sensors, so we can convert what they output into values that we can use in the real world. In Week 4, we're going to start actually programming on the robot. So this week, we're going to learn about a controller that allows the robot to move to any given position, similarly to the video you saw before. And then we're going to print off an AprilTag and get the robot to actually follow the AprilTag around as you move. In Week 5, we're going to implement an Extended Kalman Filter, which you learned about in the Estimation and Learning course. So this will allow us to fuse the robot poses that we get from the AprilTags with the IMU gyroscope measurements to get a more accurate estimate of the robot's position, as well as to get estimates of the robot's position when we cannot see an ApriTag in the field of view of the camera. So finally in Week 6, we're going to put everything together and get the robot to move through any environment that you have a prior map for while avoiding obstacles along the way. Once this is working, you're going to upload a video of your robot doing its thing for everyone else to see.