Releases: aica-technology/modulo
Version 5.2.1
Starting with version 5.2.1, the Python component interfaces verify the return values of execution and lifecycle
callbacks to avoid unexpected behavior. Additionally, it contains a fix that puts a parameter in the correct controller
base class.
Version 5.2.0
Version 5.2.0 is a minor relase of modulo that includes a simplified version of TF in joint space. With a
JointPositionsBroadcaster
and JointPositionsListener
from the core package, named static joint configurations can be
sent and looked up from a global /joint_positions
topic, equivalent to /tf_static
. Additionally, this version
contains a couple of improvements for the custom message publisher and subscriber interfaces and to the component
interface.
- feat: improve devcontainer configuration (#198)
- feat(components): use parent node for tf listener (cpp) (#189)
- fix(core): handle custom message pub/sub that also exist in translators (#199)
- feat(interfaces): add joint positions messages (#193)
- feat(core): add joint positions broadcaster and listener (#197, #201)
Dependencies
Version 5.1.0
December 16th, 2024
Version 5.1.0 is an update to modulo that brings a small feature that removes the need of specifying the clproto message type when adding outputs in Python components. For user friendliness, the clproto message type is inferred from the type of the attribute with a helper function. Additionally, this version contains a few fixes that further improve the behavior of components under the hood.
- fix(components): remove incorrect log line (#166)
- fix(controllers): move predicate publishing rate parameter to BaseControllerInterface (#168)
- feat(components): get clproto message type from attribute (#175)
- fix(components): add missing test case (#181)
- fix(components): clean up lifecycle nodes properly (#178)
- fix(components): try catch subscription callbacks (#167)
Version 5.0.2
November 11th, 2024
Version 5.0.2 fixes an incorrect condition in the controller triggers and changes the parameter type of the predicate
rate parameter in the controller base class from an integer type to a double type. Additionally, the component interface
class for Python was revised to hide private attributes better from derived classes.
- fix(controllers): change predicate rate to double type (#163)
- fix(controllers): trigger check (#164)
- fix(components): make all possible attributes private (#162)
Dependencies
- package-builder: v1.1.1 -> 1.3.0 (#165)
Version 5.0.1
October 21st, 2024
Version 5.0.1 patches a couple of issues around predicates. It prevents Python components from publishing their predicates on every step and ensures that predciates always publish their new value on change, even if the initial value is changed before the first step callback triggers.
Version 5.0.0
October 9th, 2024
Version 5.0.0 is a major update to modulo developed for ROS 2 Jazzy Jalisco and ROS 2 control 4.17.0. If features even
more flexibility and performance in the component and controller base classes in modulo_components
and
modulo_controllers
and improved divison of responsability across modulo_core
, modulo_interfaces
(formerly
modulo_component_interfaces
) and modulo_utils
.
Breaking changes
Due to the size and importance of this version update, the list of breaking changes is quite long.
modulo_component_interfaces
The package modulo_component_interfaces
has been removed in favor of the recently added modulo_interfaces
. All
common service and message definitions are now to be found in modulo_interfaces
.
- refactor!: remove modulo_component_interfaces (#88)
modulo_utils
In order to minimize code duplication between modulo_components
and modulo_controllers
, which define classes with
very similar interfaces, shared dependencies have been moved to modulo_utils
:
- Custom defined exceptions used across all modulo packages (#90, #117)
- Parsing utilities and the
PredicateVariant
(#89, #101)
modulo_core
Apart from a minor renaming in #77, modulo_core
comes with an important features that breaks the ABI. Using heavy
templating and concepts
) introduced in C++20, it was
possible to extend the communication classes (MessagePair
, PublisherHandler
and SubscriptionHandler
) to any ROS
message type.
- refactor(core)!: rename function in modulo translators (#77)
- feat!: add support for custom inputs and outputs (#133)
modulo_controllers
There is a new intermediate base class BaseControllerInterface
that adds typical modulo interfaces (add_parameter
,
add_input
, add_service
, etc.) to the controller_interface::ControllerInterface
class from ROS 2 control. This
should allow simpler migration of pure ROS 2 control controller implementations to the modulo controller interface.
Additionally, the constructor of the RobotControllerInterface
has an additional argument that allows to specify if
collision features should be enabled in the robot model.
- refactor(controllers)!: split up base class (#135)
- feat(controllers)!: add flag for collision features to robot controller interface (#114)
modulo_components
In the component classes, the period
parameter has been removed for good and replaced by the rate
parameter which
is not an integer type anymore but a floating type number. Manually published lifecycle predicates have been removed
because they can already be inferred from automatically published topics on the ROS network.
- feat(components)!: add mutex around step callback (#67)
- refactor(components)!: remove period parameter and make rate double (#108)
- refactor!: remove lifecycle predicates and add lifecycle state getter (#130)
Features and Fixes
Core
- feat(interfaces): add message definition for encoded state (#132)
- feat(utils): add binary reader and recorder for encoded states (#152)
Components and Controllers
- feat(controllers): add add_interfaces function for derived controllers (#102)
- refactor(controllers): change predicate topic of controllers (#121)
- fix(components): keep parameter values in sync with ros (#111)
- fix(controllers): keep parameter values in sync with ros (#125)
- feat(components): only publish predicates on value change (#123)
- feat(controllers): only publish predicates on value change (#124)
- fix(controllers): remove duplicate function (#140)
- feat: try catch lifecycle transitions in components and controllers (#120)
- feat(components): use component description schema 1-1-1 to mark lifecycle property (#136)
- docs(components): update schema path in component descriptions (#154)
- refactor(components): improve component error handling (#138)
- fix(components): correctly go through shutdown sequence (#157)
Build
- feat: update to jazzy and CL v9.0.0 (#116)
- feat: use v2.0.0-rc1-jazzy image (#126)
- release: use updated base image (#139)
- chore: format repository (#142)
- release: version v5.0.0-rc0009 (#155)
Dependencies
- package-builder: v1.1.1
- ros2-ws: v2.0.0-jazzy
- control-libraries: v9.0.0
Version 4.2.2
Version 4.2.2 is a patch that brings a few fixes and minor improvements to the controller interface. Mainly, it improves
the controller stability by safely handling a potentially failing dynamic pointer cast.
Version 4.2.1
Version 4.2.1 is a patch that fixes a missing version update in the aica-package.toml and a missing action in the
build-release workflow.
- ci: create git tag on release (#109)
Version 4.2.0
Version 4.2.0 features a new package modulo_controllers
that extends the controller interface from ROS 2 control with concepts and capabilities known from modulo_components
. These classes can and should be used to write derived ROS 2 controller plugins within the AICA robotics framework. Additionally, this version introduces the package builder that replaces the Dockerfile to improve clarity, maintenance and standardization of the build system.
- feat: improve logging in parameter translators (#65)
- fix(component-interface): make python subscriptions type safe (#71)
- build: change base workspace image version (#83)
- feat: add modulo controllers (#84, #93, #94, #95, #96, #97, #98, #99)
- build: aica-package.toml for package-builder:v1 (#91)
Dependencies
Version 4.1.0
Version 4.1.0 is a minor update which adds support for Analog and Digital IO States from control libraries and contains a few quality of life improvements. Additionally, it comes with a new package called modulo_interfaces
which is a more general version of modulo_component_interfaces
and will replace the latter upon the next major release.
- chore: fix links in readme (#68)
- feat: add warn log when topics are sanitized (#66)
- feat: add modulo interface package (#73)
- feat: support io states in modulo core (#70)
Dependencies
- control-libraries 7.1.0 -> 7.4.0: #76