Skip to main content

Rigid transform using Lie groups, written in CasADi!

Project description

liecasadi

liecasadi

liecasadi implements Lie groups operation written in CasADi, mainly directed to optimization problem formulation.

Inspired by A micro Lie theory for state estimation in robotics and the library Manif.

🐍 Install

Create a virtual environment, if you prefer. For example:

pip install virtualenv
python3 -m venv your_virtual_env
source your_virtual_env/bin/activate

Inside the virtual environment, install the library from pip:

pip install liecasadi

If you want the last version:

pip install "liecasadi @ git+https://github.com/ami-iit/lie-casadi.git"

Implemented Groups

Group Description
SO3 3D Rotations
SE3 3D Rigid Transform

🚀 Operations

Being:

  • $X, Y \in SO3, \ SE3$

  • $w \in \text{SO3Tangent}, \ \text{SE3Tangent}$

  • $v \in \mathbb{R}^3$

Operation Code
Inverse $X^{-1}$ X.inverse()
Composition $X \circ Y$ X*Y
Exponential $\text{exp}(w)$ phi.exp()
Act on vector $X \circ v$ X.act(v)
Logarithm $\text{log}(X)$ X.log()
Manifold right plus $X \oplus w = X \circ \text{exp}(w)$ X + phi
Manifold left plus $w \oplus X = \text{exp}(w) \circ X$ phi + X
Manifold minus $X-Y = \text{log}(Y^{-1} \circ X)$ X-Y

🦸‍♂️ Example

from liecasadi import SE3, SO3, SE3Tangent, SO3Tangent

# Random quaternion + normalization
quat = (np.random.rand(4) - 0.5) * 5
quat = quat / np.linalg.norm(quat)
# Random vector
vector3d = (np.random.rand(3) - 0.5) * 2 * np.pi

# Create SO3 object
rotation = SO3(quat)

# Create Identity
identity = SO3.Identity()

# Create SO3Tangent object
tangent = SO3Tangent(vector3d)

# Random translation vector
pos = (np.random.rand(3) - 0.5) * 5

# Create SE3 object
transform = SE3(pos=pos, xyzw=quat)

# Random vector
vector6d = (np.random.rand(3) - 0.5) * 5

# Create SE3Tangent object
tangent = SO3Tangent(vector6d)

Dual Quaternion example

from liecasadi import SE3, DualQuaternion
from numpy import np

# orientation quaternion generation
quat1 = (np.random.rand(4) - 0.5) * 5
quat1 = quat1 / np.linalg.norm(quat1)
quat2 = (np.random.rand(4) - 0.5) * 5
quat2 = quat2 / np.linalg.norm(quat2)

# translation vector generation
pos1 = (np.random.rand(3) - 0.5) * 5
pos2 = (np.random.rand(3) - 0.5) * 5

dual_quaternion1 = DualQuaternion(quat1, pos1)
dual_quaternion2 = DualQuaternion(quat2, pos2)

# from a homogenous matrix
# (using liecasadi.SE3 to generate the corresponding homogenous matrix)
H = SE3.from_position_quaternion(pos, quat).as_matrix()
dual_quaternion1 = DualQuaternion.from_matrix(H)

# Concatenation of rigid transforms
q1xq2 = dual_quaternion1 * dual_quaternion2

# to homogeneous matrix
print(q1xq2.as_matrix())

# obtain translation
print(q1xq2.translation())

# obtain rotation
print(q1xq2.rotation().as_matrix())

# transform a point
point = np.random.randn(3,1)
transformed_point = dual_quaternion1.transform_point(point)

# create an identity dual quaternion
I = DualQuaternion.Identity()

🦸‍♂️ Contributing

liecasadi is an open-source project. Contributions are very welcome!

Open an issue with your feature request or if you spot a bug. Then, you can also proceed with a Pull-requests! :rocket:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

liecasadi-0.0.3.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

liecasadi-0.0.3-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file liecasadi-0.0.3.tar.gz.

File metadata

  • Download URL: liecasadi-0.0.3.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for liecasadi-0.0.3.tar.gz
Algorithm Hash digest
SHA256 9f74953db903e9f64631393ee8786962b4c791423e5420f1d7937c50769040b6
MD5 76342ef67ca271769b71889a232e89a7
BLAKE2b-256 272035ec59924db2f9771ab6533c6e3207038d1d80170d961324bc10720f23ac

See more details on using hashes here.

File details

Details for the file liecasadi-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: liecasadi-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for liecasadi-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8810e045dbe6b365cdd7f8ef9f70d5f3306f81645a236870f5648f82b1254994
MD5 cb9e1bc13334964bc91f76e75ed9bd1f
BLAKE2b-256 756d7e069f64ee4b0cb0b2ba222c6066a2315f09d550d9de9c9a55abfe994734

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page