Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added docs page #86

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,7 @@

# Matlab
*.m~

docs/_build
docs/doxyoutput
docs/api
2,455 changes: 2,455 additions & 0 deletions docs/Doxyfile

Large diffs are not rendered by default.

20 changes: 20 additions & 0 deletions docs/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SPHINXPROJ = project
SOURCEDIR = .
BUILDDIR = _build

# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
46 changes: 46 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import os

name = 'mav_trajectory_generation'

on_rtd = os.environ.get('READTHEDOCS', None) == 'True'

if not on_rtd: # only import and set the theme if we're building docs locally
import sphinx_rtd_theme
html_theme = 'sphinx_rtd_theme'
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]

source_parsers = {
'.md': 'recommonmark.parser.CommonMarkParser',
}

extensions = [
'breathe', 'exhale', 'sphinx.ext.autosectionlabel', 'recommonmark'
]

project = name
master_doc = 'index'

# Setup the breathe extension
breathe_projects = {"project": "./doxyoutput/xml"}
breathe_default_project = "project"

# Setup the exhale extension
exhale_args = {
"verboseBuild": False,
"containmentFolder": "./api",
"rootFileName": "library_root.rst",
"rootFileTitle": "Library API",
"doxygenStripFromPath": "..",
"createTreeView": True,
"exhaleExecutesDoxygen": True,
"exhaleUseDoxyfile": True,
"pageLevelConfigMeta": ":github_url: https://github.com/ethz-asl/" + name
}

source_suffix = ['.rst', '.md']

# Tell sphinx what the primary language being documented is.
primary_domain = 'cpp'

# Tell sphinx what the pygments highlight language should be.
highlight_language = 'cpp'
53 changes: 53 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
=========================
mav_trajectory_generation
=========================

This repository contains tools for polynomial trajectory generation and optimization based on methods described in [1].
These techniques are especially suitable for rotary-wing micro aerial vehicles (MAVs).
This README provides a brief overview of our trajectory generation utilities with some examples.

**Authors**: Markus Achtelik, Michael Burri, Helen Oleynikova, Rik Bähnemann, Marija Popović
**Maintainer**: Rik Bähnemann, [email protected]
**Affiliation**: Autonomous Systems Lab, ETH Zurich

.. toctree::
:maxdepth: 3
:caption: Table of Contents
:glob:

pages/*

api/library_root

Bibliography
============

This implementation is largely based on the work of C. Richter *et al*, who should be cited if this is used in a scientific publication (or the preceding conference papers):
[1] C. Richter, A. Bry, and N. Roy, “**Polynomial trajectory planning for aggressive quadrotor flight in dense indoor environments,**” in *International Journal of Robotics Research*, Springer, 2016.

.. code-block:: latex

@incollection{richter2016polynomial,
title={Polynomial trajectory planning for aggressive quadrotor flight in dense indoor environments},
author={Richter, Charles and Bry, Adam and Roy, Nicholas},
booktitle={Robotics Research},
pages={649--666},
year={2016},
publisher={Springer}
}

Furthermore, the nonlinear optimization features our own extensions, described in:

Michael Burri, Helen Oleynikova, Markus Achtelik, and Roland Siegwart, “**Real-Time Visual-Inertial Mapping, Re-localization and Planning Onboard MAVs in Previously Unknown Environments**”. In *IEEE Int. Conf. on Intelligent Robots and Systems* (IROS), September 2015.

.. code-block:: latex

@inproceedings{burri2015real-time,
author={Burri, Michael and Oleynikova, Helen and and Achtelik, Markus W. and Siegwart, Roland},
booktitle={Intelligent Robots and Systems (IROS 2015), 2015 IEEE/RSJ International Conference on},
title={Real-Time Visual-Inertial Mapping, Re-localization and Planning Onboard MAVs in Unknown Environments},
year={2015},
month={Sept}
}


65 changes: 65 additions & 0 deletions docs/pages/Time-Allocation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Time Allocation

Optimization for:
* Time only ([Burri](#burri-et-al), [Richter](#richter-et-al), [Mellinger](#melling-and-kumar) and [Segment violation](#segment-violation))
* Time and free constraints ([Burri](#burri-et-al) and [Richter](#richter-et-al))

Methods implemented:
1. C. Richter, A. Bry, and N. Roy, “**Polynomial trajectory planning for aggressive quadrotor flight in dense indoor environments,**” in *International Journal of Robotics Research*, Springer, 2016.
2. M. Burri, H. Oleynikova, M. Achtelik, and R. Siegwart, “**Real-Time Visual-Inertial Mapping, Re-localization and Planning Onboard MAVs in Previously Unknown Environments**”. In *IEEE Int. Conf. on Intelligent Robots and Systems* (IROS), September 2015.
3. D. Mellinger and V. Kumar, "**Minimum Snap Trajectory Generation and Control for Quadrotors**"
4. Segment violation


### Benchmark
* trajectory time
* computation time
* relative violation of velocity
* maximum distance between trajectory and straight line
* area between trajectory and straight line

Additionally:
* comparison of convergence time and quality of default and custom initial step
* comparison magic fabian vs. trapezoidal for initial time segments


### [Richter et al.](#richter-et-al)
Paper: **Polynomial trajectory planning for aggressive quadrotor flight in dense indoor environments**
Published in: *International Journal of Robotics Research*, Springer
Year: 2016

Usable for optimization of:
* Time only (`NonlinearOptimizationParameters::kRichterTime`):
* Time and free derivatives (`NonlinearOptimizationParameters::kRichterTimeAndConstraints`):
<img src="https://user-images.githubusercontent.com/17544220/38020829-8bba3e8e-327b-11e8-9b36-5ca2cb3fb609.png" height="100" /> <br />


### [Burri et al.](#burri-et-al)
Paper: **Real-Time Visual-Inertial Mapping, Re-localization and Planning Onboard MAVs in Previously Unknown Environments**
Published in: *IEEE Int. Conf. on Intelligent Robots and Systems* (IROS)
Year: 2015

Usable for optimization of:
* Time only (`NonlinearOptimizationParameters::kSquaredTime`)
* Time and free derivatives (`NonlinearOptimizationParameters::kSquaredTimeAndConstraints`):
<img src="https://user-images.githubusercontent.com/17544220/38019910-2e6f41c2-3279-11e8-9602-1e861b05b520.png" height="100" /> <br />
<img src="https://user-images.githubusercontent.com/17544220/38019908-2e30f9bc-3279-11e8-8fdc-5f3d997da955.png" height="50" /> <br />
<img src="https://user-images.githubusercontent.com/17544220/38019909-2e538e3c-3279-11e8-9dee-fe08a881743c.png" height="80" /> <br />


### [Mellinger and Kumar](#mellinger-and-kumar)
Paper: **Minimum Snap Trajectory Generation and Control for Quadrotors**
Published in: *IEEE International Conference on Robotics and Automation* (ICRA)
Year: 2011

Usable for optimization of:
* Time only (`NonlinearOptimizationParameters::kMellingerOuterLoop`):
<img src="https://user-images.githubusercontent.com/17544220/38021405-0544f040-327d-11e8-9d92-86d5c0c31f70.png" height="30" /> <br />
<img src="https://user-images.githubusercontent.com/17544220/38021406-0560c428-327d-11e8-87c6-8d0b1ccf1886.png" height="60" /> <br />
<img src="https://user-images.githubusercontent.com/17544220/38021407-0583bf46-327d-11e8-8ac5-d784736da1ad.png" height="100" /> <br />


### [Segment violation](#segment-violation)

Usable for optimization of:
* Time only:
1 change: 1 addition & 0 deletions docs/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
exhale
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@

namespace mav_trajectory_generation {

// Container holding the properties of an extremum (time, value,
// segment where it occurred).
/// Container holding the properties of an extremum (time, value,
/// segment where it occurred).
struct Extremum {
public:
Extremum() : time(0.0), value(0.0), segment_idx(0) {}
Expand All @@ -38,9 +38,9 @@ struct Extremum {
bool operator>(const Extremum& rhs) const { return value > rhs.value; }

double
time; // Time where the extremum occurs, relative to the segment start.
double value; // Value of the extremum at time.
int segment_idx; // Index of the segment where the extremum occurs.
time; ///< Time where the extremum occurs, relative to the segment start.
double value; ///< Value of the extremum at time.
int segment_idx; ///< Index of the segment where the extremum occurs.
};

inline std::ostream& operator<<(std::ostream& stream, const Extremum& e) {
Expand Down
Loading