Robotics: Udacity CS373 - Programming A Robotic Car - Week 6/Unit 6 and Final
Posted on 2012-06-10 @ 12:31:06 by r00t - Read the parent: Udacity CS373 - Programming A Robotic Car - Week 5/Unit 5
Well, I'm a little late on this for a variety of reasons, so I am going to try to keep this as short as possible. First, I completed Unit 6, which was all about SLAM - essentially taking everything we learned, plus a little more, and bringing it all together to control a robot. Overall, this went well; it was when the final came around that things got hairy, but I managed to get through it, too - and learned what the next class I need to take will be about...
Unit 6 started off with a series of review quizes regarding what we had learned previously; after that, we had a task laid out, which was to build (in Python) a virtual car using the "bicycle model" we had learned about earlier (Unit 5) to navigate an obstacle course and reach a goal. This was done (and explained) by using a form of "segmented cross-track error" and our PID algorithm to steer the car properly, after our planner (A*) and smoother found the path to get to the goal. It wasn't a perfect system; there would be occasional collisions with the obstacles over multiple runs, but for most runs, it worked fine. We then moved on to learning about a particular form of SLAM called "graph SLAM"; to be honest, I only barely understood it, but it had to do with building a set of constraints between landmarks and the robot's position, filling in a matrix and vector with this information. As you do this over and over, you can then apply a simple operation between them, and out will pop a "best guess" as to where the robot is in relation to the landmarks. So what are ultimately landmarks? Well - landmarks are what you define them to be! For most cases, you can simply use measurements from your sensors (and the more accurate the sensor, the better). In our case, we pretended we had fairly accurate sensors (something akin to a LIDAR, I suppose), but you may be using something like an ultrasonic distance sensor with more noise/less accuracy. Regardless, each time you got a measurement (or series of measurements) you could define that as your "landmark" and correlate against that via future measurements. Now - this brings up another issue with graph SLAM: If you are populating this matrix and vector over time, your robot is eventually going to run out of memory! It is possible, though, to automatically reduce the size of the matrix and vector while rolling the previous measurement data into the results. This was detailed how to implement it for the homework in Unit 6; it took me a bit to implement it, but I eventually got it to work. After all of this, it was time to do the final, and I was stuck - stuck pretty bad, actually. If you saw my last article, you know where I was stuck: Probabilities. I absolutely suck at them. No two ways about it, it is a big failing of mine. I eventually got all of the problems completed and correct on the final, but for the ones on probabilities, for those, I don't understand the answers completely. I am hoping that when the class is "closed out" there will be an explanation for all of the problems. I had no problem implementing the programming portion of the final, where we were to build a virtual robot that used a path planner to move boxes in a warehouse; that came to me very easy (I understand A* now!). But in the instances where probability played a part - ugh. So now I know what class I need to take next - I need to take a class on probabilities and/or statistics. It seems that for implementing AI and ML algorithms of any nature, that is a subject you have to be fairly good at to implement the algorithms successfully. For now, though, I am taking a break from classes, and maybe this fall or winter I can pick it back up and learn this needed subject.
Questions or Comments?
If you have any questions or comments about this article, please contact me...