Package Summary
Tags | No category tags. |
Version | 8.1.1 |
License | Apache License 2.0 |
Build type | CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | General purpose math library for robot applications. |
Checkout URI | https://github.com/gazebosim/gz-math.git |
VCS Type | git |
VCS Version | gz-math8 |
Last Updated | 2025-03-20 |
Dev Status | UNKNOWN |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | math cpp robotics linear-algebra eigen gazebo hacktoberfest robotics-simulation ignition-robotics gazebosim ignition-math |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Steve Peters
- Aditya Pande
Authors
Gazebo Math : Math classes and functions for robot applications
Maintainer: scpeters AT openrobotics DOT org
Build | Status |
---|---|
Test coverage | |
Ubuntu Noble | |
Homebrew | |
Windows |
Gazebo Math, a component of Gazebo, provides general purpose math classes and functions designed for robotic applications.
Table of Contents
Features
Gazebo Math provides a wide range of functionality, including:
- Type-templated pose, matrix, vector, and quaternion classes.
- Shape representations along with operators to compute volume, density, size and other properties.
- Classes for material properties, mass, inertial, temperature, PID, kmeans, spherical coordinates, and filtering.
- Optional Eigen component that converts between a few Eigen and Gazebo Math types.
Install
See the installation tutorial.
Usage
Please refer to the examples directory.
Folder Structure
Refer to the following table for information about important directories and files in this repository.
gz-math
├── examples Example programs.
├── include/gz/math Header files.
├── src Source files and unit tests.
│ └── graph Source files for the graph classes.
│ └── python_pybind11 Pybind11 Python interfaces.
│ └── ruby SWIG Ruby interfaces.
├── eigen3 Files for Eigen component.
├── test
│ ├── integration Integration tests.
│ ├── performance Performance tests.
│ └── regression Regression tests.
├── tutorials Tutorials, written in markdown.
├── Changelog.md Changelog.
└── CMakeLists.txt CMake build script.
Contributing
Please see the contributing guide.
Code of Conduct
Please see CODE_OF_CONDUCT.md.
Versioning
This library uses Semantic Versioning. Additionally, this library is part of the Gazebo project which periodically releases a versioned set of compatible and complimentary libraries. See the Gazebo website for version and release information.
License
This library is licensed under Apache 2.0. See also the LICENSE file.
Gazebo Math 8.x
Gazebo Math 8.1.1 (2025-02-12)
- Unify
Python3_Development_FOUND
checks - Change to globbed bazel targets
- SignalStats.cc: add missing includes
- Encapsulate std::cerr under a single point of control
- ci.yml: run cppcheck, cpplint on noble
Gazebo Math 8.1.0 (2024-11-15)
- Build gz-math with bzlmod
- Add CI support for bzlmod
- Specify template for Vector2 in Vector2_TEST
- Python bindings: get version from package.xml
- Permit building python bindings separately from gz-math library
- Merge all changes from 7.5.1
Gazebo Math 8.0.0 (2024-09-25)
- Miscellaneous documentation fixes
- Fix Vector examples
- Added CoordinateVector3 and used it in SphericalCoordinates
- Clamping color channel values to within [0, 1]
- Use ImplPtr, Implement rule of zero
- Fix flaky Stopwatch test
- Line*.hh: remove unneeded use of static variable
- Fix potential unsafe initialization in the Graph class
- Remove APIs deprecated in gz-math7
- Deprecate math::clock alias
- Clean up nested namespaces
- Find python directly instead of using GzPython
- Adding cone primitives.
- Enable 24.04 CI, remove distutils dependency
- Remove HIDE_SYMBOLS_BY_DEFAULT: replace by a default configuration in gz-cmake.
- Use HIDE_SYMBOLS_BY_DEFAULT, fix MovingWindowFilter
- Dependency version bumps in ionic: use gz-cmake4, gz-utils3
- Remove ignition headers and macros
- Bump major version to 8
Gazebo Math 7.x
Gazebo Math 7.5.1 (2024-08-23)
- Fix tolerance for axis-angle conversion of quaternions
- Added box examples in C++ and Python
- Check for 0 stddev when generating a random number using normal distribution
- Clean up nested namespaces
Gazebo Math 7.5.0 (2024-06-18)
- Backport: Adding cone primitives.
- Enable 24.04 CI on harmonic
- Add package.xml
- bazel: correctly export license
- Add missing eigen3.hh header for bazel build
- Expose non-const reference to edges
Gazebo Math 7.4.0 (2024-03-14)
- Added MecanumDriveOdometry Python wrapper
- Update CI badges in README
- Infrastructure
- Suppress warnings on MSVC
- Remove the use of numeric_limits in appendToStream test
- Replace CMake Python variables with new ones from FindPython3 module
- Fix
Matrix3_TEST.py
on Windows with conda-forge dependencies - Fix small typo cppgetstarted.md
- Update Ubuntu Binary installation since apt-key is deprecated
- Update file tree in README to point out pybind11
- Update tutorial/color.md
- ign->gz in README.md
- Update example_triangle.md
Gazebo Math 7.3.0 (2023-08-29)
- Adds a validity check for Sessions created using the
TimeVaryingVolumetricGrid
- Fixes for testing in non standard architectures
- MecanumDriveOdometry to handle odometry estimation of Mecanum wheeled models
- Fix documentation on Plane.hh
- Infrastructure
- Build examples from CMake rather than executable
- Added
std::optional MassMatrix()
functions for Box, Cylinder & Sphere
Gazebo Math 7.2.0 (2023-06-14)
- Add tests to increase test coverage
- Forward ports
- Disable pybind11 on windows by default
- Add option to skip pybind11 and SWIG
- Custom PID error rate
- Garden bazel support
- Rename COPYING to LICENSE
- Infrastructure
- Fix link of installation tutorial to point to 7.1 version
Gazebo Math 7.1.0 (2022-11-15)
- Adds bounds retrieval for TimeVarying grid class.
Gazebo Math 7.0.2 (2022-09-26)
- Update to disable tests failing on arm64
Gazebo Math 7.0.1 (2022-09-23)
- Disable tests failing on arm64
Gazebo Math 7.0.0 (2022-09-22)
- Deprecated
Angle::Degree(double)
andAngle::Radian(double)
. UseAngle::SetDegree(double)
andAngle::SetRadian(double)
instead. - Added Equal functions with a tolerance parameter to Pose3 and Quaternion.
- Updates per issue #101.
- Helpers: BitBucket pull request 330, BitBucket pull request 323
- Matrix3: BitBucket pull request 328
- Pose: BitBucket pull request 329
- Quaternion: BitBucket pull request 327, BitBucket pull request 338
- Removed deprecations.
- Updated Temperature class documentation, script interface, and added examples.
- Prevent -0 with out stream operator
- Use
<ostream>
and<istream>
narrower includes, not<iostream>
- Evict large function definitions from the Helpers.hh header file.
- Defer regex construction to avoid static initialization.
- Defer Material::Predefined construction to avoid static initialization.
- Resolve cppcheck errors by adding explicit constructors and consts.
- Remove virtual from destructors of copyable classes.
- Use constexpr for simple static constants.
- Fix output stream operator
- Tutorial updates
- Fixed quaternion from euler example
- Rename the python library as gz.math7
- Add option to skip pybind11 and SWIG
- Python bindings
- Add a Time Interpolation API
- Add fluid added mass to inertial
- VolumetricGridLookupField: generalize index type, add constructor
- Drop unnecessary moving window filter pimpl
- Migrate ign -> gz
- Fix output stream operator
- Compute distance between points on a general celestial body
- Update GoogleTest to latest version
- Reduce compilation time
- Pose3: deprecate +, -, and -= operators
- Document
Pose::operator*()
- Subtraction operator for Inertial class
- Add linear interpolation methods.
- Infrastructure
- Add PiecewiseScalarField3 class
- Add AdditivelySeparableScalarField3 class
- Add Polynomial3 class
- Add Interval and Region3 classes
- Add missing headers
- [math7] Tidy up unused variables
- Use ImplPtr from ign-utils where relevant
- Modified cmake target name for Ruby interfaces
- Make API / naming consistent for Frustum, Edge, Angle
- Reduce Stopwatch test sleep times
- Speed up Helpers::Pair test
- Make Vector2 API more consistent with Vector3
- Clean up a few new GCC9 warnings
Gazebo Math 6.x
Gazebo Math 6.15.1 (2024-01-05)
- Replace CMake Python variables with new ones from FindPython3 module
- Suppress warnings on MSVC
- Infrastructure
Gazebo Math 6.15.0 (2023-09-01)
- Fixes for testing in non standard architectures
- MecanumDriveOdometry to handle odometry estimation of Mecanum wheeled models
- Infrastructure
Gazebo Math 6.14.0 (2023-04-14)
- Disable pybind11 on windows by default
- Add option to skip pybind11 and SWIG
- Custom PID error rate
- Infrastructure
Gazebo Math 6.13.0 (2022-08-31)
- Support migration and migrate headers
- Remove redundant namespace references
Gazebo Math 6.12.0 (2022-07-27)
- Added Helper function isTimeString to Python
- Ignition -> Gazebo
- Added
*.pyc
to.gitignore
- Alphabetize examples
- Add
PiecewiseScalarField3
class - Add
AdditivelySeparableScalarField3
class - Add
Polynomial3
class - Add
Region3
class - Add
Interval
class - Add Matrix6 class
- Backport newest appendToStream functions
- Use pytest to generate junit xml files for python tests
- Add Aditya as codeowner
Gazebo Math 6.11.0 (2022-05-11)
- MassMatrix3: fix bug in PrincipalAxesOffset tolerances
- Fix return policies for some member functions
- Added Ellipsoid Python interface
- Added Capsule Python interface
- Fixes for tests on i386: relax SphericalCoordinates and workaround for negative zero
- Added helper function to check if a string represents a time
- Reduce pybind11 compilation memory
Gazebo Math 6.10.0 (2022-01-26)
- Use const instead of constexpr in Ellipsoid constructor
- Refactor finding pybind11
- Fix Focal on Jenkins
- kmeans example in C++ and Python
- Small fixed in doxygen
- Added Python Getting started tutorial
- Move SWIG interfaces from Python to Ruby
- Added pybind11 interfaces for various classes
- SphericalCoordinates
- Vector3Stats
- SignalStats
- Sphere
- Frustum
- Plane
- Cylinder
- OrientedBox
- Inertial
- Matrix4
- PID
- Temperature
- DiffDriveOdometry (with examples)
- MassMatrix3
- AxisAlignedBox
- GaussMarkovProcess (with examples)
- RotationSpline
- Material
- Kmeans
- Triangle3
- Pose3
- Triangle
- Spline
- Filter
- SemanticVersion
- Matrix3
- MovingWindowFilter
- Line3
- Quaternion
- StopWatch
- RollingMean
- Line2
- Color
- Helpers
- Rand (with examples)
- Angle
- Vector2, Vector3 and Vector4
- Fix Color::HSV() incorrect hue output
- Add example and modify document for class Color
- Document that euler angles should be in radians for quaternion constructor
- Fix windows warnings in Vector2, 3 and 4
- Modified cmake target name for Ruby interfaces
- Frustrum Python interface
- quaternion_from_euler example: input degrees
- Internal URL fixed (paragraph 266)
- Added tutorials for vector, angle, triangle and rotation
- Inertial Python interface
- Box Python interfaces
- DiffDriveOdometry Python interface
- Sphere Python interface
- Plane Python interfaces
- Cylinder Python interface
- Added SphericalCoordinates Python interface
- MassMatrix3 Python interface
- AxisAlignedBox Python interface
- AxisAlignedBox: deprecate unimplemented methods
Gazebo Math 6.9.2 (2021-10-14)
- Added StopWatch Python Interface
- Fix clang warnings.
- Fixed Helpers Python templates
- Add Helpers Python interface
- Add Python interface to Triangle3
- Adds python interface to MaterialType and Material.
- Remove Cylinder::SetLength const method
Gazebo Math 6.9.1 (2021-09-30)
- Avoid assertAlmostEqual for python strings
- Pose3_TEST.py: use 0.01 (not 0) in string test
Gazebo Math 6.9.0 (2021-09-28)
- Volume below a plane for spheres and boxes
- 🌐 Spherical coordinates: bug fix, docs and sanity checks
-
Add Vector(2 3 4) ::NaN to easily create invalid vectors - Add options to install python/ruby in system standard paths
- Add eigen utils to convert mesh 3d vertices to oriented box
-
Python interface
- Adds python interface to RollingMean, Color and Spline
- Adds python interface for Kmeans and Vector3Stats
- Adds python interface to PID and SemanticVersion.
- Adds python interface to triangle.
- Adds Line2, Line3, SignalStats, Temperature python interface
- Python interface: Renames methods to match PEP8 style
- Adds python interface to Filter, MovingWindowFilter, RotationSpline.
- Adds python interface to Quaternion, Pose3, Matrix3 and Matrix4
- Basic setup for Python interface using SWIG
- 👩🌾 Don’t use std::pow with integers in Vectors and handle sqrt
- Relax expectations about zero in SpeedLimiter_TEST to make ARM happy
- Infrastructure
Gazebo Math 6.8.0 (2021-03-30)
- Add speed limiter class
- Bazel Updates for math6
- Add Equal tolerance method to Quaternion
- Fix broken link in MassMatrix3.hh
- Add instructions to build and run examples
- Infrastructure and documentation
- Remove unnecessary copy constructor declaration from Box
- Windows installation via conda-forge
- Add rule-of-five members for Angle
- Ellipsoid: new shape class with inertia calculation method
- Avoid moving a return value, it might prevent (N)RVO
- Properly handle stream errors when reading math objects
Gazebo Math 6.7.0 (2020-11-23)
- Capsule: new shape class with inertia calculation method
- Add missing header to Color.hh
- Improve tests of
Vector2
,Vector3
,Vector4
,Quaternion
, andPose3
- Pose3: document
operator*
- Quaternion: add Normalized() method
- Vector2: add Round(), Rounded() methods
- Add test for printing
inf
Vector3
Gazebo Math 6.6.0 (2020-09-16)
- Add chrono duration helper functions
Gazebo Math 6.5.0 (2020-09-04)
- Add string to time function
- Added functions to convert between time_point and secNsec
- Fix GZ_MATH_XXX_VERSION
- Add Max and Min function to Vector2.hh
- Round, Rounded, Correct, Distance(x, y, z, w) and operator< addition to Vector 4
- Sum and normalized functions for Vector4
- Vector4 Ruby tests - Vector4.i and Vector4_TEST.rb
- Vector3 to vector4 functions
- Update vector2 functions from vector3
- Add Abs, Dot and AbsDot and respective tests to Vector4
- Create abs, absDot and Correct functions for Vector2d
- Document Ruby tests
- Add header for numeric_limits allowing build on ubuntu 16.04
- Add setter/getter for Pose’s each element
- Implement AxisAlignedBox Volume function
- Add operator + for AxisAlignedBox and Vector3.
- Make alpha optional when parsing a Color from an input stream.
- GitHub actions CI and workflow updates
- Added a Gauss-Markov Process class.
- Fix bug in Inertial addition of off-diagonal moment of inertia terms with pose offsets.
- Create FAKE_INSTALL target so example compilation can be tested without doing a real install.
- Angle: BitBucket pull request 335
- Updating documentation.
- Angle: BitBucket pull request 325
- GraphAlgorithms: add ToUndirected(DirectedGraph) that copies to an UndirectedGraph.
- Doxygen fixes for graph classes
Gazebo Math 6.4.0
- Added a function that rounds up a number to the nearest multiple of another number.
Gazebo Math 6.3.0
- Added Odometry class that computes odometry for a two wheeled vehicle.
- Added RollingMean class.
Gazebo Math 6.2.0
- eigen3: Use linear() instead of rotation() to prevent computation of SVD
- Change definition of Pose3
*
operator to fix multiplication order
Gazebo Math 6.1.0
- eigen3: add conversion functions for Eigen::AlignedBox3d <=> gz::math::AxisAlignedBox
Gazebo Math 6.0.0
- Helper function that converts from
std::chrono::steady_clock::duration
to {seconds, nanoseconds}. - Upgrade to c++17.
Gazebo Math 5.x
Gazebo Math 5.x.x
Gazebo Math 5.1.0 (2019-09-11)
- GraphAlgorithms: add ToUndirected(DirectedGraph) that copies to an UndirectedGraph.
- Doxygen fixes for graph classes
- eigen3: Use linear() instead of rotation() to prevent computation of SVD
- Change definition of Pose3
*
operator to fix multiplication order - eigen3: add conversion functions for Eigen::AlignedBox3d <=> gz::math::AxisAlignedBox
Gazebo Math 5.0.0 (2018-12-12)
- Added a Stopwatch class
- Added material properties to OrientedBox
- Added a Cylinder class.
- The
Box
class has been changed to a templatized class that is not axis-aligned. The previousBox
functionality is now in theAxisAlignedBox
class. - Added eigen3 component with functions for converting between Eigen and gz-math types.
- Added a
MassMatrix3::SetFromCylinder
function that uses aMaterial
to specify a density. - Added a Sphere class.
- Added a
MassMatrix3::SetFromSphere
function that uses aMaterial
to specify a density. - Added a
MassMatrix3::SetFromBox
function that uses aMaterial
to specify a density. - Deprecated mutator functions in MassMatrix3 that lacked a
Set
prefix. - Updated the MassMatrix3::ValidMoments(), MassMatrix3::IsValid(), MassMatrix3::IsPositive(), and Inertial::SetMassMatrix functions to accept a tolerance parameter.
- Add MassMatrix3::IsNearPositive and use it in MassMatrix3::IsValid, use >= instead of > in MassMatrix3::ValidMoments
Gazebo Math 4.x
Gazebo Math 4.x.x
- Add Graph::EdgeFromVertices function that return an edge, if one exists, between two vertices.
- Added multiply assign operator to Matrix4.
- Add Plane copy constructor and fix cppcheck on artful
- Added MovingWindowFilter, a copy from Gazebo Common. This version will replace the version found in Gazebo Common.
- Added a Material class, which holds information about materials like wood, steel, and iron.
Gazebo Math 4.0.0 (2017-12-26)
- Use std::stoi and std::stod in math::parse* functions to reduce code
- Fixing const-correctness for operator* of Pose3
- Deprecate Matrix4::Translate and replace by Matrix4::SetTranslation
- Use ignition-cmake to simplify build scripts
- Make constructor SemanticVersion(string) explicit
- Switch to C++14
- Removed the box ‘extent’ field. The default constructor now sets a box’s corners to extrema in order to indicate an uninitialized box.
- Added graph utilities:
- Added a Vertex class:
- Added an Edge class:
- Added a Graph class:
- Added a GraphAlgorithms class:
- Added a function to calculate connected components in undirected graphs:
- Improved the performance of
graph::InDegree()
andgraph::IncidentsTo()
.
- Added Inline Versioned Namespace
Gazebo Math 3.x
Gazebo Math 3.x.x
Gazebo Math 3.3.0 (2017-11-27)
- Fixed frustum falsely saying it contained AABB in some cases
- Create consistent bracket operators across all Vector# types
- Change name to the generic BUILDING_DLL macro to avoid conflicts
- Fix some compiler warnings
- Suppress gtest warnings
- Move private headers to src folder
- Update configure.bat
Gazebo Math 3.2.0 (2017-05-15)
- Construct on first use in Rand class
- Extended Spline API: derivative interpolation, arc length calculation and tangent forcing.
Gazebo Math 3.1.0 (2017-04-11)
- Added signum functions to Helpers.hh.
- Contribution from Martin Pecka
- BitBucket pull request 153
Gazebo Math 3.0.0 (2017-01-05)
- Deprecate many IGN_* macros in favor of static const variables in Helpers.hh
- Removed exceptions. Return values should be evaluated to determine if errors have occurred.
- Added
operator=(const Quaternion<T> &_q)
toMatrix3
. - Fix xenial cppcheck
- Require cmake 2.8.12
- Migrate to relocatable CMake package. Contribution from Silvio Traversaro.
- Fix logic of installation of CMake configuration files in Windows. Contribution from Silvio Traversaro.
Gazebo Math 2.x
Gazebo Math 2.9 (2017-11-22)
- Fixed frustum falsely saying it contained AABB in some cases
- Added Color
- Backport updated configure.bat to gz-math2 and fix cppcheck warnings
Gazebo Math 2.8
Gazebo Math 2.8.0
- Added OrientedBox
- Added an assignment operator to the Frustum class.
Gazebo Math 2.7
Gazebo Math 2.7.0
- Add static const variables as alternative to macros in Helpers.hh
- Add new methods for floating numbers: lessOrEqual and greaterOrEqual
Gazebo Math 2.6
Gazebo Math 2.6.0
- Added copy constructor, equality operators and assignment operators to SphericalCoordinates class.
- Fix Euler angle conversion of quaternions near singularities
- Backport triangle3, helper functions, equality helper to work with 387 fp unit (Contribution from Rich Mattes).
- Added Matrix4
::LookAt - Set Inertial Rotations
- Added SemanticVersion class
Gazebo Math 2.5
Gazebo Math 2.5.0
- Added PID class
- Added SphericalCoordinate class
Gazebo Math 2.4
Gazebo Math 2.4.1
- Combine inertial properties of different objects, returning the equivalent inertial properties as if the objects were welded together.
Gazebo Math 2.4.0
- New MassMatrix3 class
- MassMatrix3 helper functions
- Added Temperature class
- A contribution from Shintaro Noda
- BitBucket pull request 113
Gazebo Math 2.3.0
- Added simple volumes formulas
- Add Length and SquaredLength for Vector2 with test
- Add Equal function with numerical tolerance argument
- First part of MassMatrix3 class, mostly accessors and modifiers
- Add Transpose methods for Matrix3,4 with test
- Multiplication improvements for Vector/Matrix classes
- Scalar +,- operators for Vector[234]
- Add Determinant method for Matrix[34]
- Fixes for compiling and running tests on Windows 7/Visual Studio 2013 Contribution from Silvio Traversaro.
Wiki Tutorials
Dependant Packages
Name | Deps |
---|---|
gz-gui9 | |
gz-launch8 | |
gz-rendering9 | |
gz-sensors9 | |
gz-sim9 |