As we begin our final project, we’d like to give readers some insight into our goal for our final project, as well as our starting point. Our team developed the MVP for this project during the Computer Vision project which we just completed. Now, in our final project, our goal is to build a system for autonomously parking a vehicle. Since our Computational Robotics class is centered around robotic vacuum cleaners called Neatos, the Neato will serve as our autonomous vehicle in this project. The parking system we envision works as follows: we press go, the Neato identifies an empty parking spot which it has permission to park in, and then it navigates into that spot and parks itself.

1) Identifying an empty parking spot

This first step corresponds with the bulk of the work which we completed during our Computer Vision project.

Before we can determine whether a parking spot is empty or not, we must first identify that a space is, indeed, a parking spot. We do this using a Hough Line Transform algorithm. The image below shows the results of our computations. We applied an HSV filter to create a binary image that would reveal parking spot delineators. The image on the left corresponds with the results from our Hough Line Transform. Using the lines in this image, we determine the coordinates of the parking spot in 3D space relative to the Neato using the pinhole camera model.

image1

Before the Neato parks in a spot, it must first determine whether or not that spot is empty. The computations for determining whether or not the spot is empty are done via a Canny edge detection algorithm. If the parking spot is empty, the Canny edge detection algorithm detects fewer than 150 edges in the image. If there is another Neato currently occupying the parking spot, then Canny edge detection detects more than 300 lines.

image1

Edges detected via Canny Edge Detection in occupied vs. unoccupied parking spots

You may have noted above that we aren’t just looking for empty parking spots for the Neato to park in, but empty parking spots which the Neato has permission to park in. This extension will be a new feature that we develop over the course of this final project. Building on the Sign Follower project we completed earlier this semester, we plan on integrating sign detection behavior with our parking system. This will mean that a Neato obeys parking restrictions such as handicapped parking, no parking during restricted hours, and so on.

2. Parking

This is the part of our system that needs more work. In theory, Neatos have a range of motion that should make the parking problem trivial - they can rotate in place, and have the ability to move forward, backwards, and from side to side. In order to mimic the behavior of a vehicle, though, we limit the Neato’s motion to those which are available to a car. In the Computer Vision project, we progressed far enough to successfully park a vehicle. The following diagram conveys the FSM which we developed for aligning and then parking the Neato.

image1

As you can see in this video though, the path which the Neato takes to align and then park involves a lot of guessing, checking, and then correcting. Our intention in this final project is to develop a more sophisticated path planning algorithm that will allow the Neato to park more efficiently and accurately.

In addition to optimizing our path planning, we intend to open up the possibility for more parking modes during this phase of the project. We plan on allowing for parallel parking and backwards parking in addition to the already supported forward parking mode.

We’re looking forward to sharing progress updates on this blog over the course of this project. Thanks for reading!