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.5.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

liecasadi-0.0.5-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: liecasadi-0.0.5.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for liecasadi-0.0.5.tar.gz
Algorithm Hash digest
SHA256 6fe2a527d95da736ad3088bef6a5f6e8bb86e5a29eeb8f967e48247bd529582c
MD5 845e947da1c30acaa9f756992f8d9cb3
BLAKE2b-256 7b0360e2625ea8d0e8f45dce6262f7fdb230dd840dfd75a0703d8b0138636f74

See more details on using hashes here.

File details

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

File metadata

  • Download URL: liecasadi-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for liecasadi-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 23ea805f997cfb3bf648905b5b20cd2e06c8715156582c0689f095815391c9bd
MD5 45413cf08d436386228ac08bc7e711ac
BLAKE2b-256 eecf50dd74117caecc3f7de2630c276c71ce74ad5c6ef7f5a48ae46297c1bab3

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