Releases: openTCS/opentcs
Releases · openTCS/opentcs
Release 6.3
- New features and enhancements:
- Add support for transport order type priorities. For vehicle elements, every transport order type (that a vehicle is allowed to process) can now be assigned a priority.
- Add a new key
BY_ORDER_TYPE_PRIORITY
that can be configured for the kernel configuration entriesdefaultdispatcher.orderCandidatePriorities
anddefaultdispatcher.vehicleCandidatePriorities
. With this key configured, the priorities of a vehicle's acceptable order types are considered when assigning transport order to it. - Improve the integration of envelopes in combination with blocks. If blocks are involved when allocating resources, consider the envelopes of all resources in these blocks.
- Add a creation time and finished time property to order sequences.
- Allow automatic creation of parking and recharge orders to be delayed. The delay is configurable via the
defaultdispatcher.parkIdleVehiclesDelay
anddefaultdispatcher.rechargeIdleVehiclesDelay
kernel configuration entries. - Improve performance for updating transport orders, order sequences and peripheral jobs in the respective Ops Desk tables.
- Update web API specification and implementation to version 1.10.0:
- Add an endpoint
PUT /vehicles/{NAME}/acceptableOrderTypes
, which allows a vehicle's set of acceptable order types to be modified during runtime. This endpoint replacesPUT /vehicles/{NAME}/allowedOrderTypes
, which is now deprecated. - Extend the endpoints for retrieving order sequences to include an order sequence's creation time and finished time.
- Extend the endpoints for retrieving vehicles to include timestamps for changes to a vehicle's state and processing state.
- Add an endpoint
- Bugs fixed:
- Avoid a
NullPointerException
when trying to park a vehicle whose current position is not known. - Ensure vehicles can process newly assigned transport orders after a peripheral job (created in the context of a previous transport order) has failed. Previously, failed peripheral jobs with the
AFTER_ALLOCATION
execution trigger could prevent vehicles from properly processing transport orders in some situations. - When loading v0.0.4 plant model files, points of type
REPORT_POSITION
will now be automatically converted to points of typeHALT_POSITION
, as support forREPORT_POSITION
s has been removed with openTCS 6.0. - When loading v0.0.4 plant model files, peripheral operations with the
BEFORE_MOVEMENT
execution trigger will now be automatically converted to peripheral operations with theAFTER_ALLOCATION
execution trigger, as support for theBEFORE_MOVEMENT
execution trigger has been removed with openTCS 6.0. - When saving a plant model via the Model Editor application with a new name, correctly set that name in the new plant model file.
- Prevent vehicles whose transport order was withdrawn from being rerouted. This ensures that vehicles can finish their movement commands correctly in such cases.
- Properly consider the
GroupMapper
implementation that is configured via dependency injection in theEXPLICIT_PROPERTIES
edge evaluator. - Avoid
ConcurrentModificationException
s in the Operations Desk that could occur particularly in situations where vehicle updates are received at high frequency.
- Avoid a
- Changes affecting developers:
- Deprecate methods in the
Router
interface that are technically outside its scope. - Deprecate
Router.getCost(Vehicle, Point, Point, Set<TCSResourceReference<?>>)
asRouter.getRoute(Vehicle, Point, Point, Set<TCSResourceReference<?>>)
already provides a way to retrieve the costs of a route. - Instead of having the total costs of a route only in
Route
itself, extendRoute.Step
to also contain the costs for a single step.
- Deprecate methods in the
Release 6.2
- New features and enhancements:
- Add support for pluggable transformation of data sent to / received from vehicles, e.g. for conversion between the coordinate system in the plant model and a vehicle-specific one.
- Allow assignment of externally-created recharging orders to vehicles with critical energy level.
- Update web API specification and implementation to version 1.9.0:
- Add missing required markers for request and response bodies.
- Include a vehicle's 'sufficiently recharged' and 'fully recharged' energy levels when requesting vehicle data.
- Bugs fixed:
- When receiving a position update from a vehicle, accept any position belonging to the movement commands sent to the vehicle, not just the next one. This is necessary to support cases in which a vehicle has completed more than one movement command during state/position updates.
- When aggregating
TCSObjectEvent
s for RMI clients, actually aggregate the oldest and youngest events properly instead of keeping only the youngest one. - Ask user for confirmation before overwriting files when using the Save Model As... menu item in the Model Editor application.
- Allow the position in
org.opentcs.data.model.Pose
to benull
.
- Changes affecting developers:
- Use
Pose
to replace and deprecate the previously separate position and orientation angle members inVehicle
andVehicleProcessModel
. - Update JUnit to 5.11.2.
- Update Hamcrest to 3.0.
- Update Mockito to 5.14.2.
- Update AssertJ to 3.26.3.
- Update ApprovalTests to 24.8.0.
- Update Checkstyle to 10.18.2.
- Update Jackson to 2.18.0.
- Update SLF4J to 2.0.16.
- Update Gradle wrapper to 8.10.2.
- Update Gradle Dependency License Report plugin to 2.9.
- Use
Release 6.1.2
- Bugs fixed:
- Properly handle paths that are being traversed in reverse direction in the bounding box edge evaluator. For such paths, the bounding box at the path's source point is now correctly considered (and not the one at its destination point).
- Ensure the POMs of the published Maven artifacts have their dependencies properly declared. With the releases of openTCS 6.1 and openTCS 6.1.1, dependencies on openTCS artifacts were using wrongly spelled artifact IDs, making it impossible to include openTCS artifacts as dependencies in projects.
Release 6.1.1
- Bugs fixed:
- Correctly enable/disable controls in the Operations Desk application when it is connected to / disconnected from the kernel.
Release 6.1.0
- New features and enhancements:
- Ignore path locks and configured edge evaluators when checking for general routability of transport orders. As paths locks and the results of edge evaluators may change during operation of a plant, it does not seem reasonable to consider them when checking for general routability.
- Reduce the load on RMI clients by aggregating consecutive
TCSObjectEvent
s for the same object into a single event. - Reduce the load on the kernel induced by the Operations Desk and Kernel Control Center applications by moderately increasing the interval in which they fetch events form the kernel.
- Add a watchdog task to the kernel which periodically monitors the state of vehicles in the plant model and publishes a user notification in case a vehicle is considered stranded (e.g., in cases where a vehicle is idle but has been assigned a transport order and is therefore expected to do something).
- Add support for specifying a bounding box for a vehicle via the Model Editor application. A vehicle's bounding box, which, among other things, is defined by a length, width and height, replaces the vehicle's "length" property, which could previously be specified for vehicles.
- Add support for specifying a maximum vehicle bounding box for a point via the Model Editor application.
- Add an edge evaluator that prevents vehicles from being routed to/through points where there is not enough space available (according to the vehicle's bounding box and the maximum allowed bounding box at a point). For more information, please refer to the user's guide.
- Allow a vehicle's set of energy level thresholds to be modified during runtime via the Operations Desk application.
- Allow the user to actively connect/disconnect the Operations Desk application to/from a kernel. Add corresponding entries to the application's File menu, which make it possible to change between different kernels during runtime.
- Improve performance when repeatedly computing routes with the same set of resources to be avoided.
- Update web API specification and implementation to version 1.8.0:
- The endpoint
POST /plantModel/topologyUpdateRequest
now also accepts an optional list of path names allowing the routing topology to be updated selectively. - Add an endpoint
PUT /vehicles/:NAME/energyLevelThresholdSet
, which allows a vehicle's set of energy level thresholds to be modified during runtime.
- The endpoint
- Bugs fixed:
- Correctly calculate the costs for new routes when rerouting transport orders for which resources to be avoided are defined.
- Use the correct XML schema for v0.0.5 plant model files.
- Correctly restore layer information when loading v0.0.4 or v0.0.5 plant model files.
- Fix handling of forced rerouting:
- Prevent the kernel executor thread from getting stuck in a loop when forcefully rerouting a vehicle that has reported an unexpected position while waiting for a peripheral job to be finished.
- Fix an issue where a vehicle would not get rerouted correctly when forcefully rerouting it after it has reported an unexpected position.
- Prevent a vehicle driver from receiving any further
MovementCommand
s when the vehicle reported an unexpected position while processing a transport order. A vehicle driver will continue to receiveMovementCommand
s after the vehicle has been forcefully rerouted. - Prevent vehicles from being forcefully rerouted when there are unfinished peripheral jobs (that have the completion required flag set to
true
).
- Changes affecting developers:
- Deprecate
Point.isHaltingPosition()
. With openTCS 6.0, the point typeREPORT_POSITION
was removed, which makes this method redundant, as all remaining point types allow halting.
- Deprecate
Release 6.0.0
- Changes affecting developers:
- Update project to Java 21.
- Update slf4j to 2.0.13.
- Update Guice to 7.0.0.
- Use annotations
jakarta.annotation.Nullable
andjakarta.annotation.Nonnull
instead ofjavax.annotation.Nullable
andjavax.annotation.Nonnull
. For the latter, use of thejavax
namespace was never officially approved, so the former may be considered more official. - Remove code for reading configuration (interfaces) via cfg4j. Reading configuration (interfaces) via gestalt, which had already been made the default previously, is now the only integrated variant.
- Remove deprecated code.
- Other changes:
- Replace the configuration prefix 'plantoverviewapp' in the Model Editor and Operations Desk applications (which is reminiscent of the old Plant Overview application) with prefixes that are more suitable for the respective applications.
- Update web API specification and implementation to version 1.7.0:
- Remove support for the
REPORT_POSITION
point type, which was scheduled for removal with openTCS 6.0.
- Remove support for the
Important
Migration notes
- When a plant model that was created with an earlier version is intended to be used with openTCS 6.0, it is recommended to first load and save the plant model with the Model Editor of the latest openTCS 5 release, which is openTCS 5.17.1 at the time of this writing. Otherwise, loading such a plant model with openTCS 6 might fail.
- Integration projects need to update any use of slf4j providers to version 2.0.13, too, or the respective logging backend might not be used.
- Integration projects now need to use injection-related annotations in the
jakarta.inject
namespace, e.g.jakarta.inject.Inject
orjakarta.inject.Provider
.
Release 5.17.1
- Bugs fixed:
- Avoid
NullPointerException
s when rerouting vehicles that process transport orders containing drive order steps that don't have a path.
- Avoid
Release 5.17
- Bugs fixed:
- Avoid
ObjectUnknownException
by cleaning orders related to order sequences only once. - Correctly claim resources for transport orders with multiple drive orders. This fixes an issue where allocating the first set of resources for the second drive order in a transport order would fail.
- Allow persistence of plant models (to a file and to the kernel) with paths that contain both vehicle envelopes and peripheral operations.
- Avoid
- Changes affecting developers:
- Update Gradle wrapper to 8.7.
Release 5.16
- New features and enhancements:
- Use more sensible defaults for newly created vehicles' recharge energy level threshold values.
- Add proper support for recalculating the length of "2-Bezier", "3-Bezier" and "Poly-Path" paths to the Model Editor.
- Add support for defining vehicle envelopes at points and paths to the Model Editor.
- Make vehicle resource management configurable. For more details, see the documentation of the
KernelApplicationConfiguration.vehicleResourceManagementType
configuration entry. - When computing a route / costs of a route not related to a transport order, it is now possible to define a set of resources (i.e., points, paths or locations) that should be avoided by vehicles.
- Update web API specification and implementation to version 1.6.0:
- The endpoint
POST /vehicles/{NAME}/routeComputationQuery
now also accepts an optional list of names of resources to avoid.
- The endpoint
- Bugs fixed:
- When referencing paths via the
tcs:resourcesToAvoid
property in transport orders, don't implicitly avoid their start and end points, as points can have multiple incoming and outgoing paths. - Don't create the same peripheral job a second time if the vehicle that triggered the job was rerouted before the job was completed.
- When referencing paths via the
- Changes affecting developers:
- Adjust the names of some methods in
VehicleProcessModel
andVehicleProcessModelTO
by removing the redundant "Vehicle" prefix.
- Adjust the names of some methods in
Release 5.15
- New features and enhancements:
- Improve performance of updates to the router's routing topology by allowing it to be updated selectively. (The routing topology can now be updated only for paths that have actually changed.)
- When computing a route for a transport order, it is now possible to define a set of resources (i.e., points, paths or locations) that should be avoided by vehicles processing the respective transport order. For this, a property with the key
tcs:resourcesToAvoid
can be set on a transport order to a comma-separated list of resource names.