Robot Path Planning Challenge for Quantitative Engineering Analysis 1, Spring 2020
- Fit lidar data to find circular target using Random Sampling Concensus
- Plot path to the target using gradient descent to avoid obstacles
- Calculate angular + forward velocity, execute on robot
Also see Bridge of Doom Challenge, another project about parametric path following.
The gauntlet is a simulated environment with obstacles (boxes), walls, and the Barrel of Benevolence (BoB). The challenge is to autonomously guide a Neato robot (simulated due to COVID) through the obstacles to gently tap the BoB. I completed the level 3 mission, where levels 2 & 3 may be completed either through dynamic updating or just one initial LIDAR scan.
Level 1: the locations and dimensions of the obstacles and BoB are all given
Level 2: the BoB location and radius is given but obstacles must be found using LIDAR
Level 3: the radius of the BoB is given, obstacles and BoB must be found using LIDAR
My general approach was to use only one initial data scan. I figured out that running the RANSAC circle detection and recalculating the potential field more often was too computationally expensive and caused the program to seriously slow down, as well as too complex for me to implement in the given timeframe.
I also initially tried taking the polynomial best fit of the path points, turning it into a parametric equation, and running it through my Bridge of Doom parametric path follower code, but it wasn’t working very well and so I decided to go for a simpler approach to speed up the process.
The five main steps to my method of completing the challenge were:
-
Fit: Run RANSAC circle detection for center coordinate, then find obstacles as line segments
-
Path:
-
Drive: Use the change in heading to feed directly into the angular velocity in order to roughly follow the calculated points path (also: record the encoder data as the Neato drives)
-
Calibrate coefficients for the angular velocity, forward velocity, and time increment
-
Results: The neato drove the path in 4.405 seconds according to my program
- Video link: https://youtu.be/aL6x6IM77Cw
- Or find it in the GitHub repository linked above
-
-
Analyze: Reconstruct path from encoder data, compare it to calculated path