Skip to main content

Two-point interpolation with constant acceleration and constant jerk

Project description

Two Points Interpolation Python

Calculate optimal trajectory (position, velocity, acceleration) between two points with kinematic constraints.

Overview

This library provides two trajectory planning algorithms:

  1. Constant Acceleration: Generates smooth trajectories with acceleration limits
  2. Constant Jerk: Generates even smoother trajectories with jerk (acceleration derivative) limits

Installation

From PyPI (when published)

pip install two-point-interpolation

From Source

git clone https://github.com/yuokamoto/two_points_interpolation_py.git
cd two_points_interpolation_py
pip install -e .

For Development

git clone https://github.com/yuokamoto/two_points_interpolation_py.git
cd two_points_interpolation_py
pip install -e ".[dev]"

# Install pre-commit hooks for automatic code formatting and type checking
pre-commit install

The pre-commit hooks will automatically run before each commit to:

  • Format code with autopep8
  • Check types with mypy (strict for constant_acc module)
  • Validate code style with flake8
  • Remove trailing whitespace
  • Validate YAML files

You can also run the hooks manually on all files:

pre-commit run --all-files

Quick Start

Constant Acceleration

from two_point_interpolation import TwoPointInterpolation

# Create interpolator
interp = TwoPointInterpolation()

# Set start, end, and constraints
interp.init(p0=0.0, pe=100.0, acc_max=2.0, vmax=10.0, dec_max=4.0)

# Calculate trajectory
total_time = interp.calc_trajectory()

# Get state at any time
pos, vel, acc = interp.get_point(t=5.0)

Constant Jerk

from two_point_interpolation.constant_jerk import TwoPointInterpolationJerk

interp = TwoPointInterpolationJerk()
interp.init(p0=0.0, pe=100.0, amax=2.0, vmax=10.0, jmax=1.0)

total_time = interp.calc_trajectory()
pos, vel, acc, jerk = interp.get_point(t=5.0)

Note: Constant jerk implementation is currently under review. See TODO section below.

Examples

Run example scripts to see visualizations:

# Basic constant acceleration
python3 examples/example_constant_acc.py

# Constant jerk (smoother)
python3 examples/example_constant_jerk.py

Testing

The library includes a comprehensive YAML-based testing system.

Quick Start

# Run all tests
python -m pytest tests/test_yaml_cases.py -v

# Generate trajectory visualizations
python tests/generate_plots.py

# List available test categories
python tests/generate_plots.py --list

Detailed Documentation

For comprehensive testing information, debugging guides, and visualization usage:

๐Ÿ“– See tests/README.md for complete testing documentation

Project Structure

two_points_interpolation_py/
โ”œโ”€โ”€ two_point_interpolation/              # Main package
โ”‚   โ”œโ”€โ”€ __init__.py                       # Package exports
โ”‚   โ”œโ”€โ”€ constant_acc.py                   # Acceleration-based planning (enhanced)
โ”‚   โ””โ”€โ”€ constant_jerk.py                  # Jerk-based planning (TODO: needs review)
โ”œโ”€โ”€ examples/                             # Example scripts
โ”‚   โ””โ”€โ”€ images/                           # Generated plots
โ”œโ”€โ”€ tests/                                # YAML-based test suite (51+ tests)
โ”‚   โ”œโ”€โ”€ test_cases.yaml                   # Test case definitions
โ”‚   โ”œโ”€โ”€ test_case_loader.py               # YAML parsing utilities
โ”‚   โ”œโ”€โ”€ test_yaml_cases.py                # Test runner
โ”‚   โ”œโ”€โ”€ generate_plots.py                 # Visualization tool
โ”‚   โ””โ”€โ”€ plots/                            # Generated test plots
โ””โ”€โ”€ docs/                                 # Documentation
    โ”œโ”€โ”€ CONSTANT_ACC_DERIVATION.md        # Mathematical details
    โ”œโ”€โ”€ QUADRATIC_COEFFICIENTS_DERIVATION.md  # Quadratic solution derivation
    โ”œโ”€โ”€ edge_cases_analysis.md             # Edge cases and overspeed analysis
    โ””โ”€โ”€ CHANGELOG.md                      # Version history

Example Results

Case 0: vmax not reached

Case 0

Parameters: t0=1.0, p0=5, pe=15, acc_max=2.0, dec_max=3.0, vmax=10.0, v0=0, ve=0

Trajectory when the peak velocity is below vmax. Shows two phases: acceleration and deceleration.

Case 1: vmax reached

Case 1

Parameters: t0=0, p0=0, pe=50, acc_max=2.0, dec_max=4.0, vmax=8.0, v0=2.0, ve=1.0

Trajectory when vmax is reached. Shows three phases: acceleration, constant velocity, and deceleration.

Documentation

Known Issues & TODO

Constant Jerk Implementation Issues

The constant_jerk module requires significant improvements:

  1. API Contract Violation: The ve (final velocity) parameter is accepted in init() but never used in calculations
  2. Debug Output: calc_trajectory() prints debug information to stdout (should use logging or be removed)
  3. Time Boundary Bug: Case 3 condition uses 4*t1+2*2*t2+t3 instead of correct 4*t1+2*t2+t3, causing phase transition errors
  4. Missing Tests: No test coverage for constant jerk functionality
  5. Support acc_max != dec_max: Extend to support independent acceleration/deceleration limits

Other

  • Add comprehensive test suite for constant_jerk module
  • Verify mathematical correctness of jerk-based trajectories

Requirements

  • Python 3.6+
  • NumPy
  • Matplotlib (for examples)

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

This software is provided "AS IS" without warranty of any kind.

Project details


Download files

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

Source Distribution

two_point_interpolation-1.3.0.tar.gz (45.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

two_point_interpolation-1.3.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file two_point_interpolation-1.3.0.tar.gz.

File metadata

  • Download URL: two_point_interpolation-1.3.0.tar.gz
  • Upload date:
  • Size: 45.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for two_point_interpolation-1.3.0.tar.gz
Algorithm Hash digest
SHA256 0bd600c5f90cd2902fb269b25b4ec77d3a53fbf02f2357976794ae49ecd17ad2
MD5 d4cc12756178c0cdd9a78e0d076cc5a8
BLAKE2b-256 7daaa745a53ec26b036aa36304cb3fe085e1616aeb8df86bb1da70fa36d986a7

See more details on using hashes here.

File details

Details for the file two_point_interpolation-1.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for two_point_interpolation-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 261b2f2b03d85a3280ab8136a36c103cb01fba90dacacab8510960e7e5726a17
MD5 b1ef0533e0f248301ae1ccaf1c25afcd
BLAKE2b-256 4820af263d2df9e193db7e259149c8c3d0c654073f7d2d6c4d51bbdc3be1e508

See more details on using hashes here.

Supported by

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