Autonomous robotics projects for learning software engineering

Software engineering consists of a body of theory and a collection of techniques for designing useful software-based products while minimizing both the development risk and the risk of in-service product failure. Systems engineering and project management techniques are key components of this discipline. While these techniques can be presented in a didactic manner, students generally learn better when "hands-on" experiences are combined with theoretical exposition. Autonomous robotics projects can provide an opportunity for these hands-on experiences. This paper describes a one-semester software engineering course in which student teams successfully undertook robotic development projects with significant uncertainty. These projects provided significant intrinsic motivation and extrinsic measures of success for the student development teams.