Skip to content

Releases: stephane-caron/pink

v3.0.0

30 Jul 11:18
Compare
Choose a tag to compare

This major release adds Control Barrier Functions developed by @domrachev03 and @simeon-ned 👍 Examples of what we can do with barriers include:

Screencast.from.06-25-2024.01.20.45.PM.webm

Another API-breaking change to the library is that limits are now optional and can be extended (for instance with the new acceleration limit) or disabled. New limits and tasks include:

  • Limit: AccelerationLimit
  • Task: ComTask for center-of-mass tracking (thanks to @simeon-ned)
  • Task: LowAccelerationTask for smoother velocities.

Check out the full changelog below for other changes and fixes. May the Motion be with you!

Added

  • Breaking: Updated the logic for handling the joint limits:
    • Add a limits argument to build_ik and solve_ik
    • The check_limits method now includes an optional safety_break argument to control whether execution should stop on exception.
    • The solve_ik function now includes the safety_break that is forwarded to check_limits.
  • Control Barrier Functions, namely: (thanks to @domrachev03 and @simeon-ned)
    • Abstract Barrier Barrier
    • Frame Position Barrier PositionBarrier
    • Body Spherical Barrier BodySphericalBarrier
    • Whole-body Self-Collision Avoidance Barrier SelfCollisionBarrier
  • Example: UR5 manipulator and GO2 quadruped robot with PositionBarrier
  • Example: YUMI two-armed manipulator with BodySphericalBarrier
  • Example: G1 humanoid squatting through regulating CoM.
  • Limit: AccelerationLimit
  • Task: ComTask for center-of-mass tracking (thanks to @simeon-ned)
  • Task: LowAccelerationTask for smoother velocities.

Changed

  • Breaking: remove lm_damping parameter from DampingTask where it wasn't used
  • CICD: Update ruff to 0.4.3
  • Configuration accepts list of Control Barrier Functions
  • DampingTask: Simplify implementation
  • Update to Pinocchio 3 with 2.7 backward compatibility

Fixed

  • PostureTask: Match implementation and documentation formula
  • Fix broken documentation links

Removed

  • CICD: Disable macOS checks until upstream PyPI package is fixed

v2.1.0

02 Apr 10:06
Compare
Choose a tag to compare

This release adds the RelativeFrameTask developed with @ymontmarin 👍 This new task is a generalization of the frame task that accepts targets with respect to any robot frame. For example:

stretch_examples.mp4

This release also brings a few quality-of-use improvements to configurations and costs.

Added

  • Function get_transform in the Configuration class
  • Task: relative frame task, where target is w.r.t another robot frame

Changed

  • Configuration: update function now accepts a configuration vector argument
  • Costs: setting cost in relative frame task now accepts plain float

v2.0.0

05 Mar 09:34
Compare
Choose a tag to compare

This release brings a number of fixes and completes the renaming of the BodyTask to FrameTask (details below). It also distributes Pink on conda-forge, which is now the recommended way to install for best performance:

conda install -c conda-forge pink

Added

  • Add gain keyword argument to all task constructors where is makes sense
  • Damping task that minimizes joint velocities
  • Distribute package on conda-forge
  • Example on how differential IK may converge to a local constrained optimum
  • Expose all tasks from the top-level pink module
  • Handle unbounded joints in custom configuration vectors
  • Unit test for posture task Jacobian

Changed

  • Breaking: Define task Jacobian as derivative of the task error
  • Breaking: Rename BodyNotFound exception to FrameNotFound
  • Breaking: Rename FrameTask.body to FrameTask.frame

Removed

  • Body-minus utility function
  • Spatial-minus utility function

v1.1.0

22 Jan 18:27
627e6e2
Compare
Choose a tag to compare

This release fixes a bug when handling configuration limits for models that contain unbounded revolute joints.

Changed

  • Don't check configuration limits when building IK matrices

Fixed

  • Configuration limits when model has unbounded revolute joints

v1.0.0

22 Jun 12:39
e80870c
Compare
Choose a tag to compare

This is the first major release of Pink, Python inverse kinematics for articulated robot models, based on Pinocchio. The main update since v0.11.0 is the definition of a proper linear holonomic task on tangent spaces, with accompanying documentation, by @ymontmarin. Thanks! 👍

API-wise, Levenberg-Marquardt damping is now defined in the base Task class and can therefore be set in any task. This release drops support for Python 3.7, and brings a seasonal batch of new examples and bug fixes.

Added

  • Example: UR5 arm
  • Example: flying dual-arm with UR3
  • General linear holonomic task

Changed

  • Cost vector is now defined for all tasks
  • Drop support for Python 3.7
  • Levenberg-Marquardt damping is now defined for all tasks
  • Update joint-coupling task to derive from general linear holonomic task

Fixed

  • Example: Draco 3 numerical stability

v0.11.0

01 May 14:52
d3797f4
Compare
Choose a tag to compare

This release upgrades the BodyTask to a FrameTask handling all kinds of frames defined in the robot description. It was contributed by @proyan, thanks! 😃

Added

  • Example: Stretch RE1

Changed

  • Handle all frames, including non-body frames
  • Rename BodyTask to FrameTask

v0.10.0

30 Mar 17:01
9f85475
Compare
Choose a tag to compare

This release fixes handling of models with/without configuration limits and with/without velocity limits.

Added

  • Base class Limit for configuration and velocity limits
  • In-place integration of a velocity from a configuration
  • Unit tests for configuration limits
  • Unit tests for velocity limits

Changed

  • Add pink.limits submodule
  • Configuration and velocity limits are now stacked rather than pre-reduced
  • Move configuration limit to ConfigurationLimit class
  • Move velocity limit to VelocityLimit class

v0.9.0

15 Mar 15:22
2dcb791
Compare
Choose a tag to compare

This release adds the joint-coupling and linear-holonomic tasks contributed by @shbang91 👍 The tasks are unit tested and illustrated by a new humanoid example 💪

Added

Changed

  • Refactor apply_configuration into Configuration constructor
  • Refactor assume_configuration into Configuration constructor
  • Refactor task dynamics into compute_error and compute_jacobian

v0.8.0

09 Feb 18:32
Compare
Choose a tag to compare

This release fixes the Jacobian of the body task, with a dedicated blog post to explain the fix. In short: we were using the frame Jacobian instead of the full task Jacobian (which includes a log-derivative). Using the frame Jacobian works fine in many use cases, but it can also fail drastically in weighted inverse kinematics. Example and details in the blog post 🗒️

Thanks to @aescande and @Gregwar for their help 👍

Added

  • BodyNotFound exception
  • Document spatial and body minus between transforms
  • Example: SigmaBan humanoid
  • Forward keyword arguments of solve_ik to the backend QP solver

Changed

  • Return type of compute_velocity_limits now includes optionals
  • VectorSpace type is now immutable

Fixed

  • Jacobian of the body task

v0.7.0

16 Jan 16:52
000034b
Compare
Choose a tag to compare

This revision improves joint limit computations significantly, with fixes, new unit tests and examples on the side.

Added

  • Bounded subspace of tangent space, that is, restricted to bounded joints
  • CI: test on both Ubuntu and macOS images
  • Tangent space from Pinocchio model

Changed

  • Example: UR3 arm
  • Expose pink.Task from top-level module
  • Improve joint limit computations

Fixed

  • Empty inequalities when model has no bounded joint