Northeastern University College of Computer and Information Science
Geometric and Physical Computing research group (PI and founder)
Ph.D. MIT EECS, 2009 (full curriculum vitae)
I joined the faculty at Northeastern University’s College of Computer and Information Science in January 2010. My research focuses on algorithms, software, and hardware to address open problems in robotics, manufacturing, and human-machine interfaces. I founded the Geometric and Physical Computing group to pursue this work. The group website describes our projects, lists our publications, and gives directions to our lab.
I develop and teach courses in graphics, geometric computation, and robotics which introduce important theoretical approaches to these topics, and which also show their realizations in practical software systems.
I defended my dissertation in operation and control of articulated robots in EECS at MIT in August 2009. I completed my A.B. thesis in self-reconfiguring modular robots at Dartmouth College in 1999, and my M.S. thesis in precision metrology at MIT in 2001. From 2001 to 2003, I worked full time at NASA’s Jet Propulsion Laboratory on software research and development supporting Mars exploration, including the 2003 Mars Exploration Rover mission (Spirit and Opportunity).
Contact information is available in my curriculum vitae.
I am passionate about computation that interacts with the physical world, with emphasis on practical implementation and experimental validation of new theoretical results. I’ve been building circuits, machines, robots, and software systems for most of my life, and I’ve been active in the field of experimental robotics for over 12 years.
In early work with Daniela Rus and others I explored and popularized the concept of self-reconfiguring robots based on cubic modules with expanding and contracting faces. We call this the crystalline robot. I have also worked on several other self-reconfiguring and modular robot systems.
In another thread of research, I have been working with NASA since 2001 on systems for Martian and Lunar exploration, with particular attention to the problem of operating complex robots with appropriate division of function between system autonomy and human operator.
My current work spans a range from system-level operation and control of articulated robots with twenty, fifty, or more joints down to meso-scale issues of compliant actuation and reliable sensing. I am developing new perception, planning, and control algorithms for machines operating in uncertain environments, and also investigating how mechanical systems, sensors, and actuators themselves implicitly represent and process information. More broadly, my current interests extend to navigating large visual datasets, novel geometric design systems, multicore and GPGPU software, and both conventional and novel user interfaces.
Taught in: Spring 2013, Fall 2011 (links to course websites). The grad version was topics course CS7380 in fall 2011 and CS5335 thereafter (same website).
This course introduces autonomous mobile robots from a computer science perspective. The focus is on applied algorithms and software development, including closed-loop control, robot software architecture, wheeled locomotion and navigation, tactile and basic visual sensing, obstacle detection and avoidance, and grasping and manipulation of objects. Throughout the course of the term students will progressively construct mobile robots from a predesigned electromechanical kit. The robots will be controlled by software of the students’ own design, built within a provided robotics software framework. The undergraduate version of the course culminates in a grand challenge competition using all features of the robots. The grad version culminates in a term project that connects with current research in mobile manipulation.
We have developed the Open Hardware Mobile Manipulator (OHMM) platform which is used in the course.
Taught in: Spring 2012, Fall 2010, latter as topics course CS7380 (links to course websites).
This course surveys practical techniques for representing geometric objects in two and three dimensions, for computing their motions and interactions, and for human interfaces to manipulate them. These techniques are useful not only in graphics, but also in robotics, computer vision, game design, geographic information systems, computer-aided design and manufacturing, spatial reasoning and planning, physical simulation, biomechanics, and the implementation of many types of human-computer interface.
The course is divided into one- and two-week units on subtopics selected according to student interest from the following menu:
Taught in: Spring 2011, Spring 2010 (links to course websites).
This course charts a path through all the major aspects of mainstream computer graphics. Students learn the fundamental mathematics, algorithms, data structures, and programming techniques that are at the core of modern 2D and 3D graphics applications in practice. Such applications include: drawing and design programs, data visualization interfaces, desktop window systems, and games.
Lectures focus on mathematical foundations and algorithms in four core areas of computer graphics: modeling (describing geometry and its appearance), rendering (producing images of a model), interaction (navigating in a scene and manipulating objects), and animation (making models move). Homework assignments are significant, and consist largely of software development tasks where students use their creativity to apply the methods learned in class in building several interesting 2D and 3D graphics applications.
Taught in: Fall 2012 (link to course website).
This course is an introduction to computing and programming. Its major goal is to introduce students to the principles of systematic problem solving through programming and the basic rules of computation.
The course does not assume any prior programming experience. It is therefore suitable for freshmen students—majors and non-majors alike—who wish to explore the intellectual ideas of the discipline.
Taught in: Fall 2013 (link to course website).
This course introduces the mathematical structures and methods that form the foundation of computer science. The material will be motivated by applications from computer science. Students will learn: (1) speciﬁc skills, e.g., binary and modular arithmetic, set notation, sequences, lists, trees, and graphs, etc.; (2) general knowledge, e.g., counting, proof, and analysis techniques needed to estimate the size of sets, the growth of functions, and the space-time complexity of algorithms; and (3) how to think, e.g., general problem solving techniques.