<commit_before>======================
Pronto State Estimator
======================

.. contents:: Table of Contents

Introduction
============

Pronto is an efficient EKF state estimator for inertial and sensory
motion estimation.

Pronto has been used to localize a Fixed-wing micro aerial vehicles
and quadrotors aggressively flying indoors and outdoors. It has
also been used to provide a 333Hz motion estimate for the Boston Dynamics
Atlas humanoid. 

Pronto has been used with a variety of inputs 
from sensors such as IMUs (Microstrain and Kearfott), laser ranger finders, 
cameras and joint kinematics.

As well as the source code we also provide some data samples
to demonstrate the algorithm working on a fixed wing MAV and a
the Atlas robot walking.

.. image:: http://img.youtube.com/vi/V_DxB76MkE4/0.jpg
   :target: https://www.youtube.com/watch?v=V_DxB76MkE4

`Pronto youtube video <https://www.youtube.com/watch?v=V_DxB76MkE4>`_


Software Overview
-----------------
The algorithms are built primarily in C/C++. A number of the local dependencies
were developed for other robotics projects at MIT.

The software repository consists of two modules:

* externals: required modules such as Eigen, octomap and visualization tools
* pronto: the core estimator library (mav) and an adaptation to for humanoids (motion_estimate)

Building the Code
=================
These compile instructions were tested on a fresh Ubuntu 14.04 install, but is likely to work on earlier versions and MacOS.

Requirements:
-------------

Install these common system dependencies:

::

    apt-get install git build-essential libglib2.0-dev openjdk-6-jdk python-dev cmake gtk-doc-tools libgtkmm-2.4-dev  freeglut3-dev libjpeg-dev libtinyxml-dev libboost-thread-dev libgtk2.0-dev python-gtk2 mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev


Compiling
---------

Check out the source code using git:

::

    cd pronto-distro
    git submodule update --init --recursive

Then start compiling:

::

    make

The compile time is about 4 mins. 

Running Test Examples
=====================

Its not necessary but, we would suggest adding the binary path to your system path:

::

  export PATH=<path-to-your-code>/pronto-distro/build/bin:$PATH

To process a

::

  se-fusion -U model_LN_RN.urdf -P drc_robot_02_mit.cfg
  lcm-logplayer-gui <logfile>
  pronto_viewer
  bot-spy
  octomap-server octomap.bt

All the state estimation is done in se-fusion. It listens to messages published 
from the logplayer. pronto-viewer is a GTK GUI showing the sensor data and 
the position of the robot


blocks3-lcmlog-2014-04-21-18-40-robot-part
longstp-lcmlog-2014-04-21-16-12-robot-part
typical-lcmlog-2014-04-21-15-13-robot-part


se-fusion -U model_LN_RN.urdf -P drc_robot_02_mit.cfg -L ~/logs/pronto_release/blocks3-lcmlog-2014-04-21-18-40-robot-part -pr 0
se-fusion -U model_LN_RN.urdf -P drc_robot_02_mit.cfg -L ~/logs/pronto_release/longstp-lcmlog-2014-04-21-16-12-robot-part -pr 0


Documentation
=============

Technical details about the estimator are to be completed. Please read the attached publications for details.


Humanoid Locomotion
-------------------

Using the estimator with the Atlas Stepping Behaviour
-----------------------------------------------------

**Performance:** With inertial and kinematic input (i.e. no LIDAR input) the drift rate of the 
estimator is **2cm per 10 steps travelled**. We estimate this to be 10 times better 
than the estimator provided by BDI. With the closed-loop LIDAR module, drift is removed entirely.

More specifically, the estimator can walk the robot to the top of a tower of 
cinder blocks, under BDI control - without stopping --- with the only input being
the placement of footsteps. **Recently this was executed 8 times consecutively in a public demo.**

As the estimator was primarily developed for use on Atlas, performance has been heavily tested and 
is very robust. The easiest use case is with BDI retaining lower body control. 
To get started we suggest disabling the LIDAR module, for simplicity.

We estimate the position of the robot with the Pronto position estimator while the BDI estimate
is still used by their system. All operation of the robot is made using the Pronto estimator.
<commit_msg>clean up<commit_after>======================
Pronto State Estimator
======================

.. contents:: Table of Contents

Introduction
============

Pronto is an efficient EKF state estimator for inertial and sensory
motion estimation.

Pronto has been used to localize a Fixed-wing micro aerial vehicles
and quadrotors aggressively flying indoors and outdoors. It has
also been used to provide a 333Hz motion estimate for the Boston Dynamics
Atlas humanoid. 

Pronto has been used with a variety of inputs 
from sensors such as IMUs (Microstrain and Kearfott), laser ranger finders, 
cameras and joint kinematics.

As well as the source code we also provide some data samples
to demonstrate the algorithm working on a fixed wing MAV and a
the Atlas robot walking.

.. image:: http://img.youtube.com/vi/V_DxB76MkE4/0.jpg
   :target: https://www.youtube.com/watch?v=V_DxB76MkE4

`Pronto youtube video <https://www.youtube.com/watch?v=V_DxB76MkE4>`_


Software Overview
-----------------
The algorithms are built primarily in C/C++. A number of the local dependencies
were developed for other robotics projects at MIT.

The software repository consists of two modules:

* externals: required modules such as Eigen, octomap and visualization tools
* pronto: the core estimator library (mav) and an adaptation to for humanoids (motion_estimate)

Building the Code
=================
These compile instructions were tested on a fresh Ubuntu 14.04 install, but is likely to work on earlier versions and MacOS.

Requirements:
-------------

Install these common system dependencies:

::

    apt-get install git build-essential libglib2.0-dev openjdk-6-jdk python-dev cmake gtk-doc-tools libgtkmm-2.4-dev  freeglut3-dev libjpeg-dev libtinyxml-dev libboost-thread-dev libgtk2.0-dev python-gtk2 mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev


Compiling
---------

Check out the source code using git:

::

    cd pronto-distro
    git submodule update --init --recursive

Then start compiling:

::

    make

The compile time is about 4 mins. 

Running Test Examples
=====================

.. image:: http://img.youtube.com/vi/OWrzUIH3kUA/0.jpg
   :target: https://www.youtube.com/watch?v=OWrzUIH3kUA

`Running pronto <https://www.youtube.com/watch?v=OWrzUIH3kUA>`_

Some test logs and maps can be downloaded from:

::

  http://people.csail.mit.edu/mfallon/pronto_logs/

To process a log run these processes:

::

  se-fusion -U model_LN_RN.urdf -P drc_robot_02_mit.cfg
  pronto_viewer
  lcm-logplayer-gui typical-lcmlog-2014-04-21-15-13-robot-part


* All the state estimation is done in se-fusion. It listens to messages published 
  from the logplayer and produces POSE_BODY. 
* pronto-viewer is a GUI showing the sensor data and 
  the position of the robot.
* Make sure that POSE_BODY and STATE_ESTIMATOR_STATE are disabled 
  (they were the position generated during the run)
* bot-spy is a tool for inspecting the messages.
* You can view the octomap that's being localized using octomap-server:

::

  octomap-server octomap.bt

There are two other logs that work in the same way:
* longstp-lcmlog-2014-04-21-16-12-robot-part
* blocks3-lcmlog-2014-04-21-18-40-robot-part **Need a different map for this log**

Options
-------

All options are read from the cfg file located in pronto-distro-config. 
* By default, this demos initalizes using vicon data in the log via "init_sensors"
* The Gaussian Particle Filter is disabled by removing it from "active_sensors".
* Its not necessary but, we would suggest adding the binary path to your system path:

::

  export PATH=<path-to-your-code>/pronto-distro/build/bin:$PATH


Documentation
=============

Technical details about the estimator are to be completed. Please read the attached publications for details
or get in touch for support.

Humanoid Locomotion
-------------------

Using the estimator with the Atlas Stepping Behaviour
-----------------------------------------------------

**Performance:** With inertial and kinematic input (i.e. no LIDAR input) the drift rate of the 
estimator is **2cm per 10 steps travelled**. We estimate this to be 10 times better 
than the estimator provided by BDI. With the closed-loop LIDAR module, drift is removed entirely.

More specifically, the estimator can walk the robot to the top of a tower of 
cinder blocks, under BDI control - without stopping --- with the only input being
the placement of footsteps. **Recently this was executed 8 times consecutively in a public demo.**

As the estimator was primarily developed for use on Atlas, performance has been heavily tested and 
is very robust. The easiest use case is with BDI retaining lower body control. 
To get started we suggest disabling the LIDAR module, for simplicity.

We estimate the position of the robot with the Pronto position estimator while the BDI estimate
is still used by their system. All operation of the robot is made using the Pronto estimator.

{'fraction_non_alphanumeric': 0.10659400544959129, 'fraction_numerical': 0.01994550408719346, 'mean_word_length': 3.7056410256410257, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 6, 'lorem ipsum': 0, 'www.': 6, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '440252', 'n_tokens_mistral': 2901, 'n_tokens_neox': 2588, 'n_words': 1136}