Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
jazzy

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
kilted

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
lyrical

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
rolling

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
iron

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

pick_ik package from pick_ik repo

pick_ik

ROS Distro
humble

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PickNikRobotics/pick_ik.git
VCS Type git
VCS Version main
Last Updated 2026-08-03
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Inverse Kinematics solver for MoveIt

Maintainers

  • Tyler Weaver

Authors

  • Tyler Weaver

pick_ik

pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.

The solver is a reimplementation of bio_ik, which combines:

  • A local optimizer which solves inverse kinematics via gradient descent
  • A global optimizer based on evolutionary algorithms

Critically, pick_ik allows you to specify custom cost functions as discussed in this paper, so you can prioritize additional objectives than simply solving inverse kinematics at a specific frame. For example, you can minimize joint displacement from the initial guess, enforce that joints are close to a particular pose, or even pass custom cost functions to the plugin.

If you are familiar with bio_ik, the functionality in this package includes:

  • Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)
  • Reimplementation of the numeric gradient descent solvers (equivalent to gd, gd_r, and gd_c solvers)
  • Fully configurable number of threads if using the global solver
  • Cost functions on joint displacement, joint centering, and avoiding joint limits

For more details on the implementation, take a look at the paper or the full thesis.


Getting Started

To get started using pick_ik, refer to the following README files:

CHANGELOG

Changelog for package pick_ik

1.1.3 (2026-08-03)

  • Migrate from tl_expected to libexpected-dev system package (#81) cpp_polyfills 2.0 dropped its tl_expected sub-package, so the tl_expected rosdep key no longer resolves on Ubuntu Resolute. Depend on libexpected-dev instead, which is available on jammy, noble and resolute alike. Required for lyrical and rolling.
  • Rolling/lyrical: tf2 .hpp header renames + pick_ik include prefix (#82)
  • ci: switch from custom-container CI to industrial_ci (#83) The pre-baked CI container was frozen at its 2023-12 build and its weekly rebuild had been failing and then auto-disabled, so every PR for the past two years was tested against an environment that no longer exists. industrial_ci installs dependencies fresh per run and follows each distro's current base OS, matching the buildfarm and the rest of the MoveIt/PickNik release matrix. Rolling now builds against ros2-testing on Resolute, and git is declared as a test_depend for the Catch2 FetchContent step.
  • Contributors: LarsNobleo, Nathan Brooks

1.1.2 (2026-06-26)

  • Adds header file for pick_ik_plugin (#79)
  • Contributors: Mark Johnson

1.1.1 (2024-11-30)

  • Initialize with the best seed instead of initial seed at population wipeout (#77)
  • Fix timeout calculation if solution callback fails (#73)
  • Remove incorrect override of tip_frames (#68)
  • Contributors: Amal Nanavati, Sebastian Castro, Timon Engelke

1.1.0 (2023-12-13)

  • Support continuous (unbounded) joints properly (#59)
  • Run elite gradient descent in separate threads (#61)
  • Contributors: Sebastian Castro

1.0.2 (2023-07-25)

  • New options to control solution quality and performance
    • Option to rerun optimization until valid solution or timeout (#53)
    • Option to keep optimizing after a valid solution was found (#46)
    • Approximate solution cost threshold (#51) and joint jump threshold parameters (#42)
    • Position scale parameter (#47)
  • Fix ordering of joint limits when loading robot model (#54)

  • Fix use of solution callback (#48)

  • Remove unnecessary preprocessor macro (#40)

  • Contributors: Marc Bestmann, Sebastian Castro, Erik Holum

1.0.1 (2023-03-28)

  • Set Werror through CMake presets (#39)

  • Replace lower_bounds with gt_eq (#37)

  • Upgrade with new pkgs to fix issue with ROS

  • Target include subdirectory

  • Update Catch2 version to 3.3.0

  • Fix overriding of package

  • Fix orientation calculation in cost function and frame tests (#31)
    • Fix orientation calculation
    • Update plugin return values
    • Remove redundant (and incorrect) joints bounds check

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

Recent questions tagged pick_ik at Robotics Stack Exchange