{"id":16865946,"url":"https://github.com/gabrieljablonski/inverse-kinematics-differential-evolution","last_synced_at":"2025-05-07T00:06:03.449Z","repository":{"id":112265211,"uuid":"221943209","full_name":"gabrieljablonski/inverse-kinematics-differential-evolution","owner":"gabrieljablonski","description":"Application of Differential Evolution in the optimization of a robotic system with several links using inverse kinematics","archived":false,"fork":false,"pushed_at":"2019-12-17T19:09:00.000Z","size":2130,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-31T04:12:40.161Z","etag":null,"topics":["differential-evolution","golang","inverse-kinematics","optimization","python","robotic-systems","robotics","robotics-simulation"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabrieljablonski.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":"2019-11-15T14:44:38.000Z","updated_at":"2024-11-04T10:14:25.000Z","dependencies_parsed_at":"2023-05-19T04:15:56.030Z","dependency_job_id":null,"html_url":"https://github.com/gabrieljablonski/inverse-kinematics-differential-evolution","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieljablonski%2Finverse-kinematics-differential-evolution","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieljablonski%2Finverse-kinematics-differential-evolution/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieljablonski%2Finverse-kinematics-differential-evolution/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrieljablonski%2Finverse-kinematics-differential-evolution/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabrieljablonski","download_url":"https://codeload.github.com/gabrieljablonski/inverse-kinematics-differential-evolution/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252788519,"owners_count":21804285,"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","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":["differential-evolution","golang","inverse-kinematics","optimization","python","robotic-systems","robotics","robotics-simulation"],"created_at":"2024-10-13T14:48:58.315Z","updated_at":"2025-05-07T00:06:03.349Z","avatar_url":"https://github.com/gabrieljablonski.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Differential Evolution in Robotics - Inverse Kinematics\n\nThis implementation makes use of [Differential Evolution][DE] for the analysis of generic robotic systems in three-dimensional space, with its links described by [Denavit-Hartenberg parameters][DH]. The optimization (fitness function) takes into account the euclidean distance from the manipulator (extremity of last link) to a target point in space.\n\nThe implementation is generic enough to be able to optimize for any features of the system. For demonstration purposes, the only variable parameter is θ.\n\nAn example of a robotic system with four links is given below.\n\n![robotic system with four links](resources/robotic_system.png)\n\n\u003ccenter\u003e\n \n| Link | ![theta_i] | ![r_i] | ![d_i] | ![alpha_i] | ![theta_min] | ![theta_max] |\n|:----:|:----------:|:----:|:----:|:------:|:-----:|:-----:|\n|  01  | ![theta_1] | 0.00 | 0.03 |  +90°  |   0°  | +180° |\n|  02  | ![theta_2] | 0.10 | 0.00 |  +90°  |   0°  | +180° |\n|  03  | ![theta_3] | 0.10 | 0.00 |  +90°  | -180° |   0°  |\n|  04  | ![theta_4] | 0.18 | 0.00 |  +90°  |  -90° |  +90° |\n\n\u003c/center\u003e\n\nExample solutions for random targets, using the 4-link system described above, and another one with 2 more links added, for a total of 6 links:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=400 src=\"resources/four_links.gif\"\u003e\n  \u003cimg width=400 src=\"resources/six_links.gif\"\u003e\n\u003c/p\u003e\n\n## Building and Running\n\nFirst clone the repository and `cd` to it with\n\n``` \ngit clone http://github.com/gabrieljablonski/robotics-differential-evolution \ncd robotics-differential-evolution\n```\n\nThe main source file is [`solveRoboticSystem.go`](src/solveRoboticSystem.go). Before running, you may want to make adjustments to the robotic system (`System.AddLinks()`), the target point, and the differential evolution parameters.\n\nThe program can the be built and run with\n\n```\ngo run src/solveRoboticSystem.go [\u003coutput file\u003e]\n```\n\nThe optional `output file` parameter can be used to change the name of the output file containing the target and best agent for each generation. Make sure to run it from the same directory as the [`plot_link_generations.py`](plot_link_generations.py) script to be able to plot the results.\n\n\n[DE]: https://en.wikipedia.org/wiki/Differential_evolution\n[DH]: https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters\n\n[theta_i]: http://latex.codecogs.com/gif.latex?\\theta_i\n[theta_1]: http://latex.codecogs.com/gif.latex?\\theta_1\n[theta_2]: http://latex.codecogs.com/gif.latex?\\theta_2\n[theta_3]: http://latex.codecogs.com/gif.latex?\\theta_3\n[theta_4]: http://latex.codecogs.com/gif.latex?\\theta_4\n\n[r_i]: http://latex.codecogs.com/gif.latex?r_i\n[d_i]: http://latex.codecogs.com/gif.latex?d_i\n[alpha_i]: http://latex.codecogs.com/gif.latex?\\alpha_i\n[theta_min]: http://latex.codecogs.com/gif.latex?\\theta_{min}\n[theta_max]: http://latex.codecogs.com/gif.latex?\\theta_{max}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrieljablonski%2Finverse-kinematics-differential-evolution","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabrieljablonski%2Finverse-kinematics-differential-evolution","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrieljablonski%2Finverse-kinematics-differential-evolution/lists"}