Giter VIP home page Giter VIP logo

rrt's Introduction

RRT CircleCI

C++ RRT (Rapidly-exploring Random Tree) implementation

Interactive RRT Viewer

This project contains an interactive RRT viewer. The source and destination points can be dragged with a mouse. Here's a screenshot:

Interactive RRT

Dependencies

The following are required in order to build this project:

  • cmake >= 3.2.0
  • Qt 5.5+
    • (The following dependencies are only needed for the rrt viewer)
    • QtDeclarative 5
    • QtQuick2.5+
    • QtQuick Controls
    • QtQuick Dialogs
  • Eigen
  • ninja
  • ccache
  • libflann-dev
  • libboost-all-dev

To install all needed dependencies on Ubuntu 16.04, run:

sudo apt-get -y install qt5-default libeigen3-dev g++ ninja-build cmake clang-format-3.6 ccache libflann-dev qtdeclarative5-dev qtdeclarative5-qtquick2-plugin qml-module-qtquick-{controls,dialogs} libboost-all-dev

Building

Run make in the main directory to build the rrt-viewer program and the test-runner program, which are placed in the build/ folder.

git submodule update --init
make
build/rrt-viewer

Resources

Here are some good resources for learning more about RRTs:

License

This project is licensed under the Apache License v2.0. See the LICENSE file for more information.

rrt's People

Contributors

abysswatcher avatar ashaw596 avatar barulicm avatar chachmu avatar jgkamat avatar joshhting avatar jpfeltracco avatar justbuchanan avatar kevinatorchen avatar kylestach avatar oswinso avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rrt's Issues

error: do not know how to extract

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
cmake version 3.5.2
ninja version 0.1.3
The Compile message is...

mkdir -p build
cd build && cmake .. -DCMAKE_INSTALL_PREFIX:PATH="" -GNinja && ninja
-- Found Qt5: /usr/lib/x86_64-linux-gnu/cmake/Qt5Widgets
CMake Error at /usr/share/cmake-3.5/Modules/ExternalProject.cmake:964 (message):
error: do not know how to extract
'/home/travis-byun/WorkSpace_vim/rrt/rrt-master/third_party/googletest/googletest'
-- known types are .7z, .tar, .tar.bz2, .tar.gz, .tar.xz, .tbz2, .tgz, .txz
and .zip
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/ExternalProject.cmake:1909 (_ep_write_extractfile_script)
/usr/share/cmake-3.5/Modules/ExternalProject.cmake:2459 (_ep_add_download_command)
cmake/SetupGTest.cmake:5 (ExternalProject_Add)
CMakeLists.txt:96 (include)

-- Configuring incomplete, errors occurred!
See also "/home/travis-byun/WorkSpace_vim/rrt/rrt-master/build/CMakeFiles/CMakeOutput.log".
makefile:2: recipe for target 'all' failed
make: *** [all] Error 1

Potential Error in Grid Square Location Computation

In the gridSquareForLocation function of class ObstacleGrid here:
original code

Shouldn't the result be the following?

    return Vector2i(loc.x() / discretizedWidth(),
                    loc.y() / discretizedHeight());

As I understand the code, width and height refers to the size of the whole space. discretizedWidth and discretizedHeight refers to the size of the grids. Correct me if I am wrong. Thank you!

Add a min iterations parameter to RRT::Tree

Right now it returns the first path it finds, but sometimes it's best to continue running a bit longer to find a better path. This would require modifying RRT::Tree.run().

RRT Optimization -- Straight Path Planning

Because there tends to be very few obstacles during a match, we could benefit by implementing an algorithm that is not necessarily robust with dealing with obstacles but rather very efficient when it can find a solution. One of these algorithms is Straight Path Planning. It begins by drawing a straight line between the robot and the goal. While there are obstacles within that path, it will tweak the path a bit until it can avoid all obstacles. If Straight Path Planning is not able to find a solution, we will fall back to RRT.

Can you explain what the theory you adopted?

For academic approach, Can you explain more details about what the theory you adopted in your code?

like:
Path Generation: Batch informed trees(BIT*).
Path smoothing: Single Polar Polynomial(SPP) curve or Clothoid curve.
some others:

Thank for your help.

Bias tree growth towards goal

Right now tree growth is totally random. A much better implementation would be to extend towards a random point with probability p and extend towards the goal with probability 1-p.

Fix docker caching issues

As far as I can tell, things are setup correctly and I have the docker auth variables set in the circleci environment. The build logs show that the image was pushed to the repo, but the docker hub page shows otherwise.

See this build and the docker hub page.

Goal Bias should be implemented by modifying random pool instead of going directly towards goal

Right now goal bias is just a percentage chance that we go directly towards the goal, it should be modified to be changing the probability function itself, so that we don't just go towards the goal when we do choose to do so (but we have a higher probability of going some direction closer to the goal). This will help us go around obstacles better while still having a high goal bias.

Suggested by @barulicm

Update README file

The screenshot on the rrt page is outdated. We now have bezier curves and an improved interface and stuff.

RRT Documentation + Doc Generation

Right now the RRT has much less documentation than I'd like (the RRT is one of the most useful parts of our codebase, since it's modularized). We need to try to make thorough docs for the rrt.

Once we have most of the way done to this, I'll add documentation generation so we can have a RRT docs site we can link to on our README, just like robocup-software and robocup-firmware.

This is a good beginner issue, especially for new members interested in path planning, if you were ok with just reading some code.

See #55 and #48.

  • Document why we use Dequeue instead of a vector.
  • Document hotkeys, e.x., those listed in #58

#36 is a subissue of this issue.

Compiling on Windows

I'm interested in using this code to run my robot, which uses windows, unfortunately :( . How easy would this be, and do you have any suggestions? Are there any particular C++ version dependencies?

Error: Do not know how to extract

I get this error while I try to 'make'

CMake Error at /usr/share/cmake-2.8/Modules/ExternalProject.cmake:609 (message):
error: do not know how to extract
'/home/boon/Packages/RoboJackets_RRT/rrt/third_party/googletest/googletest'
-- known types are .bz2, .tar, .tar.gz, .tgz and .zip
Call Stack (most recent call first):
/usr/share/cmake-2.8/Modules/ExternalProject.cmake:1420 (_ep_write_extractfile_script)
/usr/share/cmake-2.8/Modules/ExternalProject.cmake:1805 (_ep_add_download_command)
cmake/SetupGTest.cmake:4 (ExternalProject_Add)
CMakeLists.txt:75 (include)
-- Configuring incomplete, errors occurred!
See also "/home/boon/Packages/RoboJackets_RRT/rrt/build/CMakeFiles/CMakeOutput.log".
make: *** [all] Error 1

Add field for step size

Step size is something we need to tune a bit to our application, so it would be nice to have an option for it in the gui.

Add bezier interpolation for waypoints

The refined path right now is a minimil set of waypoints build from the actual RRT path. We remove any waypoints that are unnecessary (most of them) for the path to be collision-free. This results in a decent path, but it's still a series of line segments, which is obviously not a good motion path. The next step is to apply a curve overtop of this so that is smooth and doesn't have any corners. There are a few ways to do this although I haven't figured out the best yet.

One neat solution I saw was to use some heuristics to generate a first attempt at a bezier interpolation, then to optimize the bezier parameters to get closer to the fastest-travellable path.

Here's a good paper I found on this - it's a long read, but skimming it gave some good info: http://www2.informatik.uni-freiburg.de/~lau/students/Sprunk2008.pdf.

Implement Extended RRT

We should implement ERRTs as described in this CMU Paper. The main difference is the use of the "waypoint cache". After a successful path plan, we save a fixed-length subset of the waypoints in a cache. The next path-planning iteration grows a new tree, but it is biased towards the previously-saved waypoints.

Compilation Error

Hi,

I am running Ubuntu 14.0.4 and as I run make in the main folder, I get the following error:

CMake Error at CMakeLists.txt:71 (get_filename_component): get_filename_component unknown component DIRECTORY

Kindly guide me what could be the problem here.

Thanks,
Umer

Fail when start point is inside an obstacle

This is useful for robot planning if we start out in a virtual obstacle where we're not supposed to be. The current implementation will fail to find us a path out of the obstacle.

Add circular obstacles

This will make it easier for visualizing the RRT's use in RoboCup. Their size vs the plane size should be the same proportion as robocup robots to the field size.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.