Releases: stephane-caron/pink
v3.1.0
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
v3.0.0
This major release adds Control Barrier Functions developed by @domrachev03 and @simeon-ned 👍 Examples of what we can do with barriers include:
- Arm: UR5: with joints and end effector limits
- Humanoid: G1: G1 humanoid squatting via a CoM task
- Quadruped: Go2: Go 2 squatting with floating base position limits
- Dual Arms: Yumi: self-collision avoidance with spheres
- Dual Arms: Iiwa: whole-body self-collision avoidance
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 tobuild_ik
andsolve_ik
- The
check_limits
method now includes an optionalsafety_break
argument to control whether execution should stop on exception. - The
solve_ik
function now includes thesafety_break
that is forwarded tocheck_limits
.
- Add a
- 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
- Abstract Barrier
- 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
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
- Left: relative frame task (
stretch_relative_target.py
example) - Right: frame task (
stretch_world_target.py
example)
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
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 toFrameNotFound
- Breaking: Rename
FrameTask.body
toFrameTask.frame
Removed
- Body-minus utility function
- Spatial-minus utility function
v1.1.0
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
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
v0.10.0
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
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
- Example: Draco 3 humanoid by @shbang91
- Joint-coupling task by @shbang91
- Linear holonomic task by @shbang91
- Unit tests for joint-coupling and linear holonomic tasks by @shbang91
Changed
- Refactor
apply_configuration
intoConfiguration
constructor - Refactor
assume_configuration
intoConfiguration
constructor - Refactor task dynamics into
compute_error
andcompute_jacobian
v0.8.0
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