Skip to content

Quantitative Engineering Analysis 1 | Spring 2020 | Path Planning using Gradient Descent

Notifications You must be signed in to change notification settings

liloheinrich/Gauntlet

Repository files navigation

Gauntlet

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.

Introduction

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

Approach

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:

  1. Scan: Collect initial LIDAR scan data img

  2. Fit: Run RANSAC circle detection for center coordinate, then find obstacles as line segmentsimg

  3. Path:

    1. Create potential field with sources across line segments and sinks along BoB circleimg

    2. Run gradient descent to calculate path to local maximumimg

  4. 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)

    1. Calibrate coefficients for the angular velocity, forward velocity, and time increment

    2. Results: The neato drove the path in 4.405 seconds according to my program

      1. Video link: https://youtu.be/aL6x6IM77Cw
      2. Or find it in the GitHub repository linked above
  5. Analyze: Reconstruct path from encoder data, compare it to calculated path img

Releases

No releases published

Packages

No packages published

Languages