{"id":48963590,"url":"https://github.com/gbionics/liecasadi","last_synced_at":"2026-04-18T03:00:55.832Z","repository":{"id":40245685,"uuid":"449721107","full_name":"gbionics/liecasadi","owner":"gbionics","description":"Rigid transform using Lie groups and Dual Quaternions, written in CasADi! ","archived":false,"fork":false,"pushed_at":"2025-07-15T08:29:02.000Z","size":99,"stargazers_count":87,"open_issues_count":0,"forks_count":9,"subscribers_count":18,"default_branch":"main","last_synced_at":"2026-01-30T02:49:17.130Z","etag":null,"topics":["casadi","dual-quaternions","lie-algebra","lie-groups","optimization","python","robotics"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gbionics.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-01-19T14:19:15.000Z","updated_at":"2026-01-29T02:42:12.000Z","dependencies_parsed_at":"2023-11-29T16:51:49.155Z","dependency_job_id":"da8acf6c-9b04-4ad7-80c0-8282d27d6e25","html_url":"https://github.com/gbionics/liecasadi","commit_stats":null,"previous_names":["gbionics/liecasadi","ami-iit/liecasadi"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/gbionics/liecasadi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbionics%2Fliecasadi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbionics%2Fliecasadi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbionics%2Fliecasadi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbionics%2Fliecasadi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gbionics","download_url":"https://codeload.github.com/gbionics/liecasadi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gbionics%2Fliecasadi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31954736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"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":["casadi","dual-quaternions","lie-algebra","lie-groups","optimization","python","robotics"],"created_at":"2026-04-18T03:00:40.977Z","updated_at":"2026-04-18T03:00:55.819Z","avatar_url":"https://github.com/gbionics.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# liecasadi\n\n[![liecasadi](https://github.com/ami-iit/liecasadi/actions/workflows/tests.yml/badge.svg)](https://github.com/ami-iit/liecasadi/actions/workflows/tests.yml)\n\n`liecasadi` implements Lie groups operation written in CasADi, mainly directed to optimization problem formulation.\n\nInspired by [A micro Lie theory for state estimation in robotics](https://arxiv.org/pdf/1812.01537.pdf) and the library [Manif](https://github.com/artivis/manif).\n\n## 🐍 Install\n\n### Conda\n\nCreate a [conda environment](https://github.com/robotology/robotology-superbuild/blob/master/doc/conda-forge.md)\n```\nconda create -n liecasadienv\n```\nand install the library \n```\nconda install liecasadi\n```\n\n### Pip\nCreate a [virtual environment](https://docs.python.org/3/library/venv.html#venv-def), if you prefer. For example:\n\n```bash\npip install virtualenv\npython3 -m venv your_virtual_env\nsource your_virtual_env/bin/activate\n```\n\nInside the virtual environment, install the library from pip:\n\n```bash\npip install liecasadi\n```\n\nIf you want the last version:\n\n```bash\npip install \"liecasadi @ git+https://github.com/ami-iit/lie-casadi.git\"\n```\n\n## Implemented Groups\n\n| **Group** | Description        |\n| --------- | ------------------ |\n| SO3       | 3D Rotations       |\n| SE3       | 3D Rigid Transform |\n| S1        | Circle (1D angle)  |\n\n### 🚀 Operations\n\n\nBeing:\n\n- $X, Y \\in SO3, \\ SE3, \\ S1$\n\n- $w \\in \\text{SO3Tangent}, \\ \\text{SE3Tangent}, \\ \\text{S1Tangent}$\n\n- $v \\in \\mathbb{R}^3$\n\n| Operation           |                                       |     Code      |\n| :------------------ | :-----------------------------------: | :-----------: |\n| Inverse             |               $X^{-1}$                | `X.inverse()` |\n| Composition         |              $X \\circ Y$              |     `X*Y`     |\n| Exponential         |            $\\text{exp}(w)$            | `phi.exp() `  |\n| Act on vector       |              $X \\circ v$              |  `X.act(v)`   |\n| Logarithm           |            $\\text{log}(X)$            |   `X.log()`   |\n| Manifold right plus | $X \\oplus  w = X \\circ \\text{exp}(w)$ |   `X + phi`   |\n| Manifold left plus  | $w \\oplus X = \\text{exp}(w) \\circ X$  |   `phi + X`   |\n| Manifold minus      |  $X-Y = \\text{log}(Y^{-1} \\circ X)$   |     `X-Y`     |\n\n## 🦸‍♂️ Example\n\n```python\nfrom liecasadi import SE3, SO3, SE3Tangent, SO3Tangent\n\n# Random quaternion + normalization\nquat = (np.random.rand(4) - 0.5) * 5\nquat = quat / np.linalg.norm(quat)\n# Random vector\nvector3d = (np.random.rand(3) - 0.5) * 2 * np.pi\n\n# Create SO3 object\nrotation = SO3(quat)\n\n# Create Identity\nidentity = SO3.Identity()\n\n# Create SO3Tangent object\ntangent = SO3Tangent(vector3d)\n\n# Random translation vector\npos = (np.random.rand(3) - 0.5) * 5\n\n# Create SE3 object\ntransform = SE3(pos=pos, xyzw=quat)\n\n# Random vector\nvector6d = (np.random.rand(3) - 0.5) * 5\n\n# Create SE3Tangent object\ntangent = SO3Tangent(vector6d)\n```\n\n### Dual Quaternion example\n\n```python\nfrom liecasadi import SE3, DualQuaternion\nfrom numpy import np\n\n# orientation quaternion generation\nquat1 = (np.random.rand(4) - 0.5) * 5\nquat1 = quat1 / np.linalg.norm(quat1)\nquat2 = (np.random.rand(4) - 0.5) * 5\nquat2 = quat2 / np.linalg.norm(quat2)\n\n# translation vector generation\npos1 = (np.random.rand(3) - 0.5) * 5\npos2 = (np.random.rand(3) - 0.5) * 5\n\ndual_quaternion1 = DualQuaternion(quat1, pos1)\ndual_quaternion2 = DualQuaternion(quat2, pos2)\n\n# from a homogenous matrix\n# (using liecasadi.SE3 to generate the corresponding homogenous matrix)\nH = SE3.from_position_quaternion(pos, quat).as_matrix()\ndual_quaternion1 = DualQuaternion.from_matrix(H)\n\n# Concatenation of rigid transforms\nq1xq2 = dual_quaternion1 * dual_quaternion2\n\n# to homogeneous matrix\nprint(q1xq2.as_matrix())\n\n# obtain translation\nprint(q1xq2.translation())\n\n# obtain rotation\nprint(q1xq2.rotation().as_matrix())\n\n# transform a point\npoint = np.random.randn(3,1)\ntransformed_point = dual_quaternion1.transform_point(point)\n\n# create an identity dual quaternion\nI = DualQuaternion.Identity()\n```\n\n## 🦸‍♂️ Contributing\n\n**liecasadi** is an open-source project. Contributions are very welcome!\n\nOpen an issue with your feature request or if you spot a bug. Then, you can also proceed with a Pull-requests! :rocket:\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgbionics%2Fliecasadi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgbionics%2Fliecasadi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgbionics%2Fliecasadi/lists"}