Liecasadi - liecasadi implements Lie groups operation written in CasADi

Overview

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

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

Implemented Groups

Group Description
SO3 3D Rotations
SE3 3D Rigid Transform

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)
You might also like...
Accelerated SMPL operation, commonly used in generate 3D human mesh, STAR included.

SMPL2 An enchanced and accelerated SMPL operation which commonly used in 3D human mesh generation. It takes a poses, shapes, cam_trans as inputs, outp

A python-image-classification web application project, written in Python and served through the Flask Microframework. This Project implements the VGG16 covolutional neural network, through Keras and Tensorflow wrappers, to make predictions on uploaded images. git《Tangent Space Backpropogation for 3D Transformation Groups》(CVPR 2021) GitHub:1]
git《Tangent Space Backpropogation for 3D Transformation Groups》(CVPR 2021) GitHub:1]

LieTorch: Tangent Space Backpropagation Introduction The LieTorch library generalizes PyTorch to 3D transformation groups. Just as torch.Tensor is a m

Nicely is a real-time Feedback and Intervention Program Depression is a prevalent issue across all age groups, socioeconomic classes, and cultural identities.
Nicely is a real-time Feedback and Intervention Program Depression is a prevalent issue across all age groups, socioeconomic classes, and cultural identities.

Nicely is a real-time Feedback and Intervention Program Depression is a prevalent issue across all age groups, socioeconomic classes, and cultural identities.

Model search is a framework that implements AutoML algorithms for model architecture search at scale
Model search is a framework that implements AutoML algorithms for model architecture search at scale

Model search (MS) is a framework that implements AutoML algorithms for model architecture search at scale. It aims to help researchers speed up their exploration process for finding the right model architecture for their classification problems (i.e., DNNs with different types of layers).

Implements Gradient Centralization and allows it to use as a Python package in TensorFlow
Implements Gradient Centralization and allows it to use as a Python package in TensorFlow

Gradient Centralization TensorFlow This Python package implements Gradient Centralization in TensorFlow, a simple and effective optimization technique

Implements MLP-Mixer: An all-MLP Architecture for Vision.
Implements MLP-Mixer: An all-MLP Architecture for Vision.

MLP-Mixer-CIFAR10 This repository implements MLP-Mixer as proposed in MLP-Mixer: An all-MLP Architecture for Vision. The paper introduces an all MLP (

QueryFuzz implements a metamorphic testing approach to test Datalog engines.
QueryFuzz implements a metamorphic testing approach to test Datalog engines.

Datalog is a popular query language with applications in several domains. Like any complex piece of software, Datalog engines may contain bugs. The mo

This repository implements and evaluates convolutional networks on the Möbius strip as toy model instantiations of Coordinate Independent Convolutional Networks.
This repository implements and evaluates convolutional networks on the Möbius strip as toy model instantiations of Coordinate Independent Convolutional Networks.

Orientation independent Möbius CNNs This repository implements and evaluates convolutional networks on the Möbius strip as toy model instantiations of

Comments
  • Problems running the example

    Problems running the example

    I tried installing the library as documented in the README and running the example.

    By installing the example as documented in the README:

    (castest) [email protected]:~$ pip install "liecasadi @ git+https://github.com/ami-iit/lie-casadi.git"
    Collecting liecasadi@ git+https://github.com/ami-iit/lie-casadi.git
      Cloning https://github.com/ami-iit/lie-casadi.git to /tmp/pip-install-jld36pa2/liecasadi_02974e872e9a41da95da2ba742a2bb6a
      Running command git clone --filter=blob:none --quiet https://github.com/ami-iit/lie-casadi.git /tmp/pip-install-jld36pa2/liecasadi_02974e872e9a41da95da2ba742a2bb6a
      Resolved https://github.com/ami-iit/lie-casadi.git to commit 4f538f354781243e600ce771c9236a43df83745d
      Installing build dependencies ... done
      Getting requirements to build wheel ... done
      Preparing metadata (pyproject.toml) ... done
    Collecting numpy>=1.20
      Using cached numpy-1.22.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.8 MB)
    Collecting casadi
      Using cached casadi-3.5.5-cp38-none-manylinux1_x86_64.whl (34.2 MB)
    Building wheels for collected packages: liecasadi
      Building wheel for liecasadi (pyproject.toml) ... done
      Created wheel for liecasadi: filename=liecasadi-0.1.dev39-py3-none-any.whl size=7882 sha256=078ab323d4479d39e5aa0a577a6150df54d9224d416b94c89d26adc5db0616be
      Stored in directory: /tmp/pip-ephem-wheel-cache-v0j9nv_a/wheels/7a/26/6a/62ad9ab4f348e178408f7d79d44555ed51514496949fcdb644
    Successfully built liecasadi
    Installing collected packages: casadi, numpy, liecasadi
    Successfully installed casadi-3.5.5 liecasadi-0.1.dev39 numpy-1.22.1
    

    You can see that casadi got installed via pip.

    Then, I tried to run the example and the example fails with:

    (castest) [email protected]:~/liecasadi/examples$ python manifold_optimization.py
    Traceback (most recent call last):
      File "manifold_optimization.py", line 4, in <module>
        import matplotlib.pyplot as plt
    ModuleNotFoundError: No module named 'matplotlib'
    

    This is due to matplotlib missing, and it make sense that this is not part of the dependencies of the library. If I then install matplot lib, then the example fails with:

    (castest) [email protected]:~/liecasadi/examples$ python manifold_optimization.py
    Traceback (most recent call last):
      File "manifold_optimization.py", line 9, in <module>
        from liecasadi import SO3, SO3Tangent
      File "/home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages/liecasadi/__init__.py", line 3, in <module>
        from .so3 import SO3, SO3Tangent
      File "/home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages/liecasadi/so3.py", line 9, in <module>
        from attr import field
    ModuleNotFoundError: No module named 'attr'
    

    This is a bit more tricky, as it requires to install the attrs package (note the final s, as the attr package will not work).

    After installing also attr, I get this error:

    (castest) [email protected]:~/liecasadi/examples$ python manifold_optimization.py
    Traceback (most recent call last):
      File "manifold_optimization.py", line 21, in <module>
        opti.subject_to(quat[k + 1] == (vector_SO3 + rotation_SO3).as_quat())
      File "/home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages/casadi/casadi.py", line 28146, in subject_to
        ret = self._subject_to(*args)
      File "/home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages/casadi/casadi.py", line 27470, in _subject_to
        return _casadi.Opti__subject_to(self, *args)
    RuntimeError: Error in Opti::subject_to [OptiNode] at .../casadi/core/optistack.cpp:96:
    .../casadi/core/optistack_internal.cpp:905: Assertion "!g.is_constant()" failed:
    You passed a constant to `subject_to`. You need a symbol to form a constraint.
    

    Furthermore, even if I did not reached this point, I noticed that the example refers ma27 (https://github.com/ami-iit/liecasadi/blob/c79d29e87d6d654e78d258a10bac9b2bbae35773/examples/manifold_optimization.py#L47), but by following the instruction of the repo casadi gets installed by pip, and I do not think that that version of casadi has hsl support enabled.

    Environments in which I run the tests:

    (castest) [email protected]:~/liecasadi/examples$ mamba list
    # packages in environment at /home/traversaro/mambaforge/envs/castest:
    #
    # Name                    Version                   Build  Channel
    _libgcc_mutex             0.1                 conda_forge    conda-forge
    _openmp_mutex             4.5                       1_gnu    conda-forge
    attrs                     21.4.0                   pypi_0    pypi
    ca-certificates           2021.10.8            ha878542_0    conda-forge
    casadi                    3.5.5                    pypi_0    pypi
    cycler                    0.11.0                   pypi_0    pypi
    fonttools                 4.29.1                   pypi_0    pypi
    kiwisolver                1.3.2                    pypi_0    pypi
    ld_impl_linux-64          2.36.1               hea4e1c9_2    conda-forge
    libffi                    3.4.2                h7f98852_5    conda-forge
    libgcc-ng                 11.2.0              h1d223b6_12    conda-forge
    libgomp                   11.2.0              h1d223b6_12    conda-forge
    libnsl                    2.0.0                h7f98852_0    conda-forge
    libstdcxx-ng              11.2.0              he4da1e4_12    conda-forge
    libzlib                   1.2.11            h36c2ea0_1013    conda-forge
    liecasadi                 0.1.dev39                pypi_0    pypi
    matplotlib                3.5.1                    pypi_0    pypi
    ncurses                   6.3                  h9c3ff4c_0    conda-forge
    numpy                     1.22.1                   pypi_0    pypi
    openssl                   3.0.0                h7f98852_2    conda-forge
    packaging                 21.3                     pypi_0    pypi
    pillow                    9.0.0                    pypi_0    pypi
    pip                       22.0.2             pyhd8ed1ab_0    conda-forge
    pyparsing                 3.0.7                    pypi_0    pypi
    python                    3.8.12          h0744224_3_cpython    conda-forge
    python-dateutil           2.8.2                    pypi_0    pypi
    python_abi                3.8                      2_cp38    conda-forge
    readline                  8.1                  h46c0cb4_0    conda-forge
    setuptools                60.6.0           py38h578d9bd_0    conda-forge
    six                       1.16.0                   pypi_0    pypi
    sqlite                    3.37.0               h9cd32fc_0    conda-forge
    tk                        8.6.11               h27826a3_1    conda-forge
    wheel                     0.37.1             pyhd8ed1ab_0    conda-forge
    xz                        5.2.5                h516909a_1    conda-forge
    zlib                      1.2.11            h36c2ea0_1013    conda-forge
    (castest) [email protected]:~/liecasadi/examples$ pip list --verbose
    Package         Version   Location                                                             Installer
    --------------- --------- -------------------------------------------------------------------- ---------
    attrs           21.4.0    /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    casadi          3.5.5     /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    cycler          0.11.0    /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    fonttools       4.29.1    /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    kiwisolver      1.3.2     /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    liecasadi       0.1.dev39 /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    matplotlib      3.5.1     /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    numpy           1.22.1    /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    packaging       21.3      /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    Pillow          9.0.0     /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    pip             22.0.2    /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages
    pyparsing       3.0.7     /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    python-dateutil 2.8.2     /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    setuptools      60.6.0    /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages
    six             1.16.0    /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages pip
    wheel           0.37.1    /home/traversaro/mambaforge/envs/castest/lib/python3.8/site-packages
    
    opened by traversaro 6
  • Fix manifpy test dependency

    Fix manifpy test dependency

    In order to check the correctness of the computations, I wrote some tests against Manif.

    It seems manifpy cannot be installed via PyPI. However, they provide installation instruction in https://github.com/artivis/manif/blob/devel/docs/pages/python/Quick-start.md.

    Although I can install the library using conda on my system, I'm not able to move the same logic in a workflow. manifpy seems to be installed but it is not found:

    ModuleNotFoundError: No module named 'manifpy'
    

    Am I doing something wrong?

    @traversaro @GiulioRomualdi do you have any suggestions?

    opened by Giulero 4
  • Remove `R_from_rpy(rpy)` method

    Remove `R_from_rpy(rpy)` method

    The method was badly implemented. Moreover, it's not really useful (it should be ok to call SO3.from_euler(rpy).as_matrix().

    • changed from_angle to from_euler
    • implemented to_euler
    opened by Giulero 1
Releases(v0.0.4)
  • v0.0.4(Nov 21, 2022)

    What's Changed

    • Remove R_from_rpy(rpy) method and add from/to Euler methods by @Giulero in https://github.com/ami-iit/liecasadi/pull/6

    Full Changelog: https://github.com/ami-iit/liecasadi/compare/v0.0.3...v0.0.4

    Source code(tar.gz)
    Source code(zip)
  • v0.0.3(Oct 12, 2022)

    What's Changed

    • Add quaternion derivative by @Giulero in https://github.com/ami-iit/liecasadi/pull/4
    • Add dual quaternion class by @Giulero in https://github.com/ami-iit/liecasadi/pull/5

    Full Changelog: https://github.com/ami-iit/liecasadi/compare/v0.0.2...v0.0.3

    Source code(tar.gz)
    Source code(zip)
  • v0.0.2(May 18, 2022)

    What's Changed

    • Deploy library on PyPi by @Giulero in https://github.com/ami-iit/liecasadi/pull/3

    Full Changelog: https://github.com/ami-iit/liecasadi/compare/v0.0.1...v0.0.2

    Source code(tar.gz)
    Source code(zip)
  • v0.0.1(Feb 16, 2022)

Owner
Artificial and Mechanical Intelligence
Artificial and Mechanical Intelligence
The openspoor package is intended to allow easy transformation between different geographical and topological systems commonly used in Dutch Railway

Openspoor The openspoor package is intended to allow easy transformation between different geographical and topological systems commonly used in Dutch

7 Aug 22, 2022
Fuwa-http - The http client implementation for the fuwa eco-system

Fuwa HTTP The HTTP client implementation for the fuwa eco-system Example import

Fuwa 2 Feb 16, 2022
Music Classification: Beyond Supervised Learning, Towards Real-world Applications

Music Classification: Beyond Supervised Learning, Towards Real-world Applications

104 Dec 15, 2022
a morph transfer UGATIT for image translation.

Morph-UGATIT a morph transfer UGATIT for image translation. Introduction 中文技术文档 This is Pytorch implementation of UGATIT, paper "U-GAT-IT: Unsupervise

55 Nov 14, 2022
Deepface is a lightweight face recognition and facial attribute analysis (age, gender, emotion and race) framework for python

deepface Deepface is a lightweight face recognition and facial attribute analysis (age, gender, emotion and race) framework for python. It is a hybrid

Kushal Shingote 2 Feb 10, 2022
Matlab Python Heuristic Battery Opt - SMOP conversion and manual conversion

SMOP is Small Matlab and Octave to Python compiler. SMOP translates matlab to py

Tom Xu 1 Jan 12, 2022
Code for A Volumetric Transformer for Accurate 3D Tumor Segmentation

VT-UNet This repo contains the supported pytorch code and configuration files to reproduce 3D medical image segmentaion results of VT-UNet. Environmen

Himashi Amanda Peiris 114 Dec 20, 2022
Pytorch code for "State-only Imitation with Transition Dynamics Mismatch" (ICLR 2020)

This repo contains code for our paper State-only Imitation with Transition Dynamics Mismatch published at ICLR 2020. The code heavily uses the RL mach

20 Sep 08, 2022
PyTorch-centric library for evaluating and enhancing the robustness of AI technologies

Responsible AI Toolbox A library that provides high-quality, PyTorch-centric tools for evaluating and enhancing both the robustness and the explainabi

24 Dec 22, 2022
Implement A3C for Mujoco gym envs

pytorch-a3c-mujoco Disclaimer: my implementation right now is unstable (you ca refer to the learning curve below), I'm not sure if it's my problems. A

Andrew 70 Dec 12, 2022
Multi-Output Gaussian Process Toolkit

Multi-Output Gaussian Process Toolkit Paper - API Documentation - Tutorials & Examples The Multi-Output Gaussian Process Toolkit is a Python toolkit f

GAMES 113 Nov 25, 2022
This repo includes the CUB-GHA (Gaze-based Human Attention) dataset and code of the paper "Human Attention in Fine-grained Classification".

HA-in-Fine-Grained-Classification This repo includes the CUB-GHA (Gaze-based Human Attention) dataset and code of the paper "Human Attention in Fine-g

16 Oct 29, 2022
Spam your friends and famly and when you do your famly will disown you and you will have no friends.

SpamBot9000 Spam your friends and family and when you do your family will disown you and you will have no friends. Terms of Use Disclaimer: Please onl

DJ15 0 Jun 09, 2022
nnFormer: Interleaved Transformer for Volumetric Segmentation

nnFormer: Interleaved Transformer for Volumetric Segmentation Code for paper "nnFormer: Interleaved Transformer for Volumetric Segmentation ". Please

jsguo 610 Dec 28, 2022
Two-stage CenterNet

Probabilistic two-stage detection Two-stage object detectors that use class-agnostic one-stage detectors as the proposal network. Probabilistic two-st

Xingyi Zhou 1.1k Jan 03, 2023
Semi-supevised Semantic Segmentation with High- and Low-level Consistency

Semi-supevised Semantic Segmentation with High- and Low-level Consistency This Pytorch repository contains the code for our work Semi-supervised Seman

123 Dec 30, 2022
Wandb-predictions - WANDB Predictions With Python

WANDB API CI/CD Below we capture the CI/CD scenarios that we would expect with o

Anish Shah 6 Oct 07, 2022
Official Implementation of DDOD (Disentangle your Dense Object Detector), ACM MM2021

Disentangle Your Dense Object Detector This repo contains the supported code and configuration files to reproduce object detection results of Disentan

loveSnowBest 51 Jan 07, 2023
MoveNet Single Pose on OpenVINO

MoveNet Single Pose tracking on OpenVINO Running Google MoveNet Single Pose models on OpenVINO. A convolutional neural network model that runs on RGB

35 Nov 11, 2022