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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged pick_ik at Robotics Stack Exchange
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-09-19 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tyler Weaver
Authors
- Tyler Weaver
pick_ik
pick_ik is an inverse kinematics (IK) solver compatible with MoveIt 2.
[!IMPORTANT]
pick_ikis deprecated by PickNik. Its performance did not meet our requirements, so PickNik no longer uses the solver or plans further feature development. We will provide only basic maintenance for existing users.We are looking to transfer ownership to the open source community. If you are interested in owning and maintaining
pick_ik, please contact us by opening an issue.
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
bio1andbio2_memeticsolvers) - Reimplementation of the numeric gradient descent solvers (equivalent to
gd,gd_r, andgd_csolvers) - 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 for package pick_ik
1.1.3 (2026-08-03)
- Migrate from tl_expected to libexpected-dev system package
(#81)
cpp_polyfills2.0 dropped itstl_expectedsub-package, so thetl_expectedrosdep key no longer resolves on Ubuntu Resolute. Depend onlibexpected-devinstead, 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-testingon Resolute, andgitis declared as atest_dependfor the Catch2FetchContentstep. - 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
-
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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake_ros | |
| moveit_resources_panda_moveit_config | |
| generate_parameter_library | |
| moveit_core | |
| pluginlib | |
| rclcpp | |
| rsl | |
| tf2 | |
| tf2_geometry_msgs | |
| tf2_kdl |
System Dependencies
| Name |
|---|
| git |
| fmt |
| range-v3 |
| libexpected-dev |