CS 363: Assignment #5

Interactive Robot

The purpose of this project is to integrate vision (face detection), obstacle avoidance, and wandering into a single interative robot application.


Follow the directions from last week to set up your working directory with gcm-devel, nav-devel, Mage, svm, and svm-artk. If you have any problems making svm-artk or svm on the netbooks, let me know ASAP.


  1. Make and test out the vision module, svm. You'll need three terminals to run svm and view the current display.
    1. Start central in one display.
    2. cd to the modules subdirectory of svm. Make sure the first two parameters in camera0.conf are 1 (camera active) and 0 (PTZ inactive). In camera1.conf, the camera should be inactive.
    3. Run svm-v4l2 in the second terminal using:
    4. Run dispipc in the third terminal using:
      ../bin/dispipc localhost
      You may have to substitute the name of the netbook for localhost.
    5. Turn on streaming video (2) and then turn on the face detector (r). Use the x key to shut down both the vision module and dispipc.
  2. Copy your control module from the prior assignment to a new file, control2.c, and edit it to subscribe to data messages from the vision module. In the handler function, print out any information you receive from the vision moduel. Then have your control module turn on the face detector when the robot starts wandering and turn it off when it's done wandering. See if it will recognize any faces while wandering.

    Look at dispipc.c to see how to turn on the face detector ('r' case) and how to subscribe to vision module messages.

  3. Develop a new control module (control3.c) that has the robot wander until it sees a face. Then it should interact with the user in some way (say something, take a picture of them, etc) and then move back into a wander state.

    When your robot has detected a person, it should approach the person detected by the vision module and use its sonar/IR information to stop at a reasonable distance before initiating an interaction.



The writeup for each project should be a brief summary of what you did along with some code examples, terminal output, or screen shots, depending upon the assignment. Please organize the writeup as follows.

  1. Title of the project and your name
  2. An abstract describing what you did in 200 words or less.
  3. A brief description of code you wrote and experiments you ran.
  4. Results.
  5. A brief description of what you learned.

In addition, you will demo your programs during the following lab.


Make your writeup for the project a wiki page in your personal space. If you have questions about making a wiki page, stop by my office or ask in class.

Once you have written up your assignment, give the page the label:


You can give any page a label when you're editing it using the label field at the bottom of the page.

Do not put code on your writeup page or anywhere it can be publicly accessed. To hand in code, attach it to an email and send it to the prof.