{"id":32990432,"url":"https://github.com/uw-biorobotics/IKBT","last_synced_at":"2025-11-15T09:01:22.049Z","repository":{"id":49134868,"uuid":"104386447","full_name":"uw-biorobotics/IKBT","owner":"uw-biorobotics","description":"A python package to solve robot arm inverse kinematics in symbolic form","archived":false,"fork":false,"pushed_at":"2024-06-22T15:25:42.000Z","size":1152,"stargazers_count":175,"open_issues_count":3,"forks_count":34,"subscribers_count":19,"default_branch":"main","last_synced_at":"2024-07-28T22:59:26.912Z","etag":null,"topics":["ai","kinematics","math","python","robotics","symbolic"],"latest_commit_sha":null,"homepage":"https://www.jair.org/index.php/jair/article/view/11592","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uw-biorobotics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","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":"2017-09-21T18:52:53.000Z","updated_at":"2024-06-30T02:51:39.000Z","dependencies_parsed_at":"2023-02-08T12:15:55.292Z","dependency_job_id":"da0dc872-f498-480f-96be-08672c697689","html_url":"https://github.com/uw-biorobotics/IKBT","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/uw-biorobotics/IKBT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uw-biorobotics%2FIKBT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uw-biorobotics%2FIKBT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uw-biorobotics%2FIKBT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uw-biorobotics%2FIKBT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uw-biorobotics","download_url":"https://codeload.github.com/uw-biorobotics/IKBT/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uw-biorobotics%2FIKBT/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284530944,"owners_count":27021188,"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-11-15T02:00:06.050Z","response_time":57,"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":["ai","kinematics","math","python","robotics","symbolic"],"created_at":"2025-11-13T09:00:29.690Z","updated_at":"2025-11-15T09:01:22.031Z","avatar_url":"https://github.com/uw-biorobotics.png","language":"Python","funding_links":[],"categories":["[Libraries](#awesome-robotics-libraries)"],"sub_categories":["[Inverse Kinematics](#awesome-robotics-libraries)"],"readme":"# IKBT\nA python based system for generating closed-form solutions to the manipulator inverse kinematics problem using\nbehavior trees for action selection. \nSolutions are fully symbolic and are output as LaTex, Python, and C++.\n\n# Latest News\n\n## June 2024\n\n* We have done a complete re-write of the solution set generation process with seemingly good results.\n  We develop the table of solutions directly instead of relying on a solution graph,\n  adding rows as each solved variable creates combinations [Explanation and Example](https:../blob/main/IKdocs/solExamp.pdf)  \n* One of our main learnings earlier in this project was that robot kinematic equation solutions in general are NOT described \nby a tree structure!  Instead they are a more general graph.  Our previous solution\nwas overly complex due to lingering assumptions from the tree structure idea. \n\n* Current status is\nthat FK and IK solutions seem correct, latex output is correct and shows all versions.  A new section in the Latex output\nalso gives generic \"textbook\" style solutions without all the solution set permutations.\nWe have not yet done a full \"closed loop\" test on these new solution vectors as described in the JAIR paper.\n\n* New solution version system is fully integrated with Latex, Cpp, and Python generation outputs.\n\n* The new approach to solution sets is explained in a document [IKdocs/solExample.pdf](https:../blob/main/IKdocs/solExamp.pdf).\n\n* There is lots of code from the old method (\"v2\") that need to be cleaned up, as well as several superfluous class members\n  in Robot and unknown classes.\n\n\n## Jan 2024\n* New feature: Can generate python code for Forward Kinematics only.  This code can be sub-optimal, and equations can be over complex\nwhen the alpha parameter is not a nice multiple of pi/2 (sin(al) != {0,1}).  This is the case for a few robots like Raven-II.\nNow in this case constants with the sine and cosine values of alpha are automatically created and swapped in to the FK equations.\nGenerated code initializes the new constants.   Try \u003epython3 fkOnly \\\u003cRobotName\\\u003e.  Output is in the CodeGen directory.\n\n## [Old News](IKdocs/oldNews.md)\n\n# IKBT Overview\n## Our contributions to automate closed-form kinematics solving are:\n 1. We built an autonomous inverse kinematics solver (IKBT) using a behavior tree to organize solution algorithms. \n 1. We incorporated knowledge frequently used (by human experts) when solving inverse kinematics into a behavior tree. These rule-based solvers applicable to any serial-chain, non-redundant, robot arm.\n 1. IKBT generates a dependency {\\it graph} of joint variables after solving, generating all possible solutions. \n 1. IKBT provides convenience features such as automatic documentation of the solution in \\LaTeX and automatic code generation in Python and C++. \n 1.  Implementation in a modern open-source, cross-platform, programming language (Python) with minimal dependencies outside of the standard Python distribution ({\\tt sympy}).\n \n# Track Project Forks\n * [ Current list of Forks ](https://techgaun.github.io/active-forks/index.html#uw-biorobotics/IKBT)\n\n# Videos\n * [Introductory Video](https://youtu.be/bLTXuNZPR5k)  (6min)\n * [How to set up IKBT for your own robot arm](https://youtu.be/hXzY5vrvWkU) (6.5min)\n\n\n# Details    \n\n### Documenation:  \n   * [ Theory of Operation ](https://www.jair.org/index.php/jair/article/view/11592)\n   * [ Major Classes ](https:../blob/main/IKdocs/classes.md)\n   * [ Solution Set Generation Strategy Doc ](https:../blob/main/IKdocs/solExamp.pdf) (updated June 2024)\n\n## How to cite: \n\nZhang, Dianmu, and Blake Hannaford. \"IKBT: solving symbolic inverse kinematics with behavior tree.\" Journal of Artificial Intelligence Research 65 (2019): 457-486.  [Link](https://www.jair.org/index.php/jair/article/view/11592)\n\nZhang, Dianmu, and Blake Hannaford. \"IKBT: solving closed-form Inverse Kinematics with Behavior Tree.\" arXiv preprint arXiv:1711.05412 (2017).\n[Link](http://arxiv.org/abs/1711.05412)\n\n## Installation Dependencies\n\nYou need the following to be installed to run IKBT:\n\n * Python 3.8.x [(Python Installation)](https://edu.google.com/openonline/course-builder/docs/1.10/set-up-course-builder/check-for-python.html)\n * Sympy python package [(Installation instructions for all OS)](https://github.com/sympy/sympy/wiki/Download-Installation)\n * Latex package (for nice equation output - highly recommended) [(Install Latex)](https://www.latex-project.org/get/)\n \n## Tested robots, DH parameters \u0026 other technical details to reproduce the results\n\nA list of all DH parameters tested in the paper:\n['Puma', 'Chair\\_Helper', 'Wrist', 'MiniDD', 'Olson13','Stanford',\n'Sims11', 'Srisuan11', 'Axtman13', 'Mackler13', 'Minder13', 'Palm13', \n'Parkman13', 'Frei13', 'Wachtveitl', 'Bartell', 'DZhang', 'Khat6DOF'.]\n\nWe suggest you first run the Wrist since it is relatively fast:\n\n \u003e python ikSolver.py Wrist \n\nTo solve your own problem open the file ikbtfunctions/ik_robots.py and create an entry \nfor your robot.  You should copy an entry for an existing robot and edit it's entries. \nCreate an \"unknown\" for each joint variable and package them into the vector \"variables\".\nEnter the DH parameters in matrix form.   Also, enter the name of your robot into the list\nof valid names (ikbtfunctions/ik_robots.py, line 31).\n\nDH parameters explained:\nThe vector \"vv\" encodes whether each joint is rotary (1) or prismatic (0).   If your \nrobot is less than 6 DOF, create empty rows:  [      0 ,     0,   0,   0  ], in the \nDH table so that it has six rows.  Many standard symbols in robot kinematics are pre-defined\nfor you but if you use any new ones, be sure to define them using sp.var().  See \"Wrist\" \nfor an example in which the three joint variables \"A, B, C\" are set up for sympy by\nsp.var('A B C'). \"pvals\" is where you can put in the numerical values for all parameters, for \nresult verification purposes.\n\nPre-computed forward kinematics.\n\nSometimes computation of the forward kinematic equations (and their subsequent \nsimplification) can be time consuming.   When debugging an inverse kinematics \nsolution (for example modifying the BT), it can slow the cycle if these have to \nbe redone each time.   Therefore, the software has a mechanism using Python \n\"pickle\" files, to cache the forward kinematics computation and not repeat it.\nForward kinematics pickle files are stored in the directory fk_eqns/.  This \ndirectory will be automatically created if you don't have it.  In some cases you \nmay have to delete the pickle file for your robot.  To do that, \u003erm \nfk_eqns/NAME_pickle.p.  IKBT will generally tell you when you should do this, \nbut it is OK to just \u003erm -rf fk_eqns/ .\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuw-biorobotics%2FIKBT","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuw-biorobotics%2FIKBT","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuw-biorobotics%2FIKBT/lists"}