No version for distro humble showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro ardent showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro bouncy showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro crystal showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro eloquent showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro dashing showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro galactic showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro foxy showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro lunar showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro jade showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro indigo showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro hydro showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

No version for distro kinetic showing jazzy. Known supported distros are highlighted in the buttons above.

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

0.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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange

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

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

Additional Links

No additional links.

Maintainers

  • Stephen Williams

Authors

  • Stephen Williams

fuse_core

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

Variable

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

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

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

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

Constraint

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

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

Transaction

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

CHANGELOG

Changelog for package fuse_core

0.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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged fuse_core at Robotics Stack Exchange