ROB 599: Programming for Robotics | Fall 2019

Instructor: Acshi Haggenmiller (acshikh), PhD Candidate
Tu/We 1:30-4:30pm
1620 Bob and Betty Beyster Building (CAEN lab in the hallway to DOW)


This class is designed for engineering students who have a basic understanding of programming but haven’t majored in computer science or taken a dedicated sequence of programming courses. The goal of this class is for students to learn how to 1) write programs from scratch that meet robotic system requirements; 2) organize programs into logical sections; 3) critique program design and implementation choices; 4) use appropriate debugging tools and methodology to efficiently understand and correct program behavior; and 5) use the command line to work with git and other relevant utilities and scripts.

As it is titled Programming for Robotics, we have tried to design the in-class problems and homework assignments to be relevant to common robotics situations and algorithms, with the greater goal of demystifying programming and avoiding black-box magic. To be relevant and exciting, we designed the homework assignments around building a robotics simulation environment. While there are many excellent libraries and tools available for this (ROS among them), we will figure it out for ourselves! The best way to learn programming is by programming, so there will not be any quizzes or exams, and algorithms and necessary math will be provided so you can focus on implementation and not derivation.

The class is based around programming in the C programming language. C is a relatively simple language that will let us understand computer programs fundamentally works because the language itself will do very little complicated work for us. Although most robotics programming is done in languages like Python and C++, the fundamentals you learn in C will help you to better understand what is happening in those more complicated languages.

Most class sessions will follow a “labture” format. We will start with a series of segments containing a short lecture, an instructor demo, individual work on a self-contained problem, and finally class solution evaluation. Students are encouraged to ask each other and the instructor for help, but only students who have finished a problem should be looking at other students’ code. In the evaluation, we will review several anonymous solutions and talk about their relative strengths.

Some class sessions will not have any formally scheduled instruction or problems. Instead, topics will be addressed on an as-needed basis, with the remaining time open for working on the homework assignments with instructor help. The homework assignments are intended to require about 4 hours per class session. In general, they will be due 1 week after the end of the topic section they were assigned in. For example, the first homework will be due before class session 5.

Class Schedule

Classes 1-3: Data representation

Classes 4-7: Memory concepts and debugging

Classes 11-13: Object abstractions

Classes 14-17: Threading

Classes 18-19: Message passing and networking

Classes 21-27: Final projects


Grades will be 40% in-class assignments and 60% homework assignments (evenly split between all the homework assignments, including the final project). In-class assignments will be 50% participation (meaning a non-trivial submission) and 50% correctness. Assignments will report their percentage completion through the auto-grader, with points given for completing objectives and points taken away for things like memory errors or inconsistent style.

Late Policy

For in-class work, the lowest score for a day’s in-class assignments will be dropped.

For homework, over all the homework assignments, 48 total cumulative hours of tardiness are “free”. After this, each hour an assignment is late (rounded up by ceiling) will reduce its maximum score by one percentage point (so 80% completion of an assignment 10 hours late would be 80% * 90% = 72%). The auto-grader will report these percentage calculations and keep your highest final score from any submission.

Accessing CAEN Computers

To have a consistent development environment for all users, we will be using the CAEN computers in our classroom space. No matter which computer you log into, your will have access to your files.

If you so like, you can also access the CAEN computers remotely from your own computer through the ssh tool:

Academic Honesty

The programs you submit, for both in-class and homework assignments, must be your own work, and significant similarity to other submissions will be considered highly suspect. Ultimately, the basic guideline is to be reasonable.

While working on problems, you are encouraged to search the internet to learn how to perform specific functions or techniques. In general, if you find a trivial one-liner on StackOverflow, you do not need to cite this. If you are copying a full algorithm, say for quicksort, you would need to cite this (or just use the standard library function qsort!). If that algorithm is a core objective of the assignment, however, then this would not be appropriate regardless of citation. Especially when you implement trickier algorithms or mathematical calculations, it can be wise to include a link to the original description of that method in a comment. This makes it easier to check or resume your work later.

You are also encouraged to get help from your peers. This means that after honestly trying to figure out how to fix your code, you may ask another student who has finished that section to look at your code and provide feedback on potential issues. When viewing another student’s code, however, the conversation should remain high-level and not be guided instructions on what to type. The most useful thing would be to point out flawed logic and allow the student to come up with the fix themselves. For earlier brainstorming of problem solutions, students are encouraged to discuss problems using a whiteboard or a sheet of paper so that they can later code unaided. You should not show your own working code to another student who is struggling to complete theirs.

If on the homework you get significant help from your peers, please consider adding a comment in your code saying who you collaborated with and what information was shared. This may help avoid potential confusion in similar solutions. However, since sharing of code is not permitted, we still expect the small details to be significantly different.

If it has been determined that students have flagrantly violated this policy, we reserve the right to respond severely.