Skip to content

Releases: openTCS/opentcs

Release 6.1.2

19 Sep 07:13
Compare
Choose a tag to compare
  • 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

16 Sep 12:22
Compare
Choose a tag to compare
  • Bugs fixed:
    • Correctly enable/disable controls in the Operations Desk application when it is connected to / disconnected from the kernel.

Release 6.1.0

12 Sep 16:00
Compare
Choose a tag to compare
  • 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 TCSObjectEvents 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.
  • 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 MovementCommands when the vehicle reported an unexpected position while processing a transport order. A vehicle driver will continue to receive MovementCommands 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 type REPORT_POSITION was removed, which makes this method redundant, as all remaining point types allow halting.

Release 6.0.0

19 Jun 14:08
Compare
Choose a tag to compare
  • 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 and jakarta.annotation.Nonnull instead of javax.annotation.Nullable and javax.annotation.Nonnull. For the latter, use of the javax 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.

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 or jakarta.inject.Provider.

Release 5.17.1

19 Jun 07:40
Compare
Choose a tag to compare
  • Bugs fixed:
    • Avoid NullPointerExceptions when rerouting vehicles that process transport orders containing drive order steps that don't have a path.

Release 5.17

21 May 15:50
Compare
Choose a tag to compare
  • 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.
  • Changes affecting developers:
    • Update Gradle wrapper to 8.7.

Release 5.16

09 May 07:58
Compare
Choose a tag to compare
  • 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.
  • 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.
  • Changes affecting developers:
    • Adjust the names of some methods in VehicleProcessModel and VehicleProcessModelTO by removing the redundant "Vehicle" prefix.

Release 5.15

14 Apr 06:25
Compare
Choose a tag to compare
  • 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.

Release 5.14

22 Mar 13:55
Compare
Choose a tag to compare
  • New features and enhancements:
    • The creation of ambiguous peripheral jobs (by kernel clients or via the web API) that have the completionRequired flag set to true is now prevented. (In those cases it is unclear what should happen to the job's relatedTransportOrder (if any) in case the job fails.)
    • Add a watchdog task to the kernel which periodically monitors the state of blocks in the plant model and publishes a user notification in case a block is occupied by more than one vehicle. (Such a situation is usually caused by manually moving vehicles around and leads to deadlock situations.)
    • Update web API specification and implementation to version 1.5.0:
      • When retrieving vehicle information via the web API, include the vehicle's orientation angle.
  • Bugs fixed:
    • Correctly read configuration entries in the <KEY_1>=<VALUE_1>,...,<KEY_N>=<VALUE_N> format when using gestalt as the configuration provider.
  • Changes affecting developers:
    • Provide related TransportOrder and DriveOrder objects as part of every MovementCommand. This way, vehicle drivers can easily look up a movement command's context without having to explicitly fetch the data via a kernel service call.
    • Update Mockito to 5.11.0.
    • Update ApprovalTests to 23.0.0.
    • Update Jackson to 2.17.0.
    • Update Gradle license report plugin to 2.6.

Release 5.13

22 Feb 14:25
Compare
Choose a tag to compare
  • New features and enhancements:
    • Improve handling of failed peripheral jobs (where the completion required flag is set to true) associated with a transport order and withdraw the respective transport order in such cases.
    • Properly implement simulation of a recharging operation in the virtual vehicle driver.
    • Add an alternative implementation for reading application configuration from properties files using the gestalt library. This implementation is intended to replace the one using the cfg4j library and is now used by default by the openTCS Kernel, Kernel Control Center, Model Editor and Operations Desk applications.
      (Note that, until openTCS 6, the cgf4j implementation can still be used by setting a system property.
      For more details, refer to the developer's guide.)
    • Improve resource management on vehicle movement: When a vehicle moves to a new position without having been ordered to move anywhere, allocating and freeing resources is now properly handled.
    • Update web API specification and implementation to version 1.4.0:
      • Add an endpoint for triggering updates of the routing topology.
  • Bugs fixed:
    • Immediately assigning a transport order to a vehicle in the Operations Desk application now works correctly.
    • The loopback adapter now properly resumes operation when switching from single step mode to automatic mode.
    • Properly set layout coordinates when creating a location on the x or y axis.
  • Changes affecting developers:
    • Deprecate MovementCommand.isWithoutOperation() and introduce MovementCommand.hasEmptyOperation() as a replacement.
    • Keep track of a vehicle's drive order route progress in the corresponding transport order the vehicle is processing. Deprecate Vehicle.getRouteProgressIndex() because tracking this in the transport order is more consistent. (Progress in the drive orders list is also tracked in the transport order.)
    • Update JUnit to 5.10.2.
    • Update JUnit platform launcher to 1.10.2.
    • Update ApprovalTests to 22.3.3.
    • Update Mockito to 5.10.0.
    • Update AssertJ to 3.25.3.
    • Update Jackson to 2.16.1.
    • Update JAXB Runtime to 2.3.9.
    • Update Gradle wrapper to 8.6.
  • Other changes:
    • Move/Rename a couple of kernel configuration entries:
      • kernelapp.rerouteOnRoutingTopologyUpdate replaces defaultdispatcher.rerouteOnTopologyChanges.
      • kernelapp.rerouteOnDriveOrderFinished replaces defaultdispatcher.rerouteOnDriveOrderFinished.
    • Eliminate use of Java's SecurityManager from the code. It hasn't been necessary for quite a while, and does not exist any more with Java 21.
    • The default strategies for parking and (re)charging vehicles now create transport orders only for vehicles that are actually allowed to process them (according to the respective vehicle's allowed order types).