No version for distro galactic. Known supported distros are highlighted in the buttons above.
No version for distro foxy. Known supported distros are highlighted in the buttons above.
No version for distro rolling. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.4.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/locusrobotics/fuse.git
VCS Type git
VCS Version devel
Last Updated 2021-08-24
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The fuse_core package provides the base class interfaces for the various fuse components. Concrete implementations of these interfaces are provided in other packages.

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

This package provides the base class interfaces for the various fuse components. Concrete implementations of these interfaces are provided in other packages.

Variable

Within the fuse system, a "variable" is a convenient group of one or more related scalar values. These scalars are treated as a block within the optimizer. If the variable is modeling a time-varying quatity, the an instance of the variable represents value of the state at one specific point in time. The fuse system maintains a history of variable instances, allowing measurements to involve previous states as well as the current state.

When defining a new variable type, there is a balance that must be struct between reusability and convenience. If you define a complex composite state, it is unlikely that any other available components will use that same state definition. If you make the state too granular, then more book-keeping and value lookups will be required to piece together a useful concept from many smallar scalar components.

As an example, let's consider a 3D pose consisting of a 3D position (x, y, z) and a quaternion orientation (qx, qy, qx, qw). We could define a single state for the 3D pose consisting of all 7 scalar components. Alternatively, we could define two variables types, a 3 dimension position vector and a 4 dimension quaternion. Or we could even define seven variable types, one for each dimension.

Within the fuse_core package, no concrete variables are actually created. We only define the common interface to which all types must adhere. A set of common variable types are provided in the fuse_variables package. And new variable types can be created outside the fuse stack completely. However, similar to how using common ROS messages across nodes allow for code reuse, using common variable types will allow sensor models and motion models to be shared across the community.

Constraint

A Constraint defines a cost function that is connected to one or more variables. This base class defines the required interface of all Constraint objects, and holds the ordered list of involved variable UUIDs. All other functionality is left to the derived classes to implement.

Most importantly, the implementation of the cost function is left to the derived classes, allowing arbitrarily complex sensor models to be implemented outside of the core fuse packages. The cost function must be a valid ceres::CostFunction object. Ceres provides many nice features to make implementing the cost function easier, including an automatic differentiation system. Please see the Ceres documentation for details on creating valid ceres::CostFunction objects (http://ceres-solver.org/nnls_modeling.html). In addition to the cost function itself, an optional loss function may be provided. Loss functions provide a mechanism for reducing the impact of outlier measurements on the final optimization results. Again, see the Ceres documentation for details (http://ceres-solver.org/nnls_modeling.html#lossfunction).

Transaction

A transaction is a group of variable and constraint additions and subtractions that should all be processed at the same time. This arises most often with graph edits, when you want to remove an existing constraint and replace it with one or more new constraints. You don't want the removal to happen independently of the additions. All graph operations are contained within a Transaction object so that all operations are treated equally.

CHANGELOG

Changelog for package fuse_core

0.4.2 (2021-07-20)

  • Adding roslint dependency to fuse_viz (#231)
    • Adding roslint dependency to fuse_viz
    • Silence CMP0048 warnings
  • Contributors: Tom Moore

0.4.1 (2021-07-13)

  • Support throttling serialized graph publisher (#204)
    • Change sensor proc from gtest to gmock target
    • Move ThrottledCallback to fuse_core
    • Support generic callbacks in ThrottledCallback
    • Throttle graph publishing
    • Overload getPositiveParam for ros::Duration
    • Use getPositiveParam for ros::Duration parameters
  • Use std::enable_if_t (#187)
  • Fix roslint 0.12.0 (#186) * Fix roslint 0.12.0 include_what_you_use warnings Mostly for:

    • std::move -> #include <utility>
    • std::make_shared and similar -> #include <memory>
    • Remove static string variable not permitted by roslint 0.12.0, using a test fixture where needed.
  • Remove variables on hold (#185)

    • Test variables on hold are removed when removing a variable
    • Erase variable on hold when removing variable
  • Filter out transactions older than the lag window (#173)

    • Filter out transactions older than the lag window
    • Fix expiration time computation
    • Reset the lag expiration time when the smoother is reset
    • Reorganize class variables by their mutex guard
    • Add a mutex guard for start_time_; use start_time_ as a min time in the lag expiation computation
    • Add minStamp() and maxStamp() accessors to the Transaction class
    • Use the minStamp() and maxStamp() accessors to filter and purge transactions correctly
  • Call onStop() directly if !ros::ok() in stop() (#182)

    • Call onStop() directly if !ros::ok() in stop()
    • Stop spinner before calling onStop()
  • Only call generator if motion model history empty (#181)

    • Only call generator if motion model history empty
    • Handle dt == 0 special case in motion model
    • Revert test_timestamp_manager.cpp #154
    • Add EmptySingleStamp test
  • Fix doxygen comment (#177)

  • Delay throttle no valid state message (#175) This requires rosconsole >=1.13.8.

  • Replace ignition_sensors list param with ignition field (#163)

    • Remove ignition_sensors param and use a per-sensor ignition field
  • Throttle (#162)

    • Support throttling sensor model inputs
    • Add ThrottledCallback rostest
  • Use a static Boost random UUID generator (#171)

  • Fix motion model history (#168)

    • Fix the motion model history to maintain at least the requested time interval
    • Apply a similar fix to the MessageBuffer class
  • Get positive param API change (#169) * Change getPositiveParam API In order to match the getParam and getRequiredParam, so the value is not returned, but set in an in/out argument. * Move getPositiveParam and other param related functions to parameter.h from util.h, and updated the ros/unit tests accordingly. * Fix wrapAngle2D expected range to [-Pi, +Pi) Instead of (-Pi, +Pi], and update unit test to reflect that.

  • Fix thread issue with UUID generation (#167)

    • Add a mutex lock to the random UUID generation. The STL random number generator is not thread-safe.
  • Patch Tukey loss for Ceres < 2.0.0 (#159)

    • Patch Tukey loss for Ceres < 2.0.0
    • Create ceres_macros.h header
  • Fix Unicycle2DIgnition set_pose (#154)

    • Initialize StateHistoryElement::velocity_yaw
    • Process ignition transactions individually
    • Call motion model generator with last stamp
    • Skip optimization cycle if transaction is empty
  • Add evaluate method to graph (#151)

  • Support ScaledLoss (#141)

  • Const deserialize (#148)

    • Make TransactionDeserializer::deserialize const

    * Make GraphDeserializer::deserialize const This requires the graph_loader_ to be mutable.

  • Cleanup validation checks (#139) * Add getCovarianceDiagonalParam helper This allows to load a covariance matrix from the parameter server, provided in a list with the diagonal values.

    • Add isSymmetric and isPositiveDefinite helper functions
  • Better validation of partial measurement output (#131) * Relax the default precision when validating the covariance matrix is symmetric. * Print the covariance matrix with Eigen::FullPrecision when the symmetry test fails with isApprox, so we can see the magnitude of the error.

    • Show source if validation fails
    • Changes from throwing/crashing to ROS_ERROR.
    • Add eigenvalues to non-PSD error check
    • Add disable_checks param to sensor models
  • Add fuse_loss pkg with plugin-based loss functions (#118)

  • Validate partial measurements (#125)

  • Removed the explicit \'-std=c++14\' compile flag (#119)

    • Removed the explicit \'-std=c++14\' compile flag
    • Changed the CXX_STANDARD setting to be per-target instead of global
    • Added the CXX_STANDARD_REQUIRED setting to all targets
  • Revert \"Fix build with ceres 2.0 with CMake < 3.8 (#106)\" (#120) This reverts commit 9933456ecc24ba9b649a8a2885be3f852306efee.

  • Predict jacobians per parameter block (#115)

  • fix compilation in Kinetic (#112)

  • Support ceres 2.0 in tests (#117) In Ceres 2.0 we should call AutoDifferentiate<...>(...) instead of AutoDiff<...>::Differentiate(...).

  • Fix build with ceres 2.0 with CMake < 3.8 (#106)

    • Note that while the Ceres 2.0 build completes, there may still be some lingering issues.
  • [RST-2438] Make ceres params loaders reusable (#104)

    • Moved the Ceres loadFromROS functions into reusable functions in fuse_core
    • Load solver parameters for the batch optimizer
  • [RST-1951] speed optimizations (#100)

    • Improved random UUID generator
    • Minor Eigen assignment speed improvements
  • [RST-2437] Ensure that all variables are updated by the motion model (#103)

  • Expose Ceres Solver, Problem and Covariance Options as ROS parameters (#78)

  • [RST-2427] Added a \'source\' field to the constraints. This is an API-breaking change. (#101)

  • [RST-2340] Add serialization support to fuse (#98)

  • Fix -Wall -Wextra warnings in tests (#80)

  • Stamp merged transaction (#79) Set stamp in merged transactions Otherwise, merged transactions don\'t have a stamp. The stamp used is the maximum stamp of the two transactions merged.

  • [RST-2148] Added start() and stop() methods to the MotionModel, SensorModel, and Publisher API (#75)

    • Added start() and stop() methods to the MotionModel, SensorModel, and Publisher API
    • Added the ability to clear the callback queue of the optimizer
    • Refactor the fixed-lag reset callback to use the plugins\' stop() and start() methods
  • Fix -Wall -Wextra warnings (#77)

  • Contributors: Davide Faconti, Enrique Fernandez Perdomo, Stephen Williams

0.4.0 (2019-07-12)

  • Comment unused parameters (#76) Otherwise the compilation fails with: -Werror=unused-parameter This happens with these flags: -Wall -Wextra
  • Add print method to Graph and HashGraph (#70)
  • Depend on libceres-dev instead of ceres-solver (#71)
  • Return variable UUID by const reference (#69)
  • Added a default implementation for the type() method (#67)
  • [RST-2144] Support proper Eigen memory alignment (#65)
  • [RST-2128] Added a \"reset\" service to the fixed lag smoother (#61)
  • Modified Variable class to make the UUID immutable (#55)
  • [RST-1960] Added a tangent/parameter space flag to the covariance function (#50)
  • Some minor header cleanup of fuse_core (#51)
  • [RST-1949] Added getConnectedVariables() and getConnectedConstraints() (#45)
  • [RST-1746] Remove the marginalizeVariable() methods from the Graph class. (#44)
  • [RST-1744] Added a marginal constraint class (#43)
  • [RST-1940] Added a localSize() method to the Variable class (#42)
  • [RST-1927] Update the local parameterization for the orientation variables (#41)
  • [RST-1926] Extend the local parameter definition to include Minus() (#40)
  • Contributors: Enrique Fernandez Perdomo, Enrique Fern

Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at answers.ros.org

Package Summary

Tags No category tags.
Version 0.4.2
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/locusrobotics/fuse.git
VCS Type git
VCS Version devel
Last Updated 2021-08-24
Dev Status DEVELOPED
CI status No Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The fuse_core package provides the base class interfaces for the various fuse components. Concrete implementations of these interfaces are provided in other packages.

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

This package provides the base class interfaces for the various fuse components. Concrete implementations of these interfaces are provided in other packages.

Variable

Within the fuse system, a "variable" is a convenient group of one or more related scalar values. These scalars are treated as a block within the optimizer. If the variable is modeling a time-varying quatity, the an instance of the variable represents value of the state at one specific point in time. The fuse system maintains a history of variable instances, allowing measurements to involve previous states as well as the current state.

When defining a new variable type, there is a balance that must be struct between reusability and convenience. If you define a complex composite state, it is unlikely that any other available components will use that same state definition. If you make the state too granular, then more book-keeping and value lookups will be required to piece together a useful concept from many smallar scalar components.

As an example, let's consider a 3D pose consisting of a 3D position (x, y, z) and a quaternion orientation (qx, qy, qx, qw). We could define a single state for the 3D pose consisting of all 7 scalar components. Alternatively, we could define two variables types, a 3 dimension position vector and a 4 dimension quaternion. Or we could even define seven variable types, one for each dimension.

Within the fuse_core package, no concrete variables are actually created. We only define the common interface to which all types must adhere. A set of common variable types are provided in the fuse_variables package. And new variable types can be created outside the fuse stack completely. However, similar to how using common ROS messages across nodes allow for code reuse, using common variable types will allow sensor models and motion models to be shared across the community.

Constraint

A Constraint defines a cost function that is connected to one or more variables. This base class defines the required interface of all Constraint objects, and holds the ordered list of involved variable UUIDs. All other functionality is left to the derived classes to implement.

Most importantly, the implementation of the cost function is left to the derived classes, allowing arbitrarily complex sensor models to be implemented outside of the core fuse packages. The cost function must be a valid ceres::CostFunction object. Ceres provides many nice features to make implementing the cost function easier, including an automatic differentiation system. Please see the Ceres documentation for details on creating valid ceres::CostFunction objects (http://ceres-solver.org/nnls_modeling.html). In addition to the cost function itself, an optional loss function may be provided. Loss functions provide a mechanism for reducing the impact of outlier measurements on the final optimization results. Again, see the Ceres documentation for details (http://ceres-solver.org/nnls_modeling.html#lossfunction).

Transaction

A transaction is a group of variable and constraint additions and subtractions that should all be processed at the same time. This arises most often with graph edits, when you want to remove an existing constraint and replace it with one or more new constraints. You don't want the removal to happen independently of the additions. All graph operations are contained within a Transaction object so that all operations are treated equally.

CHANGELOG

Changelog for package fuse_core

0.4.2 (2021-07-20)

  • Adding roslint dependency to fuse_viz (#231)
    • Adding roslint dependency to fuse_viz
    • Silence CMP0048 warnings
  • Contributors: Tom Moore

0.4.1 (2021-07-13)

  • Support throttling serialized graph publisher (#204)
    • Change sensor proc from gtest to gmock target
    • Move ThrottledCallback to fuse_core
    • Support generic callbacks in ThrottledCallback
    • Throttle graph publishing
    • Overload getPositiveParam for ros::Duration
    • Use getPositiveParam for ros::Duration parameters
  • Use std::enable_if_t (#187)
  • Fix roslint 0.12.0 (#186) * Fix roslint 0.12.0 include_what_you_use warnings Mostly for:

    • std::move -> #include <utility>
    • std::make_shared and similar -> #include <memory>
    • Remove static string variable not permitted by roslint 0.12.0, using a test fixture where needed.
  • Remove variables on hold (#185)

    • Test variables on hold are removed when removing a variable
    • Erase variable on hold when removing variable
  • Filter out transactions older than the lag window (#173)

    • Filter out transactions older than the lag window
    • Fix expiration time computation
    • Reset the lag expiration time when the smoother is reset
    • Reorganize class variables by their mutex guard
    • Add a mutex guard for start_time_; use start_time_ as a min time in the lag expiation computation
    • Add minStamp() and maxStamp() accessors to the Transaction class
    • Use the minStamp() and maxStamp() accessors to filter and purge transactions correctly
  • Call onStop() directly if !ros::ok() in stop() (#182)

    • Call onStop() directly if !ros::ok() in stop()
    • Stop spinner before calling onStop()
  • Only call generator if motion model history empty (#181)

    • Only call generator if motion model history empty
    • Handle dt == 0 special case in motion model
    • Revert test_timestamp_manager.cpp #154
    • Add EmptySingleStamp test
  • Fix doxygen comment (#177)

  • Delay throttle no valid state message (#175) This requires rosconsole >=1.13.8.

  • Replace ignition_sensors list param with ignition field (#163)

    • Remove ignition_sensors param and use a per-sensor ignition field
  • Throttle (#162)

    • Support throttling sensor model inputs
    • Add ThrottledCallback rostest
  • Use a static Boost random UUID generator (#171)

  • Fix motion model history (#168)

    • Fix the motion model history to maintain at least the requested time interval
    • Apply a similar fix to the MessageBuffer class
  • Get positive param API change (#169) * Change getPositiveParam API In order to match the getParam and getRequiredParam, so the value is not returned, but set in an in/out argument. * Move getPositiveParam and other param related functions to parameter.h from util.h, and updated the ros/unit tests accordingly. * Fix wrapAngle2D expected range to [-Pi, +Pi) Instead of (-Pi, +Pi], and update unit test to reflect that.

  • Fix thread issue with UUID generation (#167)

    • Add a mutex lock to the random UUID generation. The STL random number generator is not thread-safe.
  • Patch Tukey loss for Ceres < 2.0.0 (#159)

    • Patch Tukey loss for Ceres < 2.0.0
    • Create ceres_macros.h header
  • Fix Unicycle2DIgnition set_pose (#154)

    • Initialize StateHistoryElement::velocity_yaw
    • Process ignition transactions individually
    • Call motion model generator with last stamp
    • Skip optimization cycle if transaction is empty
  • Add evaluate method to graph (#151)

  • Support ScaledLoss (#141)

  • Const deserialize (#148)

    • Make TransactionDeserializer::deserialize const

    * Make GraphDeserializer::deserialize const This requires the graph_loader_ to be mutable.

  • Cleanup validation checks (#139) * Add getCovarianceDiagonalParam helper This allows to load a covariance matrix from the parameter server, provided in a list with the diagonal values.

    • Add isSymmetric and isPositiveDefinite helper functions
  • Better validation of partial measurement output (#131) * Relax the default precision when validating the covariance matrix is symmetric. * Print the covariance matrix with Eigen::FullPrecision when the symmetry test fails with isApprox, so we can see the magnitude of the error.

    • Show source if validation fails
    • Changes from throwing/crashing to ROS_ERROR.
    • Add eigenvalues to non-PSD error check
    • Add disable_checks param to sensor models
  • Add fuse_loss pkg with plugin-based loss functions (#118)

  • Validate partial measurements (#125)

  • Removed the explicit \'-std=c++14\' compile flag (#119)

    • Removed the explicit \'-std=c++14\' compile flag
    • Changed the CXX_STANDARD setting to be per-target instead of global
    • Added the CXX_STANDARD_REQUIRED setting to all targets
  • Revert \"Fix build with ceres 2.0 with CMake < 3.8 (#106)\" (#120) This reverts commit 9933456ecc24ba9b649a8a2885be3f852306efee.

  • Predict jacobians per parameter block (#115)

  • fix compilation in Kinetic (#112)

  • Support ceres 2.0 in tests (#117) In Ceres 2.0 we should call AutoDifferentiate<...>(...) instead of AutoDiff<...>::Differentiate(...).

  • Fix build with ceres 2.0 with CMake < 3.8 (#106)

    • Note that while the Ceres 2.0 build completes, there may still be some lingering issues.
  • [RST-2438] Make ceres params loaders reusable (#104)

    • Moved the Ceres loadFromROS functions into reusable functions in fuse_core
    • Load solver parameters for the batch optimizer
  • [RST-1951] speed optimizations (#100)

    • Improved random UUID generator
    • Minor Eigen assignment speed improvements
  • [RST-2437] Ensure that all variables are updated by the motion model (#103)

  • Expose Ceres Solver, Problem and Covariance Options as ROS parameters (#78)

  • [RST-2427] Added a \'source\' field to the constraints. This is an API-breaking change. (#101)

  • [RST-2340] Add serialization support to fuse (#98)

  • Fix -Wall -Wextra warnings in tests (#80)

  • Stamp merged transaction (#79) Set stamp in merged transactions Otherwise, merged transactions don\'t have a stamp. The stamp used is the maximum stamp of the two transactions merged.

  • [RST-2148] Added start() and stop() methods to the MotionModel, SensorModel, and Publisher API (#75)

    • Added start() and stop() methods to the MotionModel, SensorModel, and Publisher API
    • Added the ability to clear the callback queue of the optimizer
    • Refactor the fixed-lag reset callback to use the plugins\' stop() and start() methods
  • Fix -Wall -Wextra warnings (#77)

  • Contributors: Davide Faconti, Enrique Fernandez Perdomo, Stephen Williams

0.4.0 (2019-07-12)

  • Comment unused parameters (#76) Otherwise the compilation fails with: -Werror=unused-parameter This happens with these flags: -Wall -Wextra
  • Add print method to Graph and HashGraph (#70)
  • Depend on libceres-dev instead of ceres-solver (#71)
  • Return variable UUID by const reference (#69)
  • Added a default implementation for the type() method (#67)
  • [RST-2144] Support proper Eigen memory alignment (#65)
  • [RST-2128] Added a \"reset\" service to the fixed lag smoother (#61)
  • Modified Variable class to make the UUID immutable (#55)
  • [RST-1960] Added a tangent/parameter space flag to the covariance function (#50)
  • Some minor header cleanup of fuse_core (#51)
  • [RST-1949] Added getConnectedVariables() and getConnectedConstraints() (#45)
  • [RST-1746] Remove the marginalizeVariable() methods from the Graph class. (#44)
  • [RST-1744] Added a marginal constraint class (#43)
  • [RST-1940] Added a localSize() method to the Variable class (#42)
  • [RST-1927] Update the local parameterization for the orientation variables (#41)
  • [RST-1926] Extend the local parameter definition to include Minus() (#40)
  • Contributors: Enrique Fernandez Perdomo, Enrique Fern

Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at answers.ros.org

No version for distro ardent. Known supported distros are highlighted in the buttons above.
No version for distro bouncy. Known supported distros are highlighted in the buttons above.
No version for distro crystal. Known supported distros are highlighted in the buttons above.
No version for distro eloquent. Known supported distros are highlighted in the buttons above.
No version for distro dashing. Known supported distros are highlighted in the buttons above.
No version for distro lunar. Known supported distros are highlighted in the buttons above.
No version for distro jade. Known supported distros are highlighted in the buttons above.
No version for distro indigo. Known supported distros are highlighted in the buttons above.
No version for distro hydro. Known supported distros are highlighted in the buttons above.

Package Summary

Tags No category tags.
Version 0.4.0
License BSD
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/locusrobotics/fuse.git
VCS Type git
VCS Version kinetic-devel
Last Updated 2021-08-24
Dev Status DEVELOPED
CI status No Continuous Integration
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The fuse_core package provides the base class interfaces for the various fuse components. Concrete implementations of these interfaces are provided in other packages.

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

This package provides the base class interfaces for the various fuse components. Concrete implementations of these interfaces are provided in other packages.

Variable

Within the fuse system, a "variable" is a convenient group of one or more related scalar values. These scalars are treated as a block within the optimizer. If the variable is modeling a time-varying quatity, the an instance of the variable represents value of the state at one specific point in time. The fuse system maintains a history of variable instances, allowing measurements to involve previous states as well as the current state.

When defining a new variable type, there is a balance that must be struct between reusability and convenience. If you define a complex composite state, it is unlikely that any other available components will use that same state definition. If you make the state too granular, then more book-keeping and value lookups will be required to piece together a useful concept from many smallar scalar components.

As an example, let's consider a 3D pose consisting of a 3D position (x, y, z) and a quaternion orientation (qx, qy, qx, qw). We could define a single state for the 3D pose consisting of all 7 scalar components. Alternatively, we could define two variables types, a 3 dimension position vector and a 4 dimension quaternion. Or we could even define seven variable types, one for each dimension.

Within the fuse_core package, no concrete variables are actually created. We only define the common interface to which all types must adhere. A set of common variable types are provided in the fuse_variables package. And new variable types can be created outside the fuse stack completely. However, similar to how using common ROS messages across nodes allow for code reuse, using common variable types will allow sensor models and motion models to be shared across the community.

Constraint

A Constraint defines a cost function that is connected to one or more variables. This base class defines the required interface of all Constraint objects, and holds the ordered list of involved variable UUIDs. All other functionality is left to the derived classes to implement.

Most importantly, the implementation of the cost function is left to the derived classes, allowing arbitrarily complex sensor models to be implemented outside of the core fuse packages. The cost function must be a valid ceres::CostFunction object. Ceres provides many nice features to make implementing the cost function easier, including an automatic differentiation system. Please see the Ceres documentation for details on creating valid ceres::CostFunction objects (http://ceres-solver.org/nnls_modeling.html). In addition to the cost function itself, an optional loss function may be provided. Loss functions provide a mechanism for reducing the impact of outlier measurements on the final optimization results. Again, see the Ceres documentation for details (http://ceres-solver.org/nnls_modeling.html#lossfunction).

Transaction

A transaction is a group of variable and constraint additions and subtractions that should all be processed at the same time. This arises most often with graph edits, when you want to remove an existing constraint and replace it with one or more new constraints. You don't want the removal to happen independently of the additions. All graph operations are contained within a Transaction object so that all operations are treated equally.

CHANGELOG

Changelog for package fuse_core

0.4.0 (2019-07-12)

  • Comment unused parameters (#76) Otherwise the compilation fails with: -Werror=unused-parameter This happens with these flags: -Wall -Wextra
  • Add print method to Graph and HashGraph (#70)
  • Depend on libceres-dev instead of ceres-solver (#71)
  • Return variable UUID by const reference (#69)
  • Added a default implementation for the type() method (#67)
  • [RST-2144] Support proper Eigen memory alignment (#65)
  • [RST-2128] Added a \"reset\" service to the fixed lag smoother (#61)
  • Modified Variable class to make the UUID immutable (#55)
  • [RST-1960] Added a tangent/parameter space flag to the covariance function (#50)
  • Some minor header cleanup of fuse_core (#51)
  • [RST-1949] Added getConnectedVariables() and getConnectedConstraints() (#45)
  • [RST-1746] Remove the marginalizeVariable() methods from the Graph class. (#44)
  • [RST-1744] Added a marginal constraint class (#43)
  • [RST-1940] Added a localSize() method to the Variable class (#42)
  • [RST-1927] Update the local parameterization for the orientation variables (#41)
  • [RST-1926] Extend the local parameter definition to include Minus() (#40)
  • Contributors: Enrique Fernandez Perdomo, Enrique Fern

Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at answers.ros.org