![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.2.3 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | rolling |
Last Updated | 2025-05-30 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.2.3 (2025-05-24)
1.2.2 (2025-04-26)
-
- Added dependencies in required CMakeLists.txt and package.xml files
- Added ament_cmake_ros and gtest_vendor dependencies
* Removed duplicate package depends, alphabetized lists See https://www.linkedin.com/posts/open-source-robotics-foundation_were-looking-for-half-a-dozen-new-open-activity-7317690134764605440-jm3h/ Author: KB1110 <<kartikbakshi10@gmail.com>>
-
Fix build and linter warnings (#405)
-
Update callback_wrapper.hpp (#397) Fix build failure on ROS 2 Rolling by adding a required override for get_timers() in CallbackAdapter. In ROS 2 Rolling, rclcpp::Waitable introduced a new pure virtual method get_timers() const. Since CallbackAdapter inherits from Waitable and did not implement this method, it remained abstract and could not be instantiated, causing the build to fail. This adds a simple override that returns an empty vector, as CallbackAdapter does not use timers. This resolves the abstract class instantiation error.
-
Port fix for Issue 300 from ROS 1 into ROS 2 (#404) Handle prior on last stamp (#323)
- Added unit test to illustrate the bug from Issue 300
- Move where the input variables are updated to the motion model values to ensure that transactions that involve only a single timestamp are correctly handled
- Contributors: KB1110, Stephen Williams, Surabhi Gade
1.2.1 (2024-09-21)
-
Fix CallbackWrapper class for the Rolling release
- Update for changes to the ROS2 Waitable base class
* implement pure virtual waitable functions as in https://github.com/ros2/system_tests/pull/548 Author: Henry Moore <<henry.moore@picknik.ai>>
-
Contributors: Stephen Williams
1.2.0 (2024-05-02)
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.2.3 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | rolling |
Last Updated | 2025-05-30 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.2.3 (2025-05-24)
1.2.2 (2025-04-26)
-
- Added dependencies in required CMakeLists.txt and package.xml files
- Added ament_cmake_ros and gtest_vendor dependencies
* Removed duplicate package depends, alphabetized lists See https://www.linkedin.com/posts/open-source-robotics-foundation_were-looking-for-half-a-dozen-new-open-activity-7317690134764605440-jm3h/ Author: KB1110 <<kartikbakshi10@gmail.com>>
-
Fix build and linter warnings (#405)
-
Update callback_wrapper.hpp (#397) Fix build failure on ROS 2 Rolling by adding a required override for get_timers() in CallbackAdapter. In ROS 2 Rolling, rclcpp::Waitable introduced a new pure virtual method get_timers() const. Since CallbackAdapter inherits from Waitable and did not implement this method, it remained abstract and could not be instantiated, causing the build to fail. This adds a simple override that returns an empty vector, as CallbackAdapter does not use timers. This resolves the abstract class instantiation error.
-
Port fix for Issue 300 from ROS 1 into ROS 2 (#404) Handle prior on last stamp (#323)
- Added unit test to illustrate the bug from Issue 300
- Move where the input variables are updated to the motion model values to ensure that transactions that involve only a single timestamp are correctly handled
- Contributors: KB1110, Stephen Williams, Surabhi Gade
1.2.1 (2024-09-21)
-
Fix CallbackWrapper class for the Rolling release
- Update for changes to the ROS2 Waitable base class
* implement pure virtual waitable functions as in https://github.com/ros2/system_tests/pull/548 Author: Henry Moore <<henry.moore@picknik.ai>>
-
Contributors: Stephen Williams
1.2.0 (2024-05-02)
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | iron |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux) (#294) Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
fuse -> ROS 2 fuse_loss: Port fuse_loss (#287)
-
fuse -> ROS 2 fuse_core: Linting (#292)
-
fuse -> ROS 2 fuse_core : Parameters and Tests (#286) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Ivor Wanders <<ivor@iwanders.net>>
-
fuse -> ROS 2 fuse_core : Nodes and Waitables (#284) Co-authored-by: Brett Downing <<brett@hacodyne.com>> Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>>
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 1.1.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/locusrobotics/fuse.git |
VCS Type | git |
VCS Version | jazzy |
Last Updated | 2024-10-31 |
Dev Status | MAINTAINED |
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
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 for package fuse_core
1.1.1 (2024-05-02)
- Required formatting changes for the lastest version of ROS 2 Rolling (#368)
- Contributors: Stephen Williams
1.1.0 (2024-04-20)
- Port support for Ceres 2.1.0 Manifold class into ROS 2 Rolling
(#366)
- Support gcc12 and ceres 2.1.0
- Add support for the Manifold class when using Ceres Solver version 2.1.0 and above
- General clean up for Ceres 2.2.0 support
- Updated serialization support to be backwards compatible with previously serialized files
- Formatting changes required for ROS 2 Rolling / Ubuntu Noble
- Contributors: Stephen Williams
1.0.1 (2023-03-03)
1.0.0 (2023-03-03)
-
Use upstream rclcpp::node_interfaces::NodeInterfaces (#313)
- Use upstream rclcpp::node_interfaces::NodeInterfaces
* Dereference node arguments to NodeInterfaces ---------Co-authored-by: methylDragon <<methylDragon@gmail.com>>
-
Use getParameterName and namespace parameters for publishers (#314)
-
Fix SerializedPublisher not being able to read it's parameters (#311)
-
Use rclcpp::Clock::wait_until_started (#303)
-
fuse -> ROS 2 : Doc Generation (#278)
- Port doc generation and fix package.xml for linting
- Fix small bugs in package.xml
- Use default rosdoc2 settings
- Use default rosdoc2 settings
* Update fuse_doc for rosdoc2 ---------Co-authored-by: Shane Loretz <<sloretz@google.com>>
-
fuse -> ROS 2 fuse_tutorials: Port fuse_tutorials (#309) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_optimizers: Port fuse_optimizers (#307) Co-authored-by: Shane Loretz <<sloretz@osrfoundation.org>> Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_models: Port fuse_models (#304)
- Port messages
- Port fuse_models
- Fix alloc error and some bugs
- Wait on result
-
fuse -> ROS 2 fuse_publishers : Linting (#305)
-
fuse -> ROS 2 fuse_publishers: Port fuse_publishers (#299) Co-authored-by: Shane Loretz <<shane.loretz@gmail.com>>
-
fuse -> ROS 2 fuse_constraints : Linting (#298)
-
fuse -> ROS 2 fuse_graphs : Port fuse_graphs (#289)
-
fuse -> ROS 2 fuse_variables: Linting (#296)
- Migrate to .hpp files
- Create redirection headers
- Make xmllint and uncrustify happy
- Wrap most comment lines
- Satisfy cpplint
-
fuse -> ROS 2 fuse_variables: Port fuse_variables (#288)
-
fuse -> ROS 2 fuse_core : Messages and Services (#285)
-
fuse -> ROS 2 fuse_core: Fix Async (Redux)
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
fuse_msgs | |
pluginlib | |
rclcpp | |
rclcpp_components | |
rcl_interfaces | |
ament_cmake_ros | |
ament_cmake_gtest | |
ament_cmake_pytest | |
ament_lint_auto | |
ament_lint_common | |
geometry_msgs | |
launch | |
launch_pytest |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.12.0 |
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 | 2025-06-07 |
Dev Status | MAINTAINED |
CI status |
|
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
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 for package fuse_core
0.5.0 (2022-02-23)
-
[RST-4186] Fix fuse macro names (#263)
- Namespace all macros with the FUSE_ prefix. Mark original macros as deprecated.
- Update all fuse objects to use the new macro names
-
[RST-4390] Allow variables to be held constant during optimization (#243)
- Add support for holding variables constant
- Create a 'fixed' landmark
- Added initial support for marginalizing constant variables
-
[RST-4455] Fix C++17 compile issue and simplify matrix serialization at the same time (#244)
-
Adding doxygen to all packages (#241)
-
Add unstamped 3D point variable (#233) (#239)
- Add unstamped 3D landmark variable
* Add landmark test and new uuid generator Co-authored-by: Stephen Williams <<swilliams@locusrobotics.com>> Co-authored-by: Jake McLaughlin <<jake.mclaughlin98@gmail.com>>
-
[RST-3474] Created a getConstraintCosts() method
- Created a getConstraintCosts() method for reporting the costs and residuals of individual constraints
-
[RST-2831] Support for optimization bounds (#235)
-
Added a time-limited optimization option to the Graph class (#234)
-
Contributors: Stephen Williams, Tom Moore
0.6.0 (2023-02-22)
-
0.5.0
-
Update changelogs
-
Fix Ceres 2.0.0 API support (#273)
* Pass kNumResiduals to the internal AutoDiff function. Ceres added this argument in https://github.com/ceres-solver/ceres-solver/commit/e7a30359ee754057f9bd7b349c98c291138d91f4 we need to pass it else template substitution fails.
* Pass kLocalSize instead of kGlobalSize Upstream commit made me assume kGlobalSize, but that threw at runtime when the tests ran. This seems to work, also put a using statement there to make roslint happy. Co-authored-by: Ivor Wanders <<ivor@iwanders.net>>
-
[RST-4186] Fix fuse macro names (#263)
- Namespace all macros with the FUSE_ prefix. Mark original macros as deprecated.
- Update all fuse objects to use the new macro names
-
[RST-4390] Allow variables to be held constant during optimization (#243)
- Add support for holding variables constant
- Create a 'fixed' landmark
- Added initial support for marginalizing constant variables
-
[RST-4455] Fix C++17 compile issue and simplify matrix serialization at the same time (#244)
-
Adding doxygen to all packages (#241)
-
Add unstamped 3D point variable (#233) (#239)
- Add unstamped 3D landmark variable
* Add landmark test and new uuid generator Co-authored-by: Stephen Williams <<swilliams@locusrobotics.com>> Co-authored-by: Jake McLaughlin <<jake.mclaughlin98@gmail.com>>
-
[RST-3474] Created a getConstraintCosts() method
- Created a getConstraintCosts() method for reporting the costs and residuals of individual constraints
-
[RST-2831] Support for optimization bounds (#235)
-
Added a time-limited optimization option to the Graph class (#234)
-
Contributors: Enrique Fernandez Perdomo, Gary Servin, Stephen Williams, Tom Moore
0.7.0 (2023-09-25)
- [RST-7809] Fix optimization errors when the orientation is
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
catkin | |
roslint | |
rostest | |
geometry_msgs | |
fuse_msgs | |
pluginlib | |
roscpp | |
rosconsole |
System Dependencies
Name |
---|
libceres-dev |
eigen |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged fuse_core at Robotics Stack Exchange
![]() |
fuse_core package from fuse repofuse fuse_constraints fuse_core fuse_doc fuse_graphs fuse_loss fuse_models fuse_msgs fuse_optimizers fuse_publishers fuse_tutorials fuse_variables fuse_viz |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.12.0 |
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 | 2025-06-07 |
Dev Status | MAINTAINED |
CI status |
|
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
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 for package fuse_core
0.5.0 (2022-02-23)
-
[RST-4186] Fix fuse macro names (#263)
- Namespace all macros with the FUSE_ prefix. Mark original macros as deprecated.
- Update all fuse objects to use the new macro names
-
[RST-4390] Allow variables to be held constant during optimization (#243)
- Add support for holding variables constant
- Create a 'fixed' landmark
- Added initial support for marginalizing constant variables
-
[RST-4455] Fix C++17 compile issue and simplify matrix serialization at the same time (#244)
-
Adding doxygen to all packages (#241)
-
Add unstamped 3D point variable (#233) (#239)
- Add unstamped 3D landmark variable
* Add landmark test and new uuid generator Co-authored-by: Stephen Williams <<swilliams@locusrobotics.com>> Co-authored-by: Jake McLaughlin <<jake.mclaughlin98@gmail.com>>
-
[RST-3474] Created a getConstraintCosts() method
- Created a getConstraintCosts() method for reporting the costs and residuals of individual constraints
-
[RST-2831] Support for optimization bounds (#235)
-
Added a time-limited optimization option to the Graph class (#234)
-
Contributors: Stephen Williams, Tom Moore
0.6.0 (2023-02-22)
-
0.5.0
-
Update changelogs
-
Fix Ceres 2.0.0 API support (#273)
* Pass kNumResiduals to the internal AutoDiff function. Ceres added this argument in https://github.com/ceres-solver/ceres-solver/commit/e7a30359ee754057f9bd7b349c98c291138d91f4 we need to pass it else template substitution fails.
* Pass kLocalSize instead of kGlobalSize Upstream commit made me assume kGlobalSize, but that threw at runtime when the tests ran. This seems to work, also put a using statement there to make roslint happy. Co-authored-by: Ivor Wanders <<ivor@iwanders.net>>
-
[RST-4186] Fix fuse macro names (#263)
- Namespace all macros with the FUSE_ prefix. Mark original macros as deprecated.
- Update all fuse objects to use the new macro names
-
[RST-4390] Allow variables to be held constant during optimization (#243)
- Add support for holding variables constant
- Create a 'fixed' landmark
- Added initial support for marginalizing constant variables
-
[RST-4455] Fix C++17 compile issue and simplify matrix serialization at the same time (#244)
-
Adding doxygen to all packages (#241)
-
Add unstamped 3D point variable (#233) (#239)
- Add unstamped 3D landmark variable
* Add landmark test and new uuid generator Co-authored-by: Stephen Williams <<swilliams@locusrobotics.com>> Co-authored-by: Jake McLaughlin <<jake.mclaughlin98@gmail.com>>
-
[RST-3474] Created a getConstraintCosts() method
- Created a getConstraintCosts() method for reporting the costs and residuals of individual constraints
-
[RST-2831] Support for optimization bounds (#235)
-
Added a time-limited optimization option to the Graph class (#234)
-
Contributors: Enrique Fernandez Perdomo, Gary Servin, Stephen Williams, Tom Moore
0.7.0 (2023-09-25)
- [RST-7809] Fix optimization errors when the orientation is
File truncated at 100 lines see the full file
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
catkin | |
roslint | |
rostest | |
geometry_msgs | |
fuse_msgs | |
pluginlib | |
roscpp | |
rosconsole |
System Dependencies
Name |
---|
libceres-dev |
eigen |