Robotic Obstacle Recognizer – Skills Demonstration Project


This is a quick description of a Robotic Obstacle Recognizer. For more detail, follow the appropriate links.

Problem statement:

A problem statement is given by NASA to write an application that will help a robot navigate around a messy lab. Here’s a 360 degree view of the environment. Here’s the detailed problem statement.

Assumptions and Requirements:

To attack this, I started off, writing some assumptions and requirements.


Next, I produced an initial draft of the design. It was basically a class definition with some documented assumptions.

Prototyping and Implementation:

I started writing some preliminary code, to show my C++ chops. My code included use of the vector class in the Standard Template Library and development of a singleton class I call, ObstacleDetector.

Agile Technique:

I wrote up pseudo code to describe the essential steps each of the member functions would take in doing their job, and then I started to code that up. As I learned more during the implementation, I modified the design. This really demonstrated use of the Iterative/Incremental idea in first the Unified Process by Booch, Jacobson and TBD. More recently, that idea has been adopted by those using Agile development. With each iteration, I learned more, developed more working functionality and resolved more problems.

State Behavior:

However, the complexity of all the different scenarios was just something that I kept cycling on. So, I put together what I call the Obstacle Identification State Machine. It helped me to adapt behavior based upon the state of the detector and what had led up to the current state.


Now, I had a much more structured way to think about operation of this detector. It became a matter of defining what happened with each of the transitions as the machine flows from state to state. At this point, I iterated on the code and the state machine. That became a bit intractable until I added a spreadsheet with test cases. With each test case, I documented what happened on each state transition. And then, I used this as a guide for actually performing the tests cases and a recording tool for capturing test results. Once I had done this for my own data, then, I knew I was ready to do this for NASA Data.


“Validation” is the process of verifying that the requirements were written properly and the system performs as intended. In the case of this demonstration project, obstacle recognition data (top/amber) tracked NASA supplied features data points (bottom/blue) with no adjustment to the code or the parameters.

Project Deliverables:

The code, documents and drawings used to realize the solution and verify behavior are accessible on
myGitHub, Robotic Obstacle Recognizer Project.

Contact Information:

Scott Vigil  April 4th, 2020