Skip to content

Releases: pink-kinematics/pink

v4.4.0

Choose a tag to compare

@stephane-caron stephane-caron released this 09 Sep 21:18

This release allows custom boundaries in velocity limits, allowing bounds on joints that can't have a limit from their URDF model (such as continuous joints).

Added

  • Limit: Allow custom boundaries in VelocityLimit
  • docs: Document assumption that we start from a feasible configuration

v4.3.0

Choose a tag to compare

@stephane-caron stephane-caron released this 15 Jul 18:59

This release fixes a braking-distance bug in the AccelerationLimit and updates the list of revolute-joint shortnames supported by the ManipulabilityTask. It also adds Python 3.13 and 3.14 to the list of supported versions.

Added

  • CICD: Regression test on shortnames of continuous joints
  • Support for Python 3.13
  • Support for Python 3.14
  • examples: Add an example with the JVRC-1 humanoid backbending via a CoM task

Changed

  • Add xacrodoc to project dependencies
  • CICD: Switch UR3, UR5 and UR10 to their official descriptions
  • Transfer copyright notices to NOTICE file
  • examples: Switch UR3, UR5 and UR10 to their official descriptions

Fixed

  • Add typing_extensions to project dependencies
  • Limit: Fix AccelerationLimit braking-distance term for joints without a configuration limit, such as continuous joints
  • Task: Update list of revolute-joint shortnames supported by the ManipulabilityTask

v4.2.0

Choose a tag to compare

@stephane-caron stephane-caron released this 20 Apr 09:48

This release adds the ManipulabilityTask contributed by @danielsanjosepro 👍

It also corrects the G1 humanoid example with a fix provided by @nmarticorena.

Added

  • Task: Add ManipulabilityTask to maximize manipulability of a manipulator (thanks to @danielsanjosepro)
  • examples: Add Panda manipulability comparison example
  • examples: Add planar 2-DOF manipulability example
  • examples: Visualize current and designed center-of-mass positions in Humanoid G1 example (thanks to @nmarticorena)

Fixed

  • examples: Fix numerical behavior of Humanoid G1 example (thanks to @nmarticorena)

v4.1.0

Choose a tag to compare

@stephane-caron stephane-caron released this 11 Mar 16:38

This release adds Viser visualization and an example using it to tune the tasks of a 7-DoF manipulator, contributed by @danielsanjosepro 👍

2026-02-15.17-48-35.mp4

Added

  • Task: Add orientation_cost property to the frame task (thanks to @danielsanjosepro)
  • Task: Add position_cost property to the frame task (thanks to @danielsanjosepro)
  • examples: Add an example of a panda arm tracking an interactive target in Viser visualizer (thanks to @danielsanjosepro)
  • visualization: Add start_viser_visualizer function for the Viser visualizer (thanks to @danielsanjosepro)

Changed

  • Bump minimum Python version to 3.10

v4.0.0

Choose a tag to compare

@stephane-caron stephane-caron released this 29 Jan 16:15

This release adds the FloatingBaseVelocityLimit contributed by @Soontosh 👍

Its breaking change is an update to the Limits API: limits now work on full configuration instances (rather than configuration vectors).

Added

  • limits: Allow floating base velocity limits with FloatingBaseVelocityLimit to plug into configurations to automatically clamp base twists (thanks to @Soontosh)

Changed

  • Breaking: Limit.compute_qp_inequalities functions now take a full configuration as argument rather than a configuration vector

Fixed

  • CICD: Update CoM unit test that has started failing on macOS runners

v3.5.0

Choose a tag to compare

@stephane-caron stephane-caron released this 02 Dec 21:15

This release fixes the acceleration limit, thanks to @bwingo47 for pointing out the former issue 👍 It also annotates example so that we can uv run them directly.

Added

  • examples: Add example with a sparse QP solver, suppressing matrix conversion warnings
  • examples: Add uv script dependencies to all examples

Changed

  • CICD: Update Pylint configuration

Fixed

  • Correct changelog version comparison links
  • Limit: Fix braking-limit formula in acceleration limit
  • docs: Fix typos in the acceleration limit documentation

v3.4.0

Choose a tag to compare

@stephane-caron stephane-caron released this 29 Jul 09:07
627d588

This release adds the JointVelocityTask whose aim is to track a reference joint-velocity vector via $\arg\min_v \Vert v_{ref} - v \Vert^2$. This task can be used, for instance, if a reference velocity is computed by other means (optimal control, reinforcement-learned policy, ...), and the differential IK acts as a constraint-enforcing filter. An example illustrates this with a Unitree Z1 tracking a trajectory that would violate joint limits:

arm_z1_cropped.mp4

(In the example, joint limits don't prevent self-collisions when the arm is folded on itself.)

Added

  • Task: JointVelocityTask for tracking a reference joint-velocity trajectory

Fixed

  • Save problem instance in NoSolutionFound exception

Removed

  • Remove unused attribute of SelfCollisionBarrier

v3.3.0

Choose a tag to compare

@stephane-caron stephane-caron released this 15 May 10:53

This version adds (1) a constraints argument to solve_ik, to enforce tasks as QP equality constraints rather than in the objective function, and (2) the omniwheel task, which is like a rolling task but allows lateral motion.

Note that, internally, exceptions have been grouped into the pink.exceptions submodule. We don't count this as an API-breaking change, although strictly speaking it is 😊, as the expected way to handle Pink exceptions is to catch PinkError.

Thanks to @jorisv for contributing to this release 👍

Added

  • CICD: Unit test fixture for the rolling task
  • CICD: Unit test fixture for the omniwheel task
  • Introduce constraints to enforce tasks as QP equality constraints
  • Task: Add missing task __repr__ functions
  • Task: Omniwheel task, like a rolling task but allowing lateral motion

Changed

  • CICD: Switch to Pixi for code coverage, documentation, linting and testing
  • Move pink.barriers.exceptions to pink.exceptions
  • Move pink.tasks.exceptions to pink.exceptions
  • Task: Make __repr__ of base class abstract to ensure tasks define their own
  • docs: Refactor Tasks page and update references
  • examples: Update installation hints when example dependencies are missing

Fixed

  • CICD: Improve Pixi configuration (thanks to @jorisv)
  • Task: Fix damping task when the robot model has a mobile root joint
  • Task: Report LM damping in CoM task representation

v3.2.0

Choose a tag to compare

@stephane-caron stephane-caron released this 22 Apr 12:11

This release introduces the NoSolutionFound exception (previously an AssertionError), and makes a stricter check that the QP solver reports successfully converging to a solution. It is still possible to catch cases where the solver converged (but not to a solution) as follows:

try:
    velocity = solve_ik(configuration, tasks, dt, solver=solver)
except NoSolutionFound as exn:
    if exn.results.x is not None:  # QP solver converged but not to a solution
        velocity = exn.results.x
    raise exn

This release also removes an unrequired dependency on quadprog. This solver is still great for IK, but we cannot distribute it with Pink (permissive license: Apache-2.0) as it is licensed under the GPL-2.0. Feel free to install and use it on your own!

Thanks to @ashwinvkNV and @peterd-NV for helping address this licensing issue 👍

Added

  • Add NoSolutionFound exception
  • Add open keyword argument to start_meshcat_visualizer
  • examples: Detail that quadprog works best on Stretch examples
  • examples: Installation instruction for loop-rate-limiters
  • examples: Switch to DAQP solvers in examples where it works well
  • examples: Switch to ProxQP on JVRC-1 example
  • examples: Switch to ProxQP on one-dof configuration limit example

Changed

  • CICD: Switch from tox to Anaconda environments
  • CICD: Update QP solvers used in unit tests
  • CICD: Update checkout action to v4
  • Raise custom NoSolutionFound rather than AssertionError in solve_ik
  • Update supported Python versions

Fixed

  • CICD: Update unit test for self-collision barrier

Removed

  • Remove dependency on quadprog (thanks to @peterd-NV)

v3.1.0

Choose a tag to compare

@stephane-caron stephane-caron released this 28 Oct 14:04

This release adds the RollingTask for rolling without slipping. Here is an example:

upkie_rolling_without_slipping.mp4

Added

  • Example: Upkie rolling without slipping on a horizontal floor
  • Task: RollingTask for rolling without slipping on a plane

Changed

  • Rename "end-effector to target" example to "inverse kinematics UR10"
  • Update icon of documentation website

Fixed

  • Update documentation Sphinx and theme versions
  • Fix Jacobian of SelfCollisionBarrier for floating-base robots