{"id":21086312,"url":"https://github.com/marip8/sampling_kinematics_plugin","last_synced_at":"2025-10-15T11:07:50.300Z","repository":{"id":104275311,"uuid":"262651272","full_name":"marip8/sampling_kinematics_plugin","owner":"marip8","description":"A MoveIt! kinematics plugin for solving IK with robots mounted on external axes","archived":false,"fork":false,"pushed_at":"2021-08-26T23:54:35.000Z","size":35,"stargazers_count":5,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-14T04:37:42.445Z","etag":null,"topics":["kinematics","moveit","ros","ros-industrial"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marip8.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-09T20:15:18.000Z","updated_at":"2022-09-10T00:24:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"5285dfbf-f28d-44ae-a785-778e254b8d7c","html_url":"https://github.com/marip8/sampling_kinematics_plugin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marip8/sampling_kinematics_plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marip8%2Fsampling_kinematics_plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marip8%2Fsampling_kinematics_plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marip8%2Fsampling_kinematics_plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marip8%2Fsampling_kinematics_plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marip8","download_url":"https://codeload.github.com/marip8/sampling_kinematics_plugin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marip8%2Fsampling_kinematics_plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279075621,"owners_count":26097950,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-15T02:00:07.814Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kinematics","moveit","ros","ros-industrial"],"created_at":"2024-11-19T20:44:26.663Z","updated_at":"2025-10-15T11:07:50.277Z","avatar_url":"https://github.com/marip8.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sampling Kinematics Plugin\n![CI](https://github.com/marip8/sampling_kinematics_plugin/workflows/CI/badge.svg?branch=master)\n\nA MoveIt! kinematics plugin for solving IK with robots mounted on external axes\n\n## Motivation\nSeveral types of robotic manipulators have closed-form kinematic solutions that are computationally faster than more generic Jacobian-based solvers.\nA number of MoveIt! plugins exist that leverage these fast kinematic solutions ([ikfast](http://docs.ros.org/melodic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html), [moveit_opw_kinematics](https://github.com/JeroenDM/moveit_opw_kinematics_plugin), [ur_kinematics](https://github.com/ros-industrial/universal_robot/tree/kinetic-devel/ur_kinematics)).\nHowever, these plugins cannot be used to solve kinematics when the robot is mounted on an external axis because they only provide joint solutions for the manipulator.\nTo obtain a full system kinematic solution, it is possible to discretely sample the joint space of the external axes and then solve the manipulator kinematics at each joint position. This project implements this approach by sampling the joint space of external axes in a planning group and then determining the manipulator joint state using a configurable, manipulator-specific MoveIt! kinematics solver plugin.\n\n## Usage\nThis plugin requires two planning groups to be defined in the SRDF\n  1. A planning group for the manipulator alone (i.e. does not include the external axis joints)\n  2. A planning group which includes the manipulator and external axis joints\n\nThis plugin requires specific parameters in the MoveIt! `kinematics.yaml`:\n  - `kinematics_solver_search_resolution`: The resolution at which the joint range of the external axis should be discretized when solving IK\n  - `robot_group`: The name of the planning group that represents only the manipulator joints\n  - `weights`: (Optional) A vector of joint weights. These weights are applied to joints individually to influence the overall cost of the joint pose solution. The size of this vector must match the number of joints in the planning group\n\nAn example configuration is shown below.\n\n```yaml\next_axis_manipulator:\n  kinematics_solver: sampling_kinematics_plugin/ExternalAxisSamplingKinematicsPlugin\n  kinematics_solver_search_resolution: 0.1\n  robot_group: manipulator\n  weights: [0.1, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]\nmanipulator:\n  kinematics_solver: ur_kinematics/UR5KinematicsPlugin\n  kinematics_solver_search_resolution: 0.1\n  kinematics_solver_timeout: 0.005\n  kinematics_solver_attempts: 1\n```\n\n\u003e Note: The sampling kinematics plugin does not currently utilize the `kinematics_solver_timeout` or `kinematics_solver_attempts` parameters\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarip8%2Fsampling_kinematics_plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarip8%2Fsampling_kinematics_plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarip8%2Fsampling_kinematics_plugin/lists"}