5 releases

0.0.4 Jul 14, 2019
0.0.3 May 3, 2019
0.0.2 Apr 19, 2019
0.0.1 Apr 18, 2019
0.0.0 Apr 18, 2019

#113 in Machine learning

31 downloads per month

MIT license

21K SLoC

C 15K SLoC // 0.2% comments Rust 3.5K SLoC // 0.1% comments Objective-C 2.5K SLoC Shell 32 SLoC // 0.6% comments


Sample Based Motion Planning.

This project is intended as educational replication of several general ideas:

  • Sparseness
  • Motion Primitives
  • Importance Sampling

A sub-goal of this project is to integrate and leverage benefits of several of these ideas in a hybrid solution.

Inputs to program

  • system dynamics and various constraints are supplied as functions
  • environment obstacles

What's in it:

Writeups, Benchmarks, etc..


Running Planner

  • prerequisites
  • build and run in release mode
    • Either:
      • have custom maps already generated (see Generating Custom Maps section)
      • cargo run --release --bin planner -- -p <problem_instance_name> (other program arguments...)
      • see prob_instances.rs for predefined problem domain list
    • Or:
      • cargo run --release --bin planner -- -o <file_obstacle> (other program arguments...)
      • sample obstacle file: obstacles/obs3.txt (randomly generated boxes)
    • Or:
      • have custom maps already generated (see Generating Custom Maps section)
      • cargo run --release --bin planner -- -e <.ele file path> -n <.node file path> (other program arguments...)
        • eg: cargo run --release --bin planner -- -e maps_custom/dragon_age/poly/ost100d.1.ele -n maps_custom/dragon_age/poly/ost100d.1.node -p orz000d -i 1000000 -b 300 -m dubins
      • would need to modify dynamics model file to change goal states, etc.
      • see custom maps section for .ele and .node details
  • optional arguments:
    • -w: show witness node and witness representative pairs
      • drawn as a line(red) with end points (purple: witness), (blue: witness representative)
    • -i <N>: max iterations
    • -m <model>: dynamical model selection (see src/dynamics_* files)
      • variants: dubins, airplane (defaults to dubins)
    • -b <N>: batch N iterations in between rendering calls
    • -h: help
  • optional compile-time features:
    • usage:
      • cargo run --release --bin planner --features nn_naive,disable_pruning,(other features...) -- -p <problem_instance_name> (other program arguments...)
    • variants: see [features] section of Cargo.toml for the list
  • sample program:
    • cargo run --release --bin planner --features nn_sample_log,state_propagate_sample,path_optimize -- -p obs3 -m dubins -i 1000000 -b 200

Generating Random Obstacles (a couple obstacles exists in obstacles/ folder)

  • build and run in release mode with: cargo run --release --bin gen_obs -- -f <output_file_path>
  • required arguments:
    • -f <output_file_path> (eg: cargo run --release --bin gen_obs -- -f obstacles/obs99.txt)
  • optional arguments:
    • -n <N>: number of obstacles to be generated (default: 30)
  • optional features:
    • gen_obs_3d: generate boxes for in 3D domain (defaults to planar domain)

Using Random Obstacles

  • cargo run --release --bin planner -- -o <file_obstacle>
    • -o <file_obstacle>: obstacle file path (eg: -o obstacles/obs2.txt)

Generating Custom Maps (need to run this once in order to use custom maps):

  • a set of maps that is mainly used for benchmarking purposes obtainable from https://www.movingai.com/benchmarks/grids.html can be used, these are located in the /maps_custom folder
  • character movable space within a map are triangulated for use in the planner as the configuration free space
  • triangulation is done using the awesome Triangle software from http://www.cs.cmu.edu/~quake/triangle.html
  • the maps are converted into a format for Triangle to process and output is loadable into our planner and further extruded as triangular prisms for use with a general purpose 3D obstacle detector, these intermediate files are stored at /maps_custom//poly
  • some maps might have bad triangulation not useable for the planner (I aimed for working with Dragon Age maps)
  • generating intermediate files and map assets for our planner
    • 1st, compile Triangle
      • cd Triangle_v1_6
      • make
    • 2nd, run ./script_map2poly.sh (generates formatted file for Triangle, may take a while)
    • 3rd, run ./script_triangulate_poly.sh (outputs 2D triangulation result as .ele and .node files)
    • all set for use...


Simple Environments

drawing drawing drawing drawing drawing

Hard Game Maps

drawing drawing drawing drawing drawing


~383K SLoC