This page gives a broad overview of the COMP3431/9431 Robot Software Architectures course. This web site is an ikiwiki based wiki and most pages are editable by anyone enrolled in the course. Pages are all publicly readable. You'll need to use your normal CSE account name and password to log in to make changes. All changes are logged.
Course Introduction Page Contents
Aims
This course gives both a theoretical and a practical introduction to the control of robotic systems. The course is in two parts:
Practical Robotics
This part of the course gives students a practical introduction to some specific robot architectures; the main system architecture will be the Robot Operating System, ROS. We will be using older Pioneer robots and newer TurtleBot Robots, or other robots as available.
An overview of agent planning and learning systems:
This part of the course gives students an introduction to the theory of decision making: How can an agent build up knowledge of its world? Having done that, how can an agent choose its actions? A variety of different decision making and planning architectures are covered; including classical planning, reinforcement learning and cognitive architectures. In labs, students will get hands on experience with some of these planning systems. Assessment of this part will be by quiz and final exam.
At the end of this course, students should have:
- experience with the details of one robot architecture,
- an overview of a range of other architectures and decision making systems,
- an understanding of the practicalities of programming physical robots as opposed to purely software systems,
- an understanding of a robot as a complete system, as well as its component parts.
This course is being taught in conjunction with NICTA's Machine Learning Research Group.
Pre-requisites
This course is for postgraduate students (COMP9431) and advanced undergraduates (COMP3431). It is a 3rd year course because it has few pre-requisites. It is not an easy course.
I expect students in this course to be able to program in C++ and Java, and to be prepared to learn Python.
While not a formal pre-requisite or co-requisite, I highly recommend that students take a machine learning course if they are interested in artificial intelligence, eg COMP9417. That course does not need to be taken before this one. The artificial intelligence course, COMP3411, is not a bad choice either (although it isn't going to give you the depth of Machine Learning knowledge I'd recommend). While it isn't a formal pre-requisite, students who have already taken COMP3411 or an equivalent course often find this course easier.
Because there are only a small number of robots, this class is limited in size. As it is somewhat difficult, I have placed a WAM requirement on the course. For people who have a WAM below the required WAM, there is a waiting list. That waiting list is used to fill up any positions remaining just before the start of the semester.
Course Web Pages
You're reading them :). http://www.cse.unsw.edu.au/~cs3431/
As noted above, this is a wiki and many of these pages are editable by people enrolled in the course. The git repository for the wiki has read-only access here: http://www.cse.unsw.edu.au/~cs3431/wiki.git/.
Staff
Lecturer-In-Charge: Up through 2012 this course was taught by Will Uther. As he's moved on to Google Australia, at this stage the future of COMP3431/9431 is unclear.
Teaching style and other fuzzy stuff
I (Will) am a researcher at NICTA, who teaches at UNSW because I enjoy it. My personal goal for this course is to teach top students how to build impressive intelligent systems, and possibly encourage some of them to go on to get PhDs (side note - I'm not suggesting that they all go into academia. Australian industry needs more PhDs!). For this reason, I teach to the top of the class - the motivated people who want to learn.
The class has traditionally been fairly small (10-15 students). I haven't found a textbook that covers the topics I cover in the right level of detail, so there is no set text. I teach from my notes. I do not use powerpoint or other projected slides. I prefer to present ideas on the board and then discuss them. The course is all about getting an intuitive feel for what is going on - you need to understand the algorithms in detail to implement them, but I assume you can all read those in a book. I'm interested in making sure you know enough to know what you need to look up. As of 2012 I've been putting videos of the lectures online at UNSW TV. They are in the "Robot Software Architecture" collection in the Computer Science and Engineering section.
Assignments and labs are also run a little differently in my course to other Computer Science courses you may have encountered:
The assignments are all group-work. You're going to have to work in groups when you graduate so you may as well get used to it now. Furthermore, the assignments are graded is a style more like a design class than a computer science class: you demonstrate your robot doing what it does, and then the class discusses why it behaved that way and whether that is, on balance, a good thing.
The labs are also unusual. I dislike busywork, so I have already implemented much of what you need for the labs. The goal of the labs is for you to play with the implementations to see for yourselves what happens when various parameters are changed. Because there is not as much of a set script as I have seen in other labs, this style of lab requires the student to be inquisitive and adventurous.
Syllabus
Course notes and rough syllabus are available on the class wiki. A sample exam is available from previous years as well.
Reading Materials
There is no set text for this course. However, the following books are recommended:
- Artificial Intelligence: A Modern Approach; S. Russell and P. Norvig
- This is a good overview textbook for artificial intelligence in general. If you were going to get one book on AI, this would be the one I'd choose.
- Probabilistic Robotics; S. Thrun, W. Burgard and D. Fox
- This is a newer textbook covering "perception and control in the face of uncertainty". It covers those areas well, but doesn't have quite the breadth of this course.
- Automated Planning: Theory and Practice; M. Ghallab, D. Nau and P. Traverso
- This book focusses on the planning and decision making areas of artificial intelligence. It goes goes into more detail in that one area. It provides a readable introduction to this area of artificial intelligence.
- Reinforcement Learning: An Introduction; R. Sutton and A. Barto
- This is a good book on reinforcement learning and Markov Decision Processes, in the same way that "Automated Planning" is a good book on planning systems: it covers its section of AI well.
- Machine Learning; T. Mitchell
- While machine learning is only touched on in this course, I consider it a very important part of AI and robotics, so I'm putting this book here anyway.
- Markov Decision Processes: Discrete Stochastic Dynamic Programming; M. Puterman
- This book focuses in great detail on the theory of Markov Decision Processes. It is almost 10 years old now, and so lacks some of the newer contributions to the field, but it is an excellent reference on the mathematical theory of stochastic decision making.
Assignments
There are two large assignments worth 15% each, and some small homeworks worth 20% in total. Details of the large assignments are in the assignment sheets. The two large assignments utilise real robots and also have a written report component. These numbers are sometimes adjusted during the course in consultation with the students.
Due dates are on the calendar section of the web page.
Assessment
- Assignments: 50%
- Final exam: 50%
Lectures and Assignments are similar between COMP3431 and COMP9431 students.
Units of credit: This is a 6 UOC course
Calendar
The course calendar is available online.
Plagiarism
I dislike dealing with plagiarism, so please don't make this an issue. For the written assignments, I follow the standard CSE Plagiarism guide.
For the teamwork assignments things are a little more complex as you will have access to open-source code that solves the problem. I encourage you to look at that code, understand it, and then write your own code based on that understanding. The assignment sheet will clearly state which code you are allowed to include directly in your submission. Apart from that explicitly allowed code, all code you submit should be written by you or your team. A member of each team must be able to clearly explain any of your code to me on request.
Feedback
I very much appreciate constructive feedback on how the course might be improved. The course does change based on this feedback (e.g. there used to be three robotics assignments, but one of them has been replaced with a written assignment so that students get more feedback about their performance on the written work before the exam.). Feedback can be sent to me at any time. I particularly encourage students to fill in the CATEI survey at the end of each semester. A link to the online CATEI surverys is on your myUNSW page.
As an example of typical feedback, I'll post something from last year (2011):
In class teaching is exemplary. My only difficulty is when I missed a lecture. The outlines on the wiki do not suffice to cover the content of the class (and are out of date) and we should not have to rely of other peoples notes.
I agree this is an issue. I will endeavour to clean up the notes on the wiki as the class is taught, but these will never be complete. In 2012 I've been putting videos of the lectures online at UNSW TV. They are in the "Robot Software Architecture" collection in the Computer Science and Engineering section of UNSW TV.
I've also had feedback that the assignments are a bit disorganised. This was because in 2011 we changed robots and operating systems. In 2012 we will be changing robots again, but sticking with ROS. After 2012 this should settle down again.