Students will complete a course project that involves
substantial programming in order to gain working knowledge of the
topics covered in the class. Ideally a good research project identifies
a new research issue, defines a problem, proposes an original
solution, and evaluates the solution. Since you have only limited time,
any of the following (in roughly decreasing order of difficulty) may
satisfy the course requirement:
- New research problem & solution
You define a new, interesting problem and propose a solution. Your
solution does not have to be really good. Defining an interesting
problem is difficult, but also very exciting.
- Existing research problem & new
solution
You look at an existing, interesting problem, and propose a new
solution that is better than existing solutions in some way. Your may
obtain the new solution by improving on an existing solution or
combining several existing solutions. This may be difficult, but can be
accomplished with enough effort.
- Existing solution applied to a new application
You identify a problem in a new application domain and
realize that the problem can be solved with an existing solution
learned in the class. You may have to adapt the existing solution to
fit the new application.
- Implement and evaluate several existing solutions
You look at an existing problem and implement
several known solutions. Compare them to identify the strengths and
weaknesses of each solution, and possibly make suggestions on how to
design better solutions.
Keep in mind that a good project always teaches something
new.
I do not expect
you to write all the code from scratch. You may and should use existing
libraries and applications, as long as they are not the key components
of your project. For example, if you are implementing a new motion
planning algorithm, you may use one of the collision checking libraries
freely available on the web. Some potentially useful libraries
are listed below.
Project Team
You will work in groups of 2 students per project
and are free to form your own project teams.
Deliverables
- Project proposal
You will submit a project proposal so that we agree on the objective of
your project. The proposal should consist of the following parts:
- Define what problem will be solved and explain why the
problem is interesting.
- Provide a short survey of related work.
- Explain
how you intend to approach the problem.
- It
should also contain a list of project milestones on a biweekly basis. This is to help you
think through all the potential difficulties. I will not enforce the
milestones.
The proposal should be roughly 5-8 pages (11pt and single-spaced).
- Presentation and Demo
At the end
of the semester, you will give a presentation to showcase your project.
- Project report
You will also submit a report to complement the demo. Your report
must contain an abstract (100-200 words) to summarize the project. A
good report is clear and concise. It
highlights your results and helps me appreciate your
accomplishment. As a rough guideline, 6-8 pages are sufficient. You can
of course reuse relevant contents from your proposal.
The
evaluation of the project will be based on
the above
three components, with the demo and the project report being the more
important ones. Depending on your interest, we are also considering the
possibility of setting up a "competition" to compare the pursuit or
evasion strategies that you will develop. We will discuss at a later
time whether this will become part of the evaluation criteria.
Due Dates
Please refer to the course
schedule.
- MPK
(C++)
A library that eases development and testing of motion planning
algorithms.
- MSL
(C++)
Another motion planning library
- PQP
(C++)
A general 3D collision detection library. Freely downloadable.
- VCLIP
(C++)
A 3D collision detection library for convex objects.
- CGAL
(C++)
A library of efficient and reliable geometric algorithms. Freely
downloadable.
- LEDA
(C++)
A C++ library of efficient data structures and algorithms. It also
provides simple visualization in 2D and 3D.
Libraries for data structures, algorithms, etc.
Unlike CGAL and LEDA, Boost libraries are usually small and
self-contained.
- Open
Inventor (C++)
High-level object-oriented 3D visualization library. Freely
downloadable.
- Coin3D
(C++, Java)
Another implementation of the Open Inventor API. Freely downloadable.
- Java3D
(Java)
Java 3D visualization library.
- OpenGL,
Glut
(C++)
Powerful, but low-level 3D graphics library.
Last
updated: Tue Jul 27 18:03:12 MPST 2004