Metadata-Version: 2.1
Name: rigid-body-motion
Version: 0.9.1
Summary: Python utilities for estimating and transforming rigid body motion.
Home-page: https://github.com/phausamann/rigid-body-motion
Author: Peter Hausamann
Author-email: peter.hausamann@tum.de
License: MIT license
Keywords: rigid_body_motion
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Description-Content-Type: text/x-rst
License-File: LICENSE
License-File: AUTHORS.rst

.. image:: https://github.com/phausamann/rigid-body-motion/actions/workflows/build.yml/badge.svg
        :target: https://github.com/phausamann/rigid-body-motion/actions/workflows/build.yml

.. image:: https://readthedocs.org/projects/rigid-body-motion/badge/?version=latest
        :target: https://rigid-body-motion.readthedocs.io/en/latest/?badge=latest
        :alt: Documentation Status

.. image:: https://img.shields.io/pypi/v/rigid-body-motion.svg
        :target: https://pypi.python.org/pypi/rigid-body-motion

.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
        :target: https://github.com/psf/black


=================
rigid-body-motion
=================

Python utilities for estimating and transforming rigid body motion.


Documentation: https://rigid-body-motion.readthedocs.io


Overview
--------

This package provides a high-level interface for transforming arrays
describing motion of rigid bodies between different coordinate systems and
reference frames. The core of the reference frame handling is a fast
re-implementation of ROS's ``tf2`` library using ``numpy`` and
``numpy-quaternion``. The package also provides first-class support for
xarray_ data types.

.. _xarray: https://xarray.pydata.org

Installation
------------

rigid-body-motion can be installed via ``pip``:

.. code-block:: console

    $ pip install rigid-body-motion

or via ``conda``:

.. code-block:: console

    $ conda install -c phausamann -c conda-forge rigid-body-motion

Highlights
----------

rigid-body-motion makes it possible to:

* Construct trees of static and moving reference frames
* Lookup transforms and velocities across the tree
* Seamlessly transform positions, orientations and velocities across the tree
* Estimate transforms from motion data
* Transform data into different coordinate representations
* Import data from common motion tracking systems
* Visualize reference frames and motion data with matplotlib or RViz
* ... and more!

Credits
-------

This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage


=======
History
=======

0.9.1 (January 13th, 2022)
--------------------------

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Fixed package installation through pip (version 0.9.0 is no longer available).


0.9.0 (December 29th, 2021)
---------------------------

Breaking changes
~~~~~~~~~~~~~~~~

* Dropped support for Python 3.6.

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Fixed issue with matplotlib versions >= 3.5.


0.8.0 (May 27th, 2021)
----------------------

New features
~~~~~~~~~~~~

* New ``ros.init_node`` method to initialize a ROS node and optionally start
  a ROS master.


Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~
* All ROS dependencies are now lazily imported.


0.7.0 (May 19th, 2021)
----------------------

New features
~~~~~~~~~~~~

* New ``from_euler_angles`` utility method.


Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Importing ROS interface classes will not fail silently anymore and instead
  show the traceback of the import error.


0.6.0 (May 17th, 2021)
----------------------

Breaking changes
~~~~~~~~~~~~~~~~

* Example data is now fetched via the ``pooch`` library and no longer a part
  of the package itself.

New features
~~~~~~~~~~~~

* New ``io`` module for import/export methods.
* New ``ros.RosbagWriter`` class for writing rosbag files.


0.5.0 (March 16th, 2021)
------------------------

Breaking changes
~~~~~~~~~~~~~~~~

* Top-level reference frame transform and lookup methods now all accept a
  ``return_timestamps`` argument that is ``False`` by default. Previously,
  methods would return timestamps only if the result of the transformation was
  timestamped. This does not affect the xarray interface.
* ``lookup_transform`` now returns the correct transformation from the base
  frame to the target frame (instead of the other way around).
* ``ReferenceFrame.get_transformation`` is deprecated and replaced by
  ``ReferenceFrame.lookup_transform``.

New features
~~~~~~~~~~~~

* New ``plot`` module with plotting methods for static reference frames and
  arrays of points, quaternions and vectors.
* New ``lookup_pose`` method that calculates the pose of a frame wrt another.

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Fixed ``"reference_frame"`` attribute incorrectly set by
  ``transform_vectors``.


0.4.1 (February 18th, 2021)
---------------------------

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Fixed ``transform_coordinates`` failing when spatial dimension is first
  axis of array.
* Fixed ``transform_linear_velocity`` and ``transform_angular_velocity``
  failing when reference frame or moving frame is transformed across only
  static transforms.
* Added ``allow_static`` parameter to ``lookup_twist``,
  ``lookup_angular_velocity`` and ``lookup_linear_velocity`` to return zero
  velocity and no timestamps across only static transforms.


0.4.0 (February 11th, 2021)
---------------------------

New features
~~~~~~~~~~~~

* New ``lookup_linear_velocity`` and ``lookup_angular_velocity`` top-level
  methods.
* New ``render_tree`` top-level method for printing out a graphical
  representation of a reference frame tree.
* ``lookup_twist`` now accepts a ``mode`` parameter to specify the mode for
  angular velocity calculation.

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Fixed a bug where estimated angular velocity was all NaN when orientation
  contained NaNs.


0.3.0 (December 8th, 2020)
--------------------------

New features
~~~~~~~~~~~~

* Reference frames with timestamps now accept the ``discrete`` parameter,
  allowing for transformations to be fixed from their timestamp into the
  future.
* ``rbm`` accessor for DataArrays implementing ``qinterp`` and ``qinv``
  methods.
* New ``best_fit_rotation`` and ``qinterp`` top-level methods.

Bug fixes & improvements
~~~~~~~~~~~~~~~~~~~~~~~~

* Refactor of internal timestamp matching mechanism defining a clear priority
  for target timestamps. This can result in slight changes of timestamps
  and arrays returned by transformations but will generally produce more
  accurate results.
* Added ``mode`` and ``outlier_thresh`` arguments to
  ``estimate_angular_velocity``.
* Fixed issues with ``iterative_closest_point``.


0.2.0 (October 22nd, 2020)
--------------------------

New features
~~~~~~~~~~~~

* New ``estimate_linear_velocity`` and ``estimate_angular_velocity`` top-level
  methods.
* New ``qmul`` top-level method for multiplying quaternions.


0.1.2 (October 7th, 2020)
-------------------------

Improvements
~~~~~~~~~~~~

* Use SQUAD instead of linear interpolation for quaternions.


0.1.1 (September 17th, 2020)
----------------------------

Bug fixes
~~~~~~~~~

* Fix transformations failing for DataArrays with non-numeric coords.


0.1.0 (September 17th, 2020)
----------------------------

* First release


