Skip to content

Releases: aica-technology/modulo

Version 5.2.1

20 May 05:58
179f6c9
Compare
Choose a tag to compare

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.

  • feat(components): verify return value of callbacks (#206)
  • fix(controllers): move input validity period to base (#207)

Version 5.2.0

31 Mar 11:30
914b924
Compare
Choose a tag to compare

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

  • ros2-ws: v2.0.0-jazzy -> v2.0.2-jazzy (#198)
  • package-builder: v1.3.0 -> v1.4.0 (#198)

Version 5.1.0

16 Dec 17:36
8eb2470
Compare
Choose a tag to compare

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

11 Nov 16:40
f304cff
Compare
Choose a tag to compare

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

21 Oct 07:56
731e8e2
Compare
Choose a tag to compare

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.

  • fix: default predicate value on construction (#158)
  • fix(modulo_controllers): typo in modulo controller descriptions (#160)

Version 5.0.0

09 Oct 14:17
8dcf823
Compare
Choose a tag to compare

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

19 Jun 14:03
22d0fd0
Compare
Choose a tag to compare

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.

  • fix(modulo-controllers): improve log message (#110)
  • fix(modulo-components): add missing space in log message (#113)
  • feat(modulo-controllers): add missing docs (#112)
  • fix(modulo-controllers): correctly handle nullptr in read_input (#118)

Version 4.2.1

29 May 13:44
ef33e98
Compare
Choose a tag to compare

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

29 May 05:46
8524337
Compare
Choose a tag to compare

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

  • package-builder: v1 (#91)
  • ros2-ws: v1.0.1-iron (#83, #91)
  • control-libraries: 7.4.0 -> 7.4.1 (#91)

Version 4.1.0

19 Apr 11:24
255658f
Compare
Choose a tag to compare

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