robotkinematicscatalogue 1.1.2
Closed-form Inverse Kinematic Solutions, Forward Kinematics, and Trajectory Generation in one repository

# A catalogue of robot kinematics
<!-- 
Static badges can be made using link: https://shields.io/badges/static-badge 
To make a proper badge, use the following as an example:
- badgeContent: Open_in_Visual_Studio_Code-blue
- logo: [either use https://simpleicons.org/ or a base64-converted image]
- labelColor: grey
base64-converter : https://www.base64-image.de/
 -->

<!-- Visual studio code badge -->
![Static Badge](https://img.shields.io/badge/Open_in_Visual_Studio_Code-blue?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAAEAAgMAAAAhHED1AAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAJUExURRqCxB6ExTep8qK6FBgAAAACdFJOU%2F4Bi6sxnQAACh5JREFUeNrFm8%2BqG7kSxj8XGIrsva8RXDjoKUyYxSyb4B6yDPMkiuBAof3sE0FAqae8i2672261T8sN93qRTezfqa9KKv2rQr%2Fzg6Zv%2F222D%2BDNfu0BXPDJ7N8dgDNg9nMHAIB%2FNAFNCoBPZr9fBnQAyB5MQJsLQPZgAtpcALIHE9DmAsAeTECbCwaAvb8EwAT4vRcwMwGNCkZAeQFwngMmE9Co4AoozYDLPeA2rdHoghvAWgHnR8CvRgAeAdYGuCwBv5oA5yXAdgN%2BNgBuCuYAawB0VcDP7YBzFWDbAagDfm8FXFYAdtoI6NYAvzYCzmuA3xsBWAPYNkC3Dvj3fwPAOuAX2oL4GqB7AviNtiC%2BBsBOwOUZwNDoglcA552AewX%2FD8B5LwA7AZe9gG4v4LwXgJ2Ay15Atxdw3glYKGgFdHsB570A7ARc9gK6vYDzXgB2Ai6bAefDVhesAJw7blRQB3xxTjYqqAP%2BiuxO2xTUAeocHzcFsQ74W1T0xzYXVAGfnePIp00uqAL%2BYVHV900uqAEuqhp5GYeqCw4VQCeRnehCQ9WAYwXwlzonGh%2FHUl1BXwFIlMiRo2wAHCqAizrWKCp62qCgAuhEHTuOTt4%2FDmJfAfzDUSJHifx9g4IKgBxH5ziyu4vDua5gCbj8CFEiiXN8N5ZWFCwBX4g1skYJkQ4fuOBQA3x2Ik7EsROdxaFbUbAE%2FBVZlVWdROb35y7oa4BvEokkEjuO8seHCpYAjqwa2Tmez%2BnLmoIlQDQEkSgsIUxjaVVBxQJxHB1HiY71FodVBTULopMojkWUrvNhXcESQMRMzCoaRa%2FrQ7eqoBJGdfIjCrEoR6Y%2FVl1wWAF8JonkWDWS4yjhtOaC4wrgq0RWdiKqiOz4fc0F%2FQqgU1GJQizkWII7rLjgsAa4cCRW1sgqkR30VHfBcQ3QC0tElCEzisZj3QX9KuCzqKhyZJagLPL9qYJaTozEQwSiQ%2BTIp%2B6JglpWFhVRBHHMToKE92cKausCEUeo4xBF2bFDK%2BCrBFHHkYVJogR9pqAG6NSxBGGJosR1C07PAD3xuDCwqISaBbNsWwN8iyyRBgw7lvBEQRXQSWRRkShBJEjkJwqqgL9ZQiSOzIMF8kRBFdATMUsQiSIhhMhhXUEd8E0lsuPIxK5mwukjQEcskSBRIiIWTrjbSFcBF4ks6phZHDuWEFYV1AE9sQRiiRIRQogsqwpWAOcQnEQWHnxwr%2BH%2BKFAHXMQhskSSEBHpfiwdNwB6DioRoszimIlWFawBzkIEjUQSIVFE1xSsAbooyiKiLBqZGKERcGEmiUQIESIqyisK1gB9CErM4lgc33ux3wb4zCQSIoQQWDAF8rgR0EEQHByJciSHKHUFq4CLI8dQBCawQHhFwSqgB4Mc1IloJMfB1RWsA74GDVCAABYENwbytBnQMZyDqjon5AhjIPvNgJ4coAACSCBKCDUFTwBnOAfnHKuSIwyj%2BdQA%2BOIADYCABMGBpKbgCeACVrBqUIVycEI1BU8APQdywBDOwOAgFQXPAGcSOOdEFcxBA9UUPAUMFhCgITBYpREAN1jACubgBCSnNieCdWYBOaFDC6ADAk0%2BcAKSpjCegeuieLNAWgYSALCqqioYwQlQ07AKuAC4JgENyiDnqGUynQFAbxZEJ4Cwnip1HCsJZfaJCADVB%2FNqSsPMB8LknICElhcj60l19qHBApBsT6rjDl9VVeNoAQsiHzYCsLSAQQKEbYDbISeyRBam4RwK0UcNK1HoHi0QMIMY0OMmC26HHOecc8JEHAYfEDYBsPQBayAAkC0bjOmcR4MPoBpA4ljdw1iq%2B%2BD8aIEC1yXeYYMF8x9zdMJgCWCJLPFBQ32jiUcLIjBtFh82mr6y1b2zQEIYBAxjInJ49IFPuYz%2FDIDHkypJBKhhs333a5YoALGMf18if7TdXx7WIwtmO73wAeBhHA%2FxY4ZIZAmRea7B%2B7IALA7rzCIhCGHIk4FXD13FULmvCGEYxAEhElgQcA8oDwfP2kmTiAC5%2BfXu4FmsXD91gAiCAERgCAvxfCz55UCq%2FHkwQghAEAIBxM8O34sgHjG4AMJAABgB4bQ%2BGxcK%2BjMChEc%2Fitxv1%2BwujMWwCOKh74ZxTBAeBjTztEj6hzCgrxy0mcCEIACDCQJM2yUzs2Tms%2Fls3gyXyl0FwMN2W8AQQgi4jaWFD7rKQbsLYzBmcalfRPkl4DjOLoKAMZ18rnHwlu4IONduWyB8NUBEmBCmy7hkxXwyn80nM3sEDJZ%2BHufyMCkCGLgukgsfVK8KOoBonhHolpfsA8Djpe6VIVf2BxbcLmXp%2BmPmYaGaXcpOjLwAHO%2B2CwQZt14BRIMGn8ys3AZ0Wrnx6oaZOJ%2Fjs4vpbBPkPgqHxesAT04c%2FneRD871y47Jh7PMdJpFwVcBlecBntlxHKKQb3PZ8v1Qnj9QEBHGyxi5xvP2QJFtUJIfZuPxoyeSU9%2Fn8piRVi47Pn6k8UMYZ988bHkm8lZuTsgPOfG4%2FaGq3EyYZ%2BVNT2V%2B%2FNN5tGG2Lhy2PDf25u9WNsP0zW3PhX7K6EMYp29ufbD0ZpbS1RG4ueuw%2Bcl0nA55DOP1m8dtj7Y%2BmaVhbbA8OHH8ZuuzcX7YIx02Plz72Si0NNulbX86T4P14%2Fpw2ydufbz3fjTAm6XRB31XvexYLx%2BY5aR03StvLmC4%2BiDZbSD1ff8nthaBYHDBEMnyShGHN0s5Z7PkzVvKzWUk5ZZO8muFLL6MTvRmJZdXSmmSt1TydSw2F%2FNMI9G%2FWE40LgzFiiXzqbmgyVvKli1ZHox4uaTKj5mxuajLF%2FN5lhY%2FKiurj4NiVkqxUiw1F7b5aVHIWyxYltblYpby3ZGnScM4lZN5s5Qsv1BeOM6CUopdT64tTvB%2BWJvSnhJLf9tnfRyFhRO85XGBT7ZhIFXKTMttXShWtpSZdoso5KsPsm2IwqJSdljX8rTBaNTg7W34%2FZuZveV2wDSNkiWz0lzw7M1SKeb94Ia39pLrkoc9ZjazlNqLvv2wMOfBkG1F349l50NONvNW7Gdz4fuwLhRLwzbnV3Pp%2FXSHkix5e98EOD%2Fkg5JTsmzeykvdAyl5s1KG1HbaBLgsomDjeNYXWjBKsZKTT9mSvf1ubwK5HXm8mbf39jaUnIY5MMymFxphvJm3t5yyWc7fX2jF8WXMSdnMTi80A3mfLQ%2F51Dc0A921IyXLyZs3O20HTE7weTwxlKE5rrmj6s3eLCcr1964rYBunpGs5FTyexNgaksbJVyb85ob424S%2FtMI6O6GcvJvfSPgMhsHKU%2F9iS%2B0J3pv3t76ZsDohLds2cy%2F0CDZTSkt51daNC%2FT2ujt%2BAJgdELJlsqsuLm5UdYP7WyvA8y%2FlXnPdGuzMNK9Ac3tyrByZ0B7w3ROdwY0t2yTvzeguWn8U7HT64Az4He1rV%2BAXE47AD0%2B2fd%2BD%2BCLLSr02wCVz38BAsLPCsjFS4gAAAAASUVORK5CYII%3D&labelColor=grey)
![Static Badge](https://img.shields.io/badge/Python-%233776AB?logo=python&logoColor=%233776AB&labelColor=grey) <!-- Python badge -->
![Static Badge](https://img.shields.io/badge/SciPy-%238CAAE6?logo=scipy&labelColor=grey) <!-- SciPy badge -->
![Static Badge](https://img.shields.io/badge/NumPy-%23013243?logo=numpy&logoColor=%23013243&labelColor=grey) <!-- NumPy badge -->
![Static Badge](https://img.shields.io/badge/SymPy-%233B5526?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAACXBIWXMAAAlgAAAJYAEdJQwFAAAAGFBMVEVHcEw2USxRjTxkeVTe1I62sX58u0qFeVrmaorsAAAABHRSTlMA%2Ff6D8AGYsAAABZhJREFUaN7tmMtv4zYQxh0IxV5DpbHOZFHu1Yn7OAeg5HMAPc4iLOasbLj89%2FvNUPIDkRJ5c6yJdrEtxB%2B%2FeXBm6NXquq7ruq7ruq5r8dp%2BcX8I4Svbv4XS7MJm86v7%2F%2FWmEYd1sTFJ8L0QqXM1lnMKjLuLjg843XVl4fbGOGfy2tkLEDj%2BSei6M7mLqzQA1U6IzcLjyyfhStpplcYfmiG566y4XXS82WF%2Fgc1WCQlPKB2F7HMnSUTyyfHGCA3rrRInK9XOEqHl%2F%2Fogd7wxeb%2FucJ4UKT7NAq0IISHslnaO8Bsdb0zvoF%2FSlhA8%2Fx%2BThzLvEVbtqpoItzPy8Wlp8nRf8%2F6M9JgmMnbe5FIMYXFy2n0lfW6etLGIuvge9YyICpB%2BPQDslITEk%2BA89F1hZYr95rB8BInAgA6RnUqqpMybgHNggSP9ZUWmHyBNH6om5f1OajkJgM4QmnVJeUvpAEFNPByozFdVg0jURe2UnnJjUsaD1jkD2G5fRglNwHYCpK4mCc7NAuDDQlG6HD0A54WqigDEoaD76cQsoO8cghjeRvGD%2Bgi4FTGtrWs3UwBC4AyNLHgzeVOdqB8AD3o%2BkKygNKl7oTTKqnP1A%2BAGgVSaKHczJuRpR3kc8hDKU%2FUDIFlTEKeTEYAc%2BbruCt2KjLSH%2Fmw7AVZwgiIfdGJSAaWBK%2BBjjmJWVe8ACVVKN2tCE5DuuLKiJ0CYAIDA1badduIuPKcOZbTN3g6AcA6gjkVF%2BsfUXQAgpA53wYnfR8B5GMdv71bffmynosAA1JMWiTACqvcAbl2TYWx6uDlHQW1FWvJWX10GCHThkArOIpv8R4DJPIATuKFVlrKVEfEa%2BllAkmy326OCHABtu87VLiKGVJwHrDZbispmTOVATtCVM6ZgRrTjIwAk%2FENiN%2FE2NlS9ld4Xhtoh94c%2FPwastn%2F9jRIBsbF8o4tQ6ewM9WWyxIr7CGj8nAk5bMd35VA%2BqI9ROy26ypUVEciV5Mc5E7a1yfd5W1I5gBP6gYBw1pgPaDZggJ91Yuy97Vg%2FMyG4IduXF2QlEVqKhZ%2F1AQj2u%2Bta3AV2AiQIpXg6%2BInJgmeLe75UkwDa7ywIbSxpOXfjVCll9Sswe%2FKmzeYB8MHjI75WgwkG8xX1c8WLjCu6wkk%2FByAf%2FqEkvm0PvXRHRohxP%2FnHtfezCuBECJBSSboL%2BKd5M01GBBEJ1lWQIKpm3gd3sDklQDSB%2Fj0hWF2jyrV%2BBpCA8JhimhkBO8%2BhyF55NEI87WuHKmfvUVlmFDzQp7gNdBfQj2NG932QTEA0fzpEMmv8fD3Y8hA1pDIHk9wQhvFMq70hJ3xYUJIRsHvj%2FSU7MuMSbtV%2Bz4H8uCINgONMgnvZUzwpq5FLCOQnJe2BwkjNLTb1oaz3dLk7g0zIFtTEaIEZGNzaGm5le7MUMI5m7AlSgAo1mCCWAHYngGhC40VMZrtEQYmW7vlKngCeh5FkkYIAAsUBrigHH1TPSMauXmYCaoEHAVe3PCiontcAdHqZD0yICALkR4Dqaq0yvwTABSkCzhQAsMiEWFXhCP5rdgDQ6Pe5guNk6WM0w%2BhEpy06D9Ly9pPnWsUXiWbuEQCHPuvYZ7Pw6csxGV4nJtY2AGi%2BeY5PBPS%2BBc%2FGrfAnQ3bG80185yi57OGKAlAdrlPgdkQFgQDLnq039NgaXmrDkIUgUNtY%2BO5dcXEb7GAAfKgsEGLhy%2FtBHBGxHkA%2BraVv95vhrUt2UC%2BigkQK5OLH%2F%2BG5nAHABQ0%2BkGrJw%2F1cwvG9DAmpXOqCUwnDdk0%2BkBf8ApKkhzc%2Fn877l1twagTZr1TKgIt%2Bw3kYNKQcP3mpAHaDHAEYHODBywRER8oISKWUS3%2B%2Bedev2QL6y%2B3q8pU8jKH4lfPPrsWXfhTcJMn1Z9Xruq7ruq7%2Fz%2FoP9tzxMVpAO%2BMAAAAASUVORK5CYII%3D&labelColor=grey)  <!-- SymPy badge -->
![Static Badge](https://img.shields.io/badge/MatPlotLib-orange?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiBzdHJva2U9IiM3NzciIGZpbGwtb3BhY2l0eT0iLjgiPgo8cGF0aCBmaWxsPSIjRkZGIiBkPSJtNjMsMWE2Myw2MyAwIDEsMCAyLDB6bTAsMTRhNDksNDkgMCAxLDAgMiwwem0wLDE0YTM1LDM1IDAgMSwwCjIsMHptMCwxNGEyMSwyMSAwIDEsMCAyLDB6bTAsMTRhNyw3IDAgMSwwIDIsMHptNjQsN0gxbTEwOC00NS05MCw5MG05MCwwLTkwLTkwbTQ1LTE4djEyNiIvPgo8cGF0aCBmaWxsPSIjRjYwIiBkPSJtNTAsOC0yMCwxMCA2OCw5MiAxMC0xMEw2NCw2NHoiLz4KPHBhdGggZmlsbD0iI0ZDMCIgZD0ibTE3LDUwdjI4TDY0LDY0eiIvPgo8cGF0aCBmaWxsPSIjN0Y3IiBkPSJtNjQsNjQgNiwzNUg1OHoiLz4KPHBhdGggZmlsbD0iI0NGMyIgZD0ibTY0LDY0IDEzLTQwIDksNXoiLz4KPHBhdGggZmlsbD0iIzA0RiIgZD0ibTY0LDY0IDE0LTYgMSw0emwtMjYsMTMgMyw0eiIvPgo8L3N2Zz4%3D&labelColor=grey)  <!-- MatPlotLib badge -->

 <!-- Badges concerning statistics of the repository -->
![GitHub Created At](https://img.shields.io/github/created-at/SaltworkerMLU/RobotKinematicsCatalogue)
![GitHub contributors](https://img.shields.io/github/contributors/SaltworkerMLU/RobotKinematicsCatalogue)
![GitHub last commit](https://img.shields.io/github/last-commit/SaltworkerMLU/RobotKinematicsCatalogue)
![GitHub commit activity](https://img.shields.io/github/commit-activity/y/SaltworkerMLU/RobotKinematicsCatalogue)
![GitHub License](https://img.shields.io/github/license/SaltworkerMLU/RobotKinematicsCatalogue)

***In the branch "RobotKinematicsMaths" lies a comprehensive guide on how the used Robot Kinematics have been derived.***

<!--
## Get started

```
$ pip install robotkinematicscatalogue
```
-->

## Class UML diagram of repository

![image](figures/robotKinematicsCatalogue.png)


# Introduction
This repository is an attempt to assemble the many aspects of robot kinematics into one repository - a catalogue. Ideally, this entails the repository being able to do robot kinematics on *any* industrial manipulator (robotic arm).

As of now, the repository is able to do forward kinematics (FK) on pretty much any robotic arm and inverse kinematics (IK) using most of the commercially available types of robotic arms such as:

- 6 degrees of freedom (6DOF) robots
    - Industrial robots (IK has flaws, go to branch "RobotKinematicsMaths" for details)
        - Includes 7DOF industrial robots (FK only)
        - Includes 5DOF industrial robots
    - "Collaborative" robots
- 4 degrees of freedom (4DOF) robots
    - Palletizing robots
    - SCARA robots
    - 3D delta robots (Made using: https://github.com/tinkersprojects/Delta-Kinematics-Library)

**This repository also includes a way to do symbolic FK, which is particularly useful for less complex robotic arms such a those with 1DOF, 2DOF, and even 3DOF. Anymore than that most likely provides results too large to be readable symbolically.**

<!--
## A to-do list
1. Expand range of compatible robotic arms
    - Add 3D & 2D delta robots
    - Make IK work for all types of industrial robots
    - Add 7DOF robots IK
2. Include more aspects of robot kinematics
    - Jacobians and singularity analysis
    - Numerical IK solver for *any* type of robotic arm
    - Robot dynamics
3. Refine code
-->

# How to use example files

![Static Badge](https://img.shields.io/badge/Tested_using_RoboDK-white?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAAEAAgMAAAAhHED1AAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAMUExURUdwTAI0WP3%2B%2FnaRpOXRQ8IAAAABdFJOUwBA5thmAAAACXBIWXMAAHUtAAB1LQGdFw%2BUAAAJDElEQVR42s1bu27kNhTdgTHllP4Ul0H8CVOYEqDYcuUiqrZJEQaxv0KfoEISFFcqF56fYLlIlUbBlm6M7DriQ3xcPkQNsUGIxb7GOnN57rlX5OXlhw%2F%2F7%2FEjQij%2F5%2BzHf0Bi3J71%2BAXSxinx%2BTMQwPObEazntyIQ8dT7%2B%2FtX8dd8y%2FNX%2FJFvHRvPZKsvduyBx04ObsX1tgm8ddp43jSJvfW8QDhu8MBjB8aneE9QBsvOGmMsj9SAvHMMEmnClU2AouE2zoCyc44xygTqgskN0Ec5Yv4h3HnGMH%2B49vzBw6Dk8eMKwKVhQD8H0%2FubYcLNKoXKgP6Vx%2BH9pJtwWqOwWH74ReWCb8v%2FNWs0EuWCT3o2eVSOyFfiuNQY1wZWWrgOq3DSok8fgso2rEZJYU8gQD5JGoMzwEq1YJRyatfrM3hGjvG20Hgb8EGmItcaYna13w9yBgNyDrw2h1lFAQOkCX4tXYoZeAxYTKi98bD8BPEB5Au%2Bl4IpaID4gt4X01diBqMfoBRzuPU4sVgSl3dMPCRzTyoQHwdGIeLh5ExmeZhCRSNxknDFZ9ii4Kg4S7dOCvAKhZLGwUmCoICEAXLB88mhgjxiBmIOxBEOe27duAYgfuroCAQcMQMxh8ERDpyC1RnwOfR2OAgKmnWAwk3CgQdCvQ4gfu6jJaNiLQ70eGgsKV2yuQ0xAJhxdWNxGOVE6UjIouCQxADkLhYPDDeKAk7CCFjcMw6HOADMWDw6OGziAEoHiwRFqkAqAUQ0ZwZFDs6i6YQsLhBUONSGGw5bOOTh0Bhu2DNmx1iAkn3b0XDCFCujRUq94QbuBIS2sGi4gWF6Oby3lkwVcMNOzMovXceib9TcsGO8jqHgsVlsNADuhDqUw0ZLi7obrtikgm%2BCwWKx1ZIS82IfohwyPJl%2BJCjghJmC3rKvMv3I5tT4Y4%2BUUGUF40wtLcqAE0pq2wQo5g%2BcDC%2F6ndBQx9eWG5QfD8yLxAtQ09%2FGB6iNQcbjnnLS%2BzNgTU1ufoZuaKUQrvg%2FvQCEmtxUBLihl0K4ROH1rQAYYTRIIVzmAS8%2BSIAW%2BpHc6DLwefEvCdBBP0ohMACPF%2FOBAZQUYAR%2BXAC4jjxeLAcs3FgZNOWakriOfCoYCvrNuBsn09OaknaUUp8Mqrak3zxLeTKnydLUtdKRTwZTn9G4m6cIXF0pJe0dSU%2Bb6vzreWJ%2FGGYyq49KiI33FUL4djEDC5BCSZEJcfTmw5qntBKsAkslxcvcDzA%2FPPJFPAaJrVRSJAEd0e%2FmxldgN8IeypUQSeAlyDiGm%2FJcSZFPx7%2BiYxkxs8oSDI4r2S9EsYd5epUVDENJDdPyjnvE%2F07p5cvBmMO0aJkpuQ28U%2BhDRWeVVqpFywxgCG3X55JqqdfT5PQ4wIFj%2BXe61D5Vnao1gJbl5b1fyViVn2R97NXQ8jEMUCnmMosDDcCrZN3sCRY3mHqOLBh9Sl6%2BtZPLjHnW76%2FapywcL3MfQKkzz2lsSumHbIkmBkBCHLbqXzS2R%2BVjDuCNpUk5QcaF4pEZfrNEc5DDUeFlmpaWeEY%2BgAxoh2bBsiO40wCQiOY%2BxOEyv9nmtujnP4i0aAwCYCj%2FqWvxTMBikQTwRfNkOIGZNOCZ0KnW4lkAtCEOlXpNgIoDXPgAMjuHYBvgxBNS61sim3u5zAa49ucTDJxAxxdK4lQbGcULMHVWHkV3RavcuAIgc1BraoP%2BAgCVM59knatCnXUvb70iqQ0AFJ0RSppdbRwAtp0wD0LV84sBcPAATA4nIPQ645IHDeAjBxj9HJqB%2BiWfOWlksAUAMvtNQsffTE4GwJ5HlcXhy5vrmICKCCsLaF73APy%2B0GjSMz2jvBtiACQNI6D2D4m5CuAq7%2BmF5zBAPhub2Xteve4bBmBCt7ej0RbwDTd27VjjLOAb7sLSaLQFfHWaWZ9EW8BFmFtv3VgLlrMM65UVa8H82fMs5Xrq0XkWFB19hc37pPZMCwr6LfM2DTdnWoD54rLB47oFznxQ8Q33UNQu90YklIrvVoeCuOKrtgEaN0D7kyVxegiL7Jxoc8XE0N6tFAUpwC4EgFYBPO%2BFhQP3JgoC4PMBvC%2FXxY3O902D1t%2FOi5ASAJiUG%2FdOFALYS5y7JZicADUy1kiuRdavs8jom6l2pnoA4Frm%2FbYklNoFQJCxzHOtVKslpY0u9RC0utSdiEiqjWsBjSIARp7WyzgAe7nfNfwYBA%2BOdUOPwHLf3nDQKGJb%2FqldA8idWx5as8nnarYrHPOnrwhseexN1%2FJCwsFTm9zYtdWAqF6wZD%2F3ROC2z954ihLto3MvhWu48bS3vsyHL9%2FcJ1cSQG597c231slia1km6sDufSOAXYCozA4iD4AsQNgZResmaoIAg6cIEwegFWHgxhF0IIFosspAFxBA70dqVwBOoVLY3efPf371A8hSWKgY59qS28U4UA5kL2A1rHi2y4GgIAlauqCU7u2CJCiJYrsZzYhiuyQKirKRAFpRFpSFIwG0sjAoTK8AOArToDQeCaCVxkFxfsULjuJ88HgglFLlQZM4rtg0MqVkcERy%2Fw4G8RY75RGJfkiTO7sS3dUBeUijHxM5miO9e0p5TKQfVBU2QO2RgTqo0o%2FKcCSAcVSmH9ZFApiHdfpxYSSAeVyoH1hGApgHlvqRaSSAeWSqH9pGAoBDW%2B3YOBIAHBtrB9eRAODgWjs6jwOAR%2Bfa4X0cADy83wnI6IFhF0e4gcHtBKOPJLmFIrmJI7mN5CB6UyKH3ciS3EqT3MyT3k7EG5rGeA5hQ1NyS1VyU1dyW1lyY1t6ax1v7utiVWA3921sLxyt9sLkBkfRYtnHBYKjxTK9yTO5zTS50XVjq%2B33aPZNbjdObni%2BMOuVARV5Wq6Tm77T2843NL5ff5%2FW%2B%2FTm%2F%2BTrB8kXIJKvYKRfAkm%2BhqIuwtiTiLoIQ%2BdQha%2Fi9OGrOMmXgZKvI6VfiEq%2BkgUuhT3Tnee05VJY%2BrW05ItxlMY86Wpe8uXA5OuJ6Rckk69opl8STb6mmn5RVlzVfQL2b7iqu1wWFka88PS06eL2ktGeVEVx03Xl9AvTyVe20y%2BNp19bT784z67uU2%2Bcf3X%2Fvxn%2FAtILvIcLIIzkAAAAAElFTkSuQmCC&logoColor=white&labelColor=grey) <!-- Tested using RoboDK badge --> 
![Static Badge](https://img.shields.io/badge/RoboDK--API-white?logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAAEAAgMAAAAhHED1AAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAMUExURUdwTAI0WP3%2B%2FnaRpOXRQ8IAAAABdFJOUwBA5thmAAAACXBIWXMAAHUtAAB1LQGdFw%2BUAAAJDElEQVR42s1bu27kNhTdgTHllP4Ul0H8CVOYEqDYcuUiqrZJEQaxv0KfoEISFFcqF56fYLlIlUbBlm6M7DriQ3xcPkQNsUGIxb7GOnN57rlX5OXlhw%2F%2F7%2FEjQij%2F5%2BzHf0Bi3J71%2BAXSxinx%2BTMQwPObEazntyIQ8dT7%2B%2FtX8dd8y%2FNX%2FJFvHRvPZKsvduyBx04ObsX1tgm8ddp43jSJvfW8QDhu8MBjB8aneE9QBsvOGmMsj9SAvHMMEmnClU2AouE2zoCyc44xygTqgskN0Ec5Yv4h3HnGMH%2B49vzBw6Dk8eMKwKVhQD8H0%2FubYcLNKoXKgP6Vx%2BH9pJtwWqOwWH74ReWCb8v%2FNWs0EuWCT3o2eVSOyFfiuNQY1wZWWrgOq3DSok8fgso2rEZJYU8gQD5JGoMzwEq1YJRyatfrM3hGjvG20Hgb8EGmItcaYna13w9yBgNyDrw2h1lFAQOkCX4tXYoZeAxYTKi98bD8BPEB5Au%2Bl4IpaID4gt4X01diBqMfoBRzuPU4sVgSl3dMPCRzTyoQHwdGIeLh5ExmeZhCRSNxknDFZ9ii4Kg4S7dOCvAKhZLGwUmCoICEAXLB88mhgjxiBmIOxBEOe27duAYgfuroCAQcMQMxh8ERDpyC1RnwOfR2OAgKmnWAwk3CgQdCvQ4gfu6jJaNiLQ70eGgsKV2yuQ0xAJhxdWNxGOVE6UjIouCQxADkLhYPDDeKAk7CCFjcMw6HOADMWDw6OGziAEoHiwRFqkAqAUQ0ZwZFDs6i6YQsLhBUONSGGw5bOOTh0Bhu2DNmx1iAkn3b0XDCFCujRUq94QbuBIS2sGi4gWF6Oby3lkwVcMNOzMovXceib9TcsGO8jqHgsVlsNADuhDqUw0ZLi7obrtikgm%2BCwWKx1ZIS82IfohwyPJl%2BJCjghJmC3rKvMv3I5tT4Y4%2BUUGUF40wtLcqAE0pq2wQo5g%2BcDC%2F6ndBQx9eWG5QfD8yLxAtQ09%2FGB6iNQcbjnnLS%2BzNgTU1ufoZuaKUQrvg%2FvQCEmtxUBLihl0K4ROH1rQAYYTRIIVzmAS8%2BSIAW%2BpHc6DLwefEvCdBBP0ohMACPF%2FOBAZQUYAR%2BXAC4jjxeLAcs3FgZNOWakriOfCoYCvrNuBsn09OaknaUUp8Mqrak3zxLeTKnydLUtdKRTwZTn9G4m6cIXF0pJe0dSU%2Bb6vzreWJ%2FGGYyq49KiI33FUL4djEDC5BCSZEJcfTmw5qntBKsAkslxcvcDzA%2FPPJFPAaJrVRSJAEd0e%2FmxldgN8IeypUQSeAlyDiGm%2FJcSZFPx7%2BiYxkxs8oSDI4r2S9EsYd5epUVDENJDdPyjnvE%2F07p5cvBmMO0aJkpuQ28U%2BhDRWeVVqpFywxgCG3X55JqqdfT5PQ4wIFj%2BXe61D5Vnao1gJbl5b1fyViVn2R97NXQ8jEMUCnmMosDDcCrZN3sCRY3mHqOLBh9Sl6%2BtZPLjHnW76%2FapywcL3MfQKkzz2lsSumHbIkmBkBCHLbqXzS2R%2BVjDuCNpUk5QcaF4pEZfrNEc5DDUeFlmpaWeEY%2BgAxoh2bBsiO40wCQiOY%2BxOEyv9nmtujnP4i0aAwCYCj%2FqWvxTMBikQTwRfNkOIGZNOCZ0KnW4lkAtCEOlXpNgIoDXPgAMjuHYBvgxBNS61sim3u5zAa49ucTDJxAxxdK4lQbGcULMHVWHkV3RavcuAIgc1BraoP%2BAgCVM59knatCnXUvb70iqQ0AFJ0RSppdbRwAtp0wD0LV84sBcPAATA4nIPQ645IHDeAjBxj9HJqB%2BiWfOWlksAUAMvtNQsffTE4GwJ5HlcXhy5vrmICKCCsLaF73APy%2B0GjSMz2jvBtiACQNI6D2D4m5CuAq7%2BmF5zBAPhub2Xteve4bBmBCt7ej0RbwDTd27VjjLOAb7sLSaLQFfHWaWZ9EW8BFmFtv3VgLlrMM65UVa8H82fMs5Xrq0XkWFB19hc37pPZMCwr6LfM2DTdnWoD54rLB47oFznxQ8Q33UNQu90YklIrvVoeCuOKrtgEaN0D7kyVxegiL7Jxoc8XE0N6tFAUpwC4EgFYBPO%2BFhQP3JgoC4PMBvC%2FXxY3O902D1t%2FOi5ASAJiUG%2FdOFALYS5y7JZicADUy1kiuRdavs8jom6l2pnoA4Frm%2FbYklNoFQJCxzHOtVKslpY0u9RC0utSdiEiqjWsBjSIARp7WyzgAe7nfNfwYBA%2BOdUOPwHLf3nDQKGJb%2FqldA8idWx5as8nnarYrHPOnrwhseexN1%2FJCwsFTm9zYtdWAqF6wZD%2F3ROC2z954ihLto3MvhWu48bS3vsyHL9%2FcJ1cSQG597c231slia1km6sDufSOAXYCozA4iD4AsQNgZResmaoIAg6cIEwegFWHgxhF0IIFosspAFxBA70dqVwBOoVLY3efPf371A8hSWKgY59qS28U4UA5kL2A1rHi2y4GgIAlauqCU7u2CJCiJYrsZzYhiuyQKirKRAFpRFpSFIwG0sjAoTK8AOArToDQeCaCVxkFxfsULjuJ88HgglFLlQZM4rtg0MqVkcERy%2Fw4G8RY75RGJfkiTO7sS3dUBeUijHxM5miO9e0p5TKQfVBU2QO2RgTqo0o%2FKcCSAcVSmH9ZFApiHdfpxYSSAeVyoH1hGApgHlvqRaSSAeWSqH9pGAoBDW%2B3YOBIAHBtrB9eRAODgWjs6jwOAR%2Bfa4X0cADy83wnI6IFhF0e4gcHtBKOPJLmFIrmJI7mN5CB6UyKH3ciS3EqT3MyT3k7EG5rGeA5hQ1NyS1VyU1dyW1lyY1t6ax1v7utiVWA3921sLxyt9sLkBkfRYtnHBYKjxTK9yTO5zTS50XVjq%2B33aPZNbjdObni%2BMOuVARV5Wq6Tm77T2843NL5ff5%2FW%2B%2FTm%2F%2BTrB8kXIJKvYKRfAkm%2BhqIuwtiTiLoIQ%2BdQha%2Fi9OGrOMmXgZKvI6VfiEq%2BkgUuhT3Tnee05VJY%2BrW05ItxlMY86Wpe8uXA5OuJ6Rckk69opl8STb6mmn5RVlzVfQL2b7iqu1wWFka88PS06eL2ktGeVEVx03Xl9AvTyVe20y%2BNp19bT784z67uU2%2Bcf3X%2Fvxn%2FAtILvIcLIIzkAAAAAElFTkSuQmCC&logoColor=white&labelColor=grey)
 <!-- RoboDK-API badge -->
 
Using the python program "IK_Validate.py", any robot which has an attached inverse Kinematics method to it may have its IK solution be validated. It is recommended to do this before further use in case any bugs occur.

Using RoboDK, it is possible to visualize the obtained IK solutions and to compare results as multiple sources of error can occur. This is where "IK_Validate_RoboDK.py" comes into play.

### Install RoboDK using the link: https://robodk.com/download

The RoboDK-API for python can be installed using cmd:
```
$ pip install robodk
```

### RoboDK robot Library link: https://robodk.com/library

The used data has been obtained via. the above link by opening the files of each robot model in RoboDK and inspecting their "parameters", such as DHM-parameters and joint range, needed to simulate each of these robots. 

As of now, the kinematics-related data of *all* of the accessible 7DOF, 6DOF, 5DOF, and 4DOF (excluding delta robots) robots via the above link have been imported including:
- 26 7DOF robots
- 903 6DOF robots
    - 121 "collaborative" robots
    - 782 industrial robots
- 13 5DOF robots (12 industrial robots and 1 PPPRR robot)
- 4DOF robots
    - 34 palletizing robots
    - 108 SCARA robots
    - <del> 25 delta robots </del>
- Misc.
    - A couple 1DOF & 2DOF rotational mechanisms
    - A couple 1DOF, 2DOF, and 3DOF translational mechanisms

This list excludes robots with 2 arms (dual wielding robots).

All the data of each of these robots are available in the subfolders "robotkinematicscatalogue/inversekinematics/.../".

<!--
### The Robot catalogue

| Robot name | File name (.py) | Degrees of Freedom | Notes |
| - | - | - | - |
| ABB IRBP L300 L1250 | ABB_IRBP_L300_L1250 |  1 (R) | Doesn't have IK algorithm
| ABB IRBP 4004 Standard 20m | ABB_IRBP_4004_Standard_20m | 1 (P) | Doesn't have IK algorithm
| Motoman MSR-355 | Motoman_MSR_355 | 1 (R) | Doesn't have IK algorithm
| ABB IRBP A250 D1000 | ABB_IRBP_A250_D1000 | 2 (RR) | Doesn't have IK algorithm
| ABB IRBP A500 D1000 H700 | ABB_IRBP_A500_D1000_H700 | 2 (RR) | Doesn't have IK algorithm
| ABB IRBP A500 D1000 H900 | ABB_IRBP_A500_D1000_H900 | 2 (RR) | Doesn't have IK algorithm
| ABB IRBP A500 D1450 H700 | ABB_IRBP_A500_D1450_H700 | 2 (RR) | Doesn't have IK algorithm
| ABB IRBP A500 D1450 H900 | ABB_IRBP_A500_D1450_H900 | 2 (RR) | Doesn't have IK algorithm
| ABB IRBP A500 D1450 H900 | ABB_IRBP_A500_D1450_H900 | 2 (RR) | Doesn't have IK algorithm>

-->

## Test results

Out of all the imported robots from the RoboDK robot Library, the robots with the most pitfalls, in terms of IK, is the 6DOF industrial robots (go to branch "RobotKinematicsMaths" for details). The comments put in the file "robotkinematicscatalogue/inversekinematics/industrialRobots.py" go through these pitfalls. Other types of robots to pay attention to, in terms of such pitfalls are palletizing robots and collaborative robots (go to "robotkinematicscatalogue/inversekinematics/ ... .py" for details).

The intended result of using "IK_Validate_RoboDK.py" on a SCARA, palletizing, "collaborative", and industrial robot 5 times on each can be seen below:

![image](figures/IK_Validate_Adept_Cobra_s800.jpg)
![image](figures/IK_Validate_ABB_IRB_260.jpg)
![image](figures/IK_Validate_KUKA_KR3_R540.jpg)
![image](figures/IK_Validate_UR5.jpg)