Skip to main content

Library for creating smooth cubic splines

Project description

NDCurves

Pipeline status Coverage report PyPI version Code style: black pre-commit.ci status

A template-based Library for creating curves of arbitrary order and dimension, eventually subject to derivative constraints. The main use of the library is the creation of end-effector trajectories for legged robots.

To do so, tools are provided to:

  • create exact splines of arbitrary order (that pass exactly by an arbitrary number waypoints)
  • constrain initial / end velocities and acceleration for the spline.
  • constrain take-off and landing phases to follow a straight line along a given normal (to avoid undesired collisions between the effector and the contact surface)
  • automatically handle 3d rotation of the effector.
  • create curves in SO3
  • support partial symbolic differentiation of curves. You can represent control points as linear variables, and integrate / differentiate those variable curves. You can also compute the cross product of two curves, which is relevant for centroidal dynamics.

Several type of formulation are provided:

  • Polynomials
  • Bezier
  • Hermite (only cubic hermite for now)

The library is template-based, thus generic: the curves can be of any dimension, and can be implemented in double or float and can work with kind variables like Vector, Transform, Matrix, ...

Installation

This package is available as binary in robotpkg

Dependencies

Additional dependencies for python bindings

To handle this with cmake, use the recursive option to clone the repository. For instance, using http:

git clone --recursive https://github.com/loco-3d/ndcurves $NDCURVES_DIR

Where $NDCURVES_DIR is to be replaced to your selected source folder. The library is header only, so the build only serves to build the tests and python bindings:

cd $NDCURVES_DIR && mkdir build && cd build
cmake -DBUILD_PYTHON_INTERFACE=ON .. && make && make test

Switch the BUILD_PYTHON argument to OFF if you don't want to use the python bindings of the package.

If everything went fine you should obtain the following output:

100% tests passed, 0 tests failed out of 3

Optional: Python bindings installation

To install the Python bindings first enable the BUILD_PYTHON_INTERFACE option:

cmake -DBUILD_PYTHON_INTERFACE=ON ..

Then rebuild the library:

cd ${NDCURVES_DIR}/build
make && make test

To see example of use, you can refer to the test file which is rather self explanatory:

In spite of an exhaustive documentation, please refer to the C++ documentation, which mostly applies to python.

Documentation and tutorial

For the C++ / Python detailed documentation, you can consult this pdf available in the doc folder

For a python tutorial, you can refer to the jupyter notebook. The test file is more exhaustive and rather self explanatory.

Citation

If you wish to cite this work please use the bibtex below:

@software{ndcurves,
  author = {Tonneau, Steve and Chemin, Jason and Fernbach, Pierre and Saurel, Guilhem},
  title = {ndcurves},
  url = {https://github.com/loco-3d/ndcurves},
  year = {2013}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

ndcurves-1.1.6-1-pp39-pypy39_pp73-manylinux_2_17_x86_64.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-1-pp39-pypy39_pp73-macosx_11_0_arm64.whl (1.2 MB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

ndcurves-1.1.6-1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (1.4 MB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

ndcurves-1.1.6-1-pp38-pypy38_pp73-manylinux_2_17_x86_64.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-1-pp38-pypy38_pp73-macosx_11_0_arm64.whl (1.2 MB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

ndcurves-1.1.6-1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (1.4 MB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

ndcurves-1.1.6-1-pp37-pypy37_pp73-manylinux_2_17_x86_64.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-1-pp37-pypy37_pp73-macosx_12_0_x86_64.whl (1.4 MB view hashes)

Uploaded PyPy macOS 12.0+ x86-64

ndcurves-1.1.6-1-cp311-cp311-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-1-cp311-cp311-manylinux_2_28_aarch64.whl (1.9 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-1-cp311-cp311-manylinux_2_17_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-1-cp311-cp311-macosx_11_0_arm64.whl (1.2 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

ndcurves-1.1.6-1-cp311-cp311-macosx_10_9_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

ndcurves-1.1.6-1-cp310-cp310-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-1-cp310-cp310-manylinux_2_28_aarch64.whl (1.9 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-1-cp310-cp310-manylinux_2_17_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-1-cp310-cp310-macosx_11_0_arm64.whl (1.2 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

ndcurves-1.1.6-1-cp310-cp310-macosx_10_9_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

ndcurves-1.1.6-1-cp39-cp39-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-1-cp39-cp39-manylinux_2_28_aarch64.whl (1.9 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-1-cp39-cp39-manylinux_2_17_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-1-cp39-cp39-macosx_11_0_arm64.whl (1.2 MB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

ndcurves-1.1.6-1-cp39-cp39-macosx_10_9_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

ndcurves-1.1.6-1-cp38-cp38-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-1-cp38-cp38-manylinux_2_28_aarch64.whl (1.9 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-1-cp38-cp38-manylinux_2_17_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-1-cp38-cp38-macosx_11_0_arm64.whl (1.4 MB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

ndcurves-1.1.6-1-cp38-cp38-macosx_10_9_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

ndcurves-1.1.6-1-cp37-cp37m-musllinux_1_1_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-1-cp37-cp37m-manylinux_2_28_aarch64.whl (1.9 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-1-cp37-cp37m-manylinux_2_17_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-1-cp37-cp37m-macosx_10_16_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.7m macOS 10.16+ x86-64

ndcurves-1.1.6-0-pp39-pypy39_pp73-manylinux_2_17_x86_64.whl (85.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (85.0 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

ndcurves-1.1.6-0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (85.0 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

ndcurves-1.1.6-0-pp38-pypy38_pp73-manylinux_2_17_x86_64.whl (85.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-0-pp38-pypy38_pp73-macosx_11_0_arm64.whl (85.0 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

ndcurves-1.1.6-0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (85.0 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

ndcurves-1.1.6-0-pp37-pypy37_pp73-manylinux_2_17_x86_64.whl (85.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-0-pp37-pypy37_pp73-macosx_12_0_x86_64.whl (85.0 kB view hashes)

Uploaded PyPy macOS 12.0+ x86-64

ndcurves-1.1.6-0-cp311-cp311-musllinux_1_1_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-0-cp311-cp311-manylinux_2_28_aarch64.whl (85.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-0-cp311-cp311-manylinux_2_17_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-0-cp311-cp311-macosx_11_0_arm64.whl (85.0 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

ndcurves-1.1.6-0-cp311-cp311-macosx_10_9_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

ndcurves-1.1.6-0-cp310-cp310-musllinux_1_1_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-0-cp310-cp310-manylinux_2_28_aarch64.whl (85.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-0-cp310-cp310-manylinux_2_17_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-0-cp310-cp310-macosx_11_0_arm64.whl (85.0 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

ndcurves-1.1.6-0-cp310-cp310-macosx_10_9_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

ndcurves-1.1.6-0-cp39-cp39-musllinux_1_1_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-0-cp39-cp39-manylinux_2_28_aarch64.whl (85.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-0-cp39-cp39-manylinux_2_17_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-0-cp39-cp39-macosx_11_0_arm64.whl (85.0 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

ndcurves-1.1.6-0-cp39-cp39-macosx_10_9_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

ndcurves-1.1.6-0-cp38-cp38-musllinux_1_1_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-0-cp38-cp38-manylinux_2_28_aarch64.whl (85.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-0-cp38-cp38-manylinux_2_17_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-0-cp38-cp38-macosx_11_0_arm64.whl (85.0 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

ndcurves-1.1.6-0-cp38-cp38-macosx_10_9_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

ndcurves-1.1.6-0-cp37-cp37m-musllinux_1_1_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

ndcurves-1.1.6-0-cp37-cp37m-manylinux_2_28_aarch64.whl (85.0 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.28+ ARM64

ndcurves-1.1.6-0-cp37-cp37m-manylinux_2_17_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

ndcurves-1.1.6-0-cp37-cp37m-macosx_10_16_x86_64.whl (85.0 kB view hashes)

Uploaded CPython 3.7m macOS 10.16+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page