All Projects → wavelab → Wave_geometry

wavelab / Wave_geometry

Licence: mit
Manifold geometry with fast automatic derivatives and coordinate frame semantics checking

Projects that are alternatives of or similar to Wave geometry

Ikbt
A python package to solve robot arm inverse kinematics in symbolic form
Stars: ✭ 97 (+5.43%)
Mutual labels:  robotics, math, kinematics
Pybotics
The Python Toolbox for Robotics
Stars: ✭ 192 (+108.7%)
Mutual labels:  robotics, math, kinematics
Sophus
C++ implementation of Lie Groups using Eigen.
Stars: ✭ 1,048 (+1039.13%)
Mutual labels:  robotics, math, geometry
Rl
The Robotics Library (RL) is a self-contained C++ library for rigid body kinematics and dynamics, motion planning, and control.
Stars: ✭ 391 (+325%)
Mutual labels:  robotics, kinematics
Robotics Toolbox Python
Robotics Toolbox for Python
Stars: ✭ 369 (+301.09%)
Mutual labels:  robotics, kinematics
Hexapod
Blazing fast hexapod robot simulator for the web.
Stars: ✭ 370 (+302.17%)
Mutual labels:  robotics, kinematics
kinpy
Simple kinematics calculation toolkit for robotics
Stars: ✭ 48 (-47.83%)
Mutual labels:  robotics, kinematics
Hexapod Robot Simulator
A hexapod robot simulator built from first principles
Stars: ✭ 577 (+527.17%)
Mutual labels:  robotics, kinematics
Pinocchio
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Stars: ✭ 432 (+369.57%)
Mutual labels:  robotics, kinematics
Dart
Dynamic Animation and Robotics Toolkit
Stars: ✭ 596 (+547.83%)
Mutual labels:  robotics, kinematics
Sharpmath
A small .NET math library.
Stars: ✭ 36 (-60.87%)
Mutual labels:  math, geometry
Handeye calib camodocal
Easy to use and accurate hand eye calibration which has been working reliably for years (2016-present) with kinect, kinectv2, rgbd cameras, optical trackers, and several robots including the ur5 and kuka iiwa.
Stars: ✭ 364 (+295.65%)
Mutual labels:  robotics, kinematics
Mather
zzllrr mather(an offline tool for Math learning, education and research)小乐数学,离线可用的数学学习(自学或教学)、研究辅助工具。计划覆盖数学全部学科的解题、作图、演示、探索工具箱。目前是演示Demo版(抛转引玉),但已经支持数学公式编辑显示,部分作图功能,部分学科,如线性代数、离散数学的部分解题功能。最终目标是推动专业数学家、编程专家、教育工作者、科普工作者共同打造出更加专业级的Mather数学工具
Stars: ✭ 270 (+193.48%)
Mutual labels:  math, geometry
Quaternion
Add built-in support for quaternions to numpy
Stars: ✭ 387 (+320.65%)
Mutual labels:  robotics, math
StuyLib
Award-Winning FRC Library by StuyPulse Team 694
Stars: ✭ 17 (-81.52%)
Mutual labels:  math, robotics
Manif
A small C++11 header-only library for Lie theory.
Stars: ✭ 494 (+436.96%)
Mutual labels:  robotics, geometry
Pas Coogeo
Pas-CooGeo is coordinate geometry library for Pascal.
Stars: ✭ 25 (-72.83%)
Mutual labels:  math, geometry
Bullet3
Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.
Stars: ✭ 8,714 (+9371.74%)
Mutual labels:  robotics, kinematics
pymadcad
Simple yet powerful CAD (Computer Aided Design) library, written with Python.
Stars: ✭ 63 (-31.52%)
Mutual labels:  geometry, kinematics
SharpMath2
2D math / geometry collision library for C#, compatable with monogame.
Stars: ✭ 36 (-60.87%)
Mutual labels:  math, geometry

A manifold geometry library for robotics

Build Status Documentation

wave_geometry is a header-only C++17 library for working with rotations and transformations in robotics and computer vision applications. It differs from similar libraries by offering:

  • Fast operations using expression templates
  • Fast on-manifold automatic differentiation
  • Compile-time coordinate frame semantics checking

Source code is available under the MIT License. Documentation is available online.

If you use this library, please cite the following paper in your work:

Koppel, Leonid and Waslander, Steven L., "Manifold Geometry with Fast Automatic Derivatives and Coordinate Frame Semantics Checking in C++." In 15th Conference on Computer and Robot Vision (CRV), Toronto, ON, 2018.

@inproceedings{koppel2018manifold,
  title={Manifold Geometry with Fast Automatic Derivatives and Coordinate Frame Semantics Checking in {C++}},
  author={Koppel, Leonid and Waslander, Steven L.},
  booktitle={15th Conference on Computer and Robot Vision (CRV)},
  year={2018},
}

Features

Manifold operations Docs

wave_geometry includes operations on SO(3), the Lie group of 3D rotations, and SE(3), the group of 3D rigid transformations.

Automatic differentiation Docs

Any expression can be differentiated with respect to its variables.

wave::RotationMd R = wave::RotationMd::Random();
wave::Translationd p1 = wave::Translationd::Random();
wave::Translationd p2 = R * p1;

auto [p2, J_p2_wrt_R, J_p2_wrt_p1] = (R * p1).evalWithJacobians(R, p1);

wave_geometry computes local Jacobians, which are independent of the choice of parametrization for R (e.g., rotation matrix or quaternion), and are useful for on-manifold optimization.

Coordinate frame semantics Docs

Representing poses without confusion is notoriously difficult, and mistakes such as using a quantity expressed in the wrong coordinate frame have bogged down many a robotics project. wave_geometry provides built-in coordinate frame semantics checking.

Coordinate frame semantics checking can detect invalid operations at compile time. Consider this example:

struct BodyFrame;
struct CameraFrame;
struct WorldFrame;

wave::RotationMFd<WorldFrame, BodyFrame> r1;
wave::RotationMFd<CameraFrame, BodyFrame> r2;

// Let's get the rotation between World and Camera (maybe)
wave::RotationMFd<WorldFrame, CameraFrame> result = r1 * r2;

This code has a mistake, but is saved by semantics checking. When we try to compile it, we get the following error message (from clang 7, not showing colours):

In file included from /.../example.cpp:1:
In file included from /.../wave/geometry/geometry.hpp:54:
/.../wave/geometry/src/geometry/op/Compose.hpp:22:5: error: static_assert failed due to requirement 'std::is_same<RightFrameOf<const Framed<MatrixRotation<Matrix<double, 3, 3, 0, 3, 3> >, WorldFrame, BodyFrame> &>, LeftFrameOf<const Framed<MatrixRotation<Matrix<double, 3, 3, 0, 3, 3> >, CameraFrame, BodyFrame> &> >()' "Adjacent frames do not match"
    static_assert(std::is_same<RightFrameOf<Lhs>, LeftFrameOf<Rhs>>(),
    ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/.../wave/geometry/src/geometry/base/TransformBase.hpp:167:12: note: in instantiation of template class 'wave::Compose<const wave::Framed<wave::MatrixRotation<Eigen::Matrix<double, 3, 3, 0, 3, 3> >, WorldFrame, BodyFrame> &, const wave::Framed<wave::MatrixRotation<Eigen::Matrix<double, 3, 3, 0, 3, 3> >, CameraFrame, BodyFrame> &>' requested here
    return Compose<internal::cr_arg_t<L>, internal::cr_arg_t<R>>{lhs.derived(),
           ^
/.../example.cpp:12:60: note: in instantiation of function template specialization 'wave::operator*<wave::Framed<wave::MatrixRotation<Eigen::Matrix<double, 3, 3, 0, 3, 3> >, WorldFrame, BodyFrame>, wave::Framed<wave::MatrixRotation<Eigen::Matrix<double, 3, 3, 0, 3, 3> >, CameraFrame, BodyFrame> >' requested here
    wave::RotationMFd<WorldFrame, CameraFrame> result = r1 * r2;
                                                           ^

The corrected code below compiles successfully:

// Let's get the rotation between World and Camera (fixed)  
wave::RotationMFd<WorldFrame, CameraFrame> result = r1 * inverse(r2);

Installation

wave_geometry is a header-only library, meaning no prior compilation is required to use it in your project. It requires Eigen 3.3.2 or above, Boost 1.58 or above (header-only libraries), and a C++17 compiler.

wave_geometry can be installed with CMake: see installation instructions.

The library is in the initial development stage and the API may change at any time. See CHANGELOG.md for recent changes.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].