1. Introduction
openTCS (short for "open Transportation Control System") is a free platform for controlling vehicles in an Automated Guided Vehicle System (AGVS). It should generally be possible to control any track-guided vehicle with it, even if the tracks are only virtual, but AGVSs are the main target. It is being maintained at the Fraunhofer Institute for Material Flow and Logistics in Dortmund, Germany.
The software runs on the Java platform (version 1.8). All libraries required for compiling and/or using it are freely available, too.
openTCS itself is not a complete product you can use "out-of-the-box" to control an AGVS with. Primarily, It is a framework/an implementation of the basic data structures and algorithms (routing, dispatching, scheduling) needed for running an AGVS with more than one vehicle. It tries to be as generic as possible to allow interoperation with track-guided vehicles of practically any vendor. Thus it is usually necessary to at least create and integrate a vehicle driver (called "communication adapter" in openTCS-speak) that translates between the abstract interface of the openTCS kernel and the communication protocol your vehicle understands. Depending on your needs, it might also be necessary to adapt algorithms or add project-specific strategies.
The openTCS source code is licensed partly under the terms of the MIT License and partly under the terms of the GNU Lesser General Public License.
A copy of the licenses is included in the distribution.
For details on the licensing, see the file LICENSE.txt
.
Please note that openTCS is distributed without any warranty - without even the implied warranty of merchantibility or fitness for a particular purpose. Please refer to the license for details.
We are grateful to any developers that have contributed to openTCS. A list of all contributors known by name can be found at the end of this document.
To download the latest version and/or read news about openTCS, please see its web site at http://www.opentcs.org/ or the project homepage at http://sourceforge.net/projects/opentcs/.
2. Getting started
To get started with openTCS, please refer to the user’s guide, the developer’s guide and the JavaDoc API documentation that are included in the distribution.
3. Support
Please note that, while we are happy to be able to release openTCS to the public as free software and would like to see it used and improved continuously, the development team cannot provide unlimited free support for it.
If you have technical/support questions, please post them on the project’s mailing list, where the community and the developers involved will respond as time permits. You can subscribe to the mailing list on the project homepage at http://sourceforge.net/projects/opentcs/.
Legal notice: This announcement of possible supporting services is not intended to create any binding or legal obligations or an obligation on entering any contract. It does not impose any duty on Fraunhofer IML to disclose any information nor to enter into any individual agreement or obligation.
4. Change log
This change log lists the most relevant changes for past releases in reverse chronological order.
4.1. Version 4.20 (2020-12-18)
-
Fixes:
-
Default
Scheduler
: Properly handle requests for same-direction blocks for some edge cases. -
Default
Scheduler
: Really free all resources when taking a vehicle out of the driving course.
-
-
Other changes:
-
Plant Overview: Improve performance for vehicle state updates.
-
4.2. Version 4.19 (2020-07-02)
-
New features:
-
As with paths, locations can now be locked via the Plant Overview application to prevent them from being used by vehicles.
-
4.3. Version 4.18 (2020-04-09)
-
New features:
-
Provide the route to be travelled to vehicle drivers with every movement order, for cases in which vehicles require some information about it.
-
Allow supplementary configuration sources to be registered via service loader.
-
Allow a configuration reload interval to be set via a system property.
-
-
Other changes:
-
Improve performance of loading a plant model file into the kernel.
-
Rename transport order category to transport order type.
-
Update Spark to 2.9.1.
-
4.4. Version 4.17 (2019-12-10)
-
Bugs fixed:
-
In the Plant Overview application’s "Continuous load" plugin panel, it is now possible to properly remove/delete entries in the drive order and property tables.
-
Changing the loopback driver’s state through its panel in the Kernel Control Center application now works in all cases.
-
-
Other changes:
-
When using the Kernel’s RMI interface with SSL enabled, avoid side effects on other components using SSL.
-
4.5. Version 4.16.1 (2019-10-30)
-
Bugs fixed:
-
Fix creating links between points and locations in the Plant Overview application.
-
4.6. Version 4.16 (2019-10-22)
-
New features:
-
Optionally have names for transport orders and order sequences generated by the kernel. Use ULIDs for these generated names by default, to have lexicographically sortable names.
-
Add a
publishEvent()
method to theKernelServicePortal
interface that RMI-Clients can use to publish events on the Kernel application’s event bus. -
Enable the Kernel Control Center application to set positions for all simulating vehicle drivers, not only the loopback driver.
-
-
Bugs fixed:
-
Paths that have the same start and end components are now displayed properly in the Plant Overview.
-
In the Plant Overview’s continuous load panel, transport order definitions can now be saved to and restored from XML files again. (Note that in the course of fixing this issue, the XML files' structure was improved. Since the feature had been broken for a while and is not part of a public API, backwards compatibility was not maintained for this. As a result, transport order definition files from old versions of openTCS cannot be restored.)
-
Make using the "try it out" buttons in the OpenAPI documentation possible by setting CORS headers in the web API’s responses.
-
4.7. Version 4.15 (2019-05-02)
-
New features:
-
Add history entries for transport orders being deferred or resumed as well as assigned to or reserved for vehicles in the dispatching process. This makes it easier to find out e.g. why a transport order wasn’t assigned to a vehicle, yet. It also implicitly deprecates transport orders' rejection entries, as history entries provide the same functionality, but for more use cases.
-
Expect applications' locales to be set via BCP 47 language tags, making the configuration more flexible and independent from the source code.
-
Extend the default router to be able to extract explicitly given routing costs from path properties, too.
-
-
Bugs fixed:
-
In case no load or unload operation is defined for a virtual vehicle, use a default value to avoid exceptions.
-
Do not (wrongly) set a vehicle’s processing state to
IDLE
whenever its integration level is set toTO_BE_UTILIZED
. -
Avoid potential deadlocks related to using the Plant Overview’s resource allocation panel.
-
-
Other changes:
-
Disable the Kernel application’s integrated control center GUI by default. It can still be re-enabled via the Kernel configuration, but it has been deprecated for several openTCS releases now and will be removed with the openTCS 5.
-
Move all language files for the applications' internationalization to a common hierarchy, remove unused/left-over entries and apply a proper naming pattern to the remaining ones to improve maintainability. (The language files for the Kernel application’s integrated control center GUI are excluded from this, as that GUI will be removed with openTCS 5.)
-
Remove support for the Plant Overview application’s old model file format (file name extension
.opentcs
). The old format has been deprecated since openTCS 4.8 in favour of a unified file format (file name extension.xml
) shared by Kernel and Plant Overview. Users who still have model files in the old format may want to save them in the current format before updating. -
Remove the menu item to trigger the kernel’s dispatching process from the Plant Overview’s main menu. The dispatcher is triggered automatically (and, for special cases in integration projects, periodically), so manual triggering does not need to be involved.
-
4.8. Version 4.14 (2019-03-22)
-
Bugs fixed:
-
With the
defaultdispatcher.reparkVehiclesToHigherPriorityPositions
configuration enabled: Prevent a vehicle from being re-parked to positions that have the same priority as the vehicle’s current parking position. -
Fix a bug where charging vehicles don’t execute transport orders after they have reached the "sufficiently recharged" state.
-
-
Other changes:
-
The Kernel application does no longer persist
Color
andViewBookmark
elements of the visual layout. (For some time now, these elements could no longer be created with the PlantOverview application and were ignored when a model was loaded, anyway.)
-
4.9. Version 4.13.1 (2019-02-25)
-
Bugs fixed:
-
Fix a bug with the loopback communication adapter that prevents resources from being properly released when the "loopback:initialPosition" property is set on vehicles.
-
4.10. Version 4.13 (2019-02-18)
-
New features:
-
Introduce an event history for transport orders that can be filled with arbitrary event data.
-
Introduce
"*"
as a wildcard in a vehicle’s processable categories to allow processing of transport orders in any category. -
The Plant Overview’s vehicle panel now also shows the current destination of each vehicle.
-
-
Bugs fixed:
-
With the
defaultdispatcher.rerouteTrigger
configuration entry set toDRIVE_ORDER_FINISHED
, ensure that the rerouting is only applied to the vehicle that has actually finished a drive order. -
For vehicles selected in the Plant Overview, re-allow changing their integration levels via the context menu to either "to be utilized" or "to be respected" if any of them is currently processing a transport order, too.
-
-
Other changes:
-
Remove the included integration project generator and document usage of the example integration project, instead.
-
Update the web API specification to OpenAPI 3.
-
Update Gradle to 4.10.3.
-
Update Checkstyle to 8.16.
-
Update JUnit to 5.3.2.
-
Update Guice to 4.2.2.
-
4.11. Version 4.12 (2018-12-20)
-
New features:
-
Introduce optional priorities for parking positions. With these, vehicles are parked at the one with the highest priority. Optionally, vehicles already parking may be reparked to unoccupied positions with higher priorities.
-
Provide additional energy levels for vehicles to influence when recharging may be stopped.
-
Make the Plant Overview’s naming schemes for plant model elements configurable.
-
In the Plant Overview, allow multiple vehicles to be selected for changing the integration level or withdrawing transport orders.
-
-
Bugs fixed:
-
Prevent a movement order from being sent to a vehicle a second time after the vehicle got rerouted while waiting for resource allocation.
-
4.12. Version 4.11 (2018-12-04)
-
New features:
-
Introduce a type property for blocks. A block’s type now determines the rules for entering it:
-
Single vehicle only: The resources aggregated in this block can only be used by a single vehicle at the same time.
-
Same direction only: The resources aggregated in this block can be used by multiple vehicles, but only if they enter the block in the same direction.
-
-
-
Bugs fixed:
-
Properly set a point’s layout coordinates when it is placed exactly on an axis in the Plant Overview.
-
Properly select the correct/clicked-on tree entry in the Plant Overview’s blocks tree view when the same element is a member of more than one block.
-
Prevent the Kernel application from freezing when loading some larger plant models.
-
-
Other changes:
-
Require the user to confirm immediate withdrawals of transport orders in the plant overview, as they have some implications that may lead to collisions or deadlocks in certain situations.
-
Improve input validation of unit-based properties for plant model elements.
-
Remove the Kernel Control Center’s function to reset the position of a vehicle. Users should now set the vehicle’s integration level to
TO_BE_IGNORED
, instead. -
Allow the loopback driver to be disabled completely.
-
Minor improvements to the configuration interface API.
-
Mark all
AdapterCommand
implementations in the base API as deprecated. These commands' functionality is specific to the respective communication adapter and should be implemented and used there.
-
4.13. Version 4.10 (2018-08-07)
-
New features:
-
Introduce an explicit integration level property for vehicles that expresses to what degree a vehicle should be integrated into the system. (Setting the integration level to
TO_BE_UTILIZED
replaces the manual dispatching that was previously used to integrate a vehicle.) -
Allow recomputing of a vehicle’s route after finishing a drive order or on topology changes.
-
Allow vehicle themes to define not only the graphics used, but also the content and style of vehicle labels in the Plant Overview.
-
Enable the web API to optionally use HTTPS.
-
Allow an optional set of properties for meta information to be stored in a model, and use it to store the model file’s last-modified time stamp in it.
-
-
Bugs fixed:
-
Prevent moving of model elements in the Plant Overview when in mode OPERATING.
-
Prevent creation of groups in the Plant Overview when in mode OPERATING.
-
Properly handle renaming of paths and path names that do not follow the default naming pattern in the Plant Overview.
-
Multiple minor fixes for the integration project generator.
-
-
Other changes:
-
When using the Plant Overview or Kernel Control Center with SSL-encrypted RMI, verification of the server certificate is now mandatory.
-
Adjust the default docking frames layout in the Plant Overview for mode OPERATING a bit to make better use of wide-screen displays.
-
Include web API documentation generated by Swagger in the distribution.
-
4.14. Version 4.9.1 (2018-04-26)
-
Bugs fixed:
-
Include the
buildSrc/
directory in the source distribution. -
Properly display vehicle routes after adding driving course views in the Plant Overview.
-
Properly disconnect the plant overview from the kernel when switching to modelling mode.
-
4.15. Version 4.9 (2018-04-16)
-
Bugs fixed:
-
Fix jumping mouse cursor when dragging/moving model elements in the Plant Overview in some cases.
-
-
New features:
-
Allow the kernel to work headless, i.e. without a GUI. Introduce a separate Kernel Control Center application that provides the same functionality and can be attached to the kernel as a client.
-
Provide a single-threaded executor for sequential processing of tasks in the kernel, which helps avoiding locking and visibility issues. Use this executor for most tasks, especially the ones manipulating kernel state, that were previously executed concurrently.
-
Introduce a web API (HTTP + JSON), intended to replace the proprietary TCP/IP host interface, which is now deprecated.
-
Introduce an API for pluggable model import and export implementations in the Plant Overview.
-
-
Other changes:
-
Split the Kernel interface into aspect-specific service interfaces.
-
Provide a (more) simple event API, including an event bus implementation as a replacement for the previously used MBassador and event hub.
-
Overhaul the default dispatcher implementation to improve maintainability and extensibility.
-
Allow suggestions for property values in the Plant Overview to depend on the key.
-
Improve API and deprecate classes and methods in lots of places.
-
Improve default formatting of log output for better readability.
-
4.16. Version 4.8.4 (2018-02-12)
-
Bugs fixed:
-
Fix erroneous behaviour for renaming of points when points are block members in the plant model.
-
4.17. Version 4.8.3 (2018-01-24)
-
Bugs fixed:
-
Fix processing of XML messages received via the TCP-based host interface.
-
4.18. Version 4.8.2 (2017-12-15)
-
Bugs fixed:
-
Properly store links between locations and points in the unified XML file format when the link was drawn from the location instead of from the point.
-
4.19. Version 4.8.1 (2017-12-05)
-
Bugs fixed:
-
Ensure that marshalling and unmarshalling of XML data always uses UTF-8. This fixes problems with plant models containing special characters (like German umlauts) e.g. in element names.
-
4.20. Version 4.8 (2017-11-28)
-
Bugs fixed:
-
Properly copy model coordinates to layout coordinates in the plant overview without invalidating the model.
-
Adjust erroneous behaviour in the load generator plugin panel and properly update its GUI elements depending on its state.
-
-
New features:
-
Add a category property to transport orders and order sequences and a set of processable categories to vehicles, allowing a finer-grained selection of processable orders.
-
Prepare proper encryption for RMI connections.
-
-
Other changes:
-
Use the unified (i.e. the kernel’s) XML file format to load and save plant models in the plant overview by default. (The plant overview’s previous default file format is still supported for both loading and saving. Support for the old format will eventually be removed in a future version, though, so users are advised to switch to the new format.)
-
Remove some unmaintained features from the loopback adapter and its GUI.
-
4.21. Version 4.7 (2017-10-11)
-
Bugs fixed:
-
Ensure that scheduler modules are properly terminated.
-
-
New features:
-
Allow the colors used for vehicles' routes be defined in the plant model.
-
Have the default dispatcher periodically check for idle vehicles that could be dispatched. This picks up vehicles that have not been in a dispatchable state when dispatching them was previously tried.
-
4.22. Version 4.6 (2017-09-25)
-
Bugs fixed:
-
Don’t mark a drive order as finished if the transport order it belongs to was withdrawn.
-
Properly update the vehicles' states in the kernel control center’s vehicle list.
-
When creating locations, properly attach links to the respective points, too.
-
When renaming a point in the plant overview, properly update blocks containing paths starting or ending at this point.
-
Avoid NPE when the transport order referenced in a
Vehicle
instance does not exist in the kernel any more.
-
-
New features:
-
Allow the kernel’s RMI port to be set via configuration.
-
Allow preferred parking positions and recharge locations to be set as properties on
Vehicle
instances. -
In XML status channel messages, add a reference to a vehicle’s transport order, and vice versa.
-
Allow the kernel’s order cleanup task to be adjusted via predicates that approve cleanup of transport orders and order sequences.
-
-
Other changes:
-
Deprecate
VehicleCommAdapter.State
. It’s not really used anywhere, and the enum elements are fuzzy/incomplete, anyway.
-
4.23. Version 4.5 (2017-08-10)
-
Switched to a plain JGraphT-based implementation of Dijkstra’s algorithm for routing.
-
Deprecated static routes. All routes are supposed to be computed by the router implementation. (Both the kernel and the plant overview will still be able to load models containing static routes. The button for creating new static routes in the plant overview has been removed, however.)
-
Introduced caching for configuration entries read via binding interfaces.
-
Prepared immutability for plant model and transport order objects within the kernel.
-
Deprecated dummy references to objects as well as the superfluous ID attribute in
TCSObject
. -
Made JHotDraw and Docking Frames libraries available as Maven artifacts so they do not have to be kept in the sources distribution.
-
Updated Mockito to 2.8.47.
4.24. Version 4.4 (2017-07-17)
-
Fixed a performance issue with building routing tables in the default router caused by excessive calling of methods on a configuration binding interface.
-
Introduced a method to explicitly trigger routing topology updates via the
Kernel
interface instead of explicitly updating it whenever a path was locked/unlocked to avoid redundant computations. -
Improved behaviour with scaling the course model in the plant overview.
-
Added a mechanism to provide project-specific suggestions for keys and values when editing object properties in the plant overview.
-
Added GUI components to set vehicle properties from the loopback driver’s panel.
-
Deprecated explicit event filters, which make the code more verbose without adding any value.
-
Some small bugfixes and improvements.
4.25. Version 4.3 (2017-06-30)
-
Introduced configuration based on binding interfaces and cfg4j to provide implementations for these, and deprecated the previously used configuration classes. Implications and side effects:
-
Made documentation of configuration entries (for users) easy via annotations.
-
Switched configuration files from XML to properties.
-
Switched to read-only configuration.
-
-
Improved maintainability and reusability of the default dispatcher implementation.
-
Updated Gradle wrapper to 3.5.
-
Many small bugfixes and improvements.
4.26. Version 4.2 (2017-05-29)
-
Simplify the kernel API by using transfer objects to create plant models and transport orders. Expect plant models to be transferred as a whole instead of updating existing model elements with multiple calls.
-
Actually make use of modules in the default scheduler: A scheduler module can be used to influence the allocation process of resources to vehicles (e.g. to wait for infrastructure feedback before letting a vehicle pass a path).
-
A location type’s (default) symbol can now be overwritten by a location to display an empty symbol.
-
Fix a bug where a large plant model could be loaded multiple times when loaded from the kernel into the plant overview.
4.27. Version 4.1 (2017-04-20)
-
Added functionality for reading and writing the kernel’s plant model file format to the plant overview client.
-
Added bezier paths with three control points to the plant overview client.
-
Added a panel to observe resource allocations to the plant overview client.
-
Added a dialog requiring user confirmation before changing the driver associated with a vehicle to prevent accidental changes.
-
Improved performance for transferring model data from the plant overview client to the kernel.
-
Improved selection of colors used for marking vehicles' routes in the plant overview client.
-
Improved performance of routing table computation by computing only one table shared by all vehicles by default. (Computation of separate tables for vehicles is optionally possible.)
-
Many small bugfixes and improvements to code and documentation.
4.28. Version 4.0.1 (2017-02-25)
-
Fix a potential deadlock in the default scheduler.
4.29. Version 4.0 (2017-02-11)
-
Split the base library into a base API, an injection API and a library with commonly used utility classes to reduce the load of transitive dependencies for API users.
-
Heavily cleaned up the APIs, including some backwards-incompatible changes (mainly renaming and removing previously deprecated elements). Notable examples:
-
Moved vehicle communication adapter base classes to
org.opentcs.drivers.vehicle
and named them more appropriately. -
Removed TCP/IP communication implementation from
org.opentcs.util.communication.tcp
and a few more utility classes. Maintaining these is out of the openTCS project’s scope.
-
-
Greatly improved extension and customization capabilities for both the kernel and plant overview applications by applying dependency injection in more places.
-
Communication adapters may now participate with dependency injection.
-
Default kernel strategies may now easily be overridden.
-
-
Simplified the default
Scheduler
implementation. -
Switched logging to SLF4J.
-
Improved project documentation for both users and developers and migrated to Asciidoctor for easier maintenance.
-
Updated Guice to 4.1.0.
-
Updated Guava to 19.0.
-
Updated JDOM to 2.0.6.
-
Updated Gradle to 2.13.
-
Many small bugfixes and improvements.
4.30. Version 3.2 (2016-01-19)
-
Switched to Gradle as the build management system for improved dependency management and release process. This introduces cleanly separate subprojects for base library, basic strategies library, kernel application, plant overview application and documentation. It also adds clean separation of application code and Guice configuration.
-
Added an event bus-backed event hub implementation for the kernel to distribute events sent by e.g. communication adapters and make it possible to forward them to kernel clients. Also add method
publishEvent()
toBasicCommunicationAdapter
to allow communication adapters to use it. -
Adjusted the dispatcher’s and kernel’s methods for withdrawing transport orders to explicitly state whether the order should be withdrawn regularly or aborted immediately, which makes them deterministic for the caller.
-
Moved code for handling transport order states/activations from the kernel to the dispatcher implementation for better separation of concerns.
-
Improved the use of dependency injection via Guice in the kernel to make the code more modular.
-
Added annotation
@ScheduledApiChange
for marking scheduled incompatible API changes. -
Updated library Guava to 18.0.
-
Many small fixes and improvements.
4.31. Version 3.1.1 (2015-05-06)
-
Fix a crash in the plant overview client that occured when the user tried to add a drive order to a transport order.
4.32. Version 3.1 (2015-03-23)
-
Fix the encoding of model files written by the plant overview client.
-
Fix a problem with renaming points that resulted in broken model files.
-
Fix a crash that happened when trying to open a context menu on a vehicle in modelling mode.
-
Properly set the scale factor when loading a model from a file.
-
Avoid a crash when trying to create a transport order with a model that does not contain any locations/transport order destinations.
-
Fix direction indicators of paths not being displayed properly after loading a model from a file.
-
Fix outdated documentation in a couple of places.
4.33. Version 3.0 (2014-11-25)
-
The plant overview client can now be used for offline modelling, i.e. without requiring a permanent connection to the kernel.
-
To further reflect these changes, the plant overview client now maintains its operating mode independently from the kernel’s state. If the user sets the mode of the plant overview client to
OPERATING
while the kernel is in modelling mode, an empty model will be displayed and the actual model will be loaded as soon as the connected kernel switches back to operating mode. Furthermore, this allows to modify the driving course model in the plant overview client while the kernel remains in operating mode. See the manual for more information. -
The management of course model files was moved to the plant overview client. As of this version, the kernel stores only a single driving course model which can be persisted by selecting the corresponding menu item in the graphical user interface of the plant overview client. Changes made to the model in the plant overview client must be explicitly transferred to the kernel. To migrate all of your existing models to this new version, please refer to the manual.
-
Changes made to the Kernel API:
-
Method
Set<String> getModelNames()
was changed toString getModelName()
, as from now on there exists only one model at a time. -
Method
loadModel(String modelName)
no longer requires/accepts a parameter. -
Method
saveModel(String modelName, boolean overwrite)
no longer accepts theboolean
parameter and overwrites the model automatically. -
Method
removeModel(String rmName)
no longer requires/accepts a parameter. -
Methods
createLayout(byte[] layoutData)
andsetLayoutData(TCSObjectReference<Layout> ref, byte[] newData)
have been removed along with classLayout
.
-
-
Updated library Google Guava to 17.0.
-
Updated library JAXB to 2.2.7.
-
Updated project to Java 8.
4.34. Version 2.7.1 (2014-06-30)
-
Fixed a potential crash with switching to plant operation mode when the model contained static routes.
4.35. Version 2.7 (2014-06-25)
-
Updated library Docking Frames to 1.1.2p11.
-
Added library Google Guava 16.0.1 for better code readability via small utility methods.
-
Added position coordinates to locations.
-
Added synchronization of model and layout coordinates for points and locations.
-
Fixed reconstruction of routing tables when locking/unlocking paths in plant operation mode.
-
Reimplemented the former Dijkstra-based routing table construction, now providing one based on breadth-first search and an alternative based on depth-first search, and use pluggable routing cost functions.
-
Implemented a proper life cycle for plant overview plugin panels.
-
Modified model management to not allow model names to differ in the case of their spelling only to prevent inconsistencies on Windows systems.
-
Replaced the reference on a Location in a MovementCommand with the Location itself to provide more information to the vehicle driver.
-
Made more wide-spread use of dependency injection via Guice and refactored, cleaned up and simplified source code in many places, primarily in the plant overview client.
-
Many small bugfixes and improvements.
4.36. Version 2.6.1 (2014-03-14)
-
Properly color the route for vehicles that have just been created and not loaded from an existing plant model.
-
Fix loading plant models created by older versions of openTCS that contained certain path liner types.
-
Properly set point types as read from the plant model in the plant overview client.
-
Do not provide a clickable graphical figure in the plant overview client for vehicles that should actually be invisible.
4.37. Version 2.6 (2014-02-28)
-
Updated library Docking Frames to 1.1.2p10e.
-
Updated library JDOM to 2.0.5.
-
Updated library JFreeChart to 1.0.17, including an update of JCommon to 1.0.21.
-
Updated library JUnit to 4.11, including the addition of Hamcrest 1.3.
-
Updated DocBook style sheets to 1.78.1.
-
Added library Google Guice 3.0 for dependency injection and thus better modularity.
-
Added library Mockito 1.9.5 to simplify and improve the included unit tests.
-
Downgraded the Saxon XSL processor to version 6.5.5, as more recent versions seem to have deficiencies with DocBook to FO transformations.
-
Merged the experimental generic client application into the plant overview client, which can now be extended with plugin-like panels providing custom functionality.
-
Added plugin panels for load generation and statistics reports into the plant overview client.
-
Improved the undo/redo functionality of the plant overview client in modelling mode.
-
Temporarily disabled the copy-and-paste functionality of the plant overview client in modelling mode until some major usability issues have been sorted out.
-
Improved editing of multiple driving course elements at the same time.
-
Temporarily disabled the possibility to add background graphics until this works more reliably.
-
Unified look-and-feel and fonts in the kernel control center and the plant overview client and removed the selection menu for different Swing look-and-feels from the kernel control center.
-
Improved localization of the plant overview client.
-
Removed the kernel’s explicit "simulation" mode, which was never fully implemented or used and provided practically no advantages over the normal mode of operation, in which vehicles can be simulated using the loopback driver.
-
Fixed/improved GUI layout in multiple places of the kernel control center.
-
Many bugfixes and improvements to code and documentation.
4.38. Version 2.5 (2013-12-18)
-
Added library Docking Frames 1.1.2-P8c.
-
Made some panels in the plant overview client (un)dockable.
-
Added a panel with an overview of all vehicles and their respective states to the plant overview client.
-
Added a pause button to the plant overview client to pause/stop all active vehicles at once.
-
Introduced pluggable themes to customize the appearance of locations and vehicles in the plant overview.
-
Added generic grouping of driving course elements, primarily to support visualization in the plant overview.
-
Translated the user manual to English.
-
Many small bugfixes and improvements to both the code and the documentation.
4.39. Version 2.4.2 (2013-07-29)
-
Updated the XML Schema definitions for the host interface.
4.40. Version 2.4.1 (2013-05-30)
-
Updated the visualization client, including many bug fixes, usability improvements and internationalization (English and German language).
-
Properly included a vehicle’s length when persisting/materializing a course model.
-
Removed an erroneous JAXB annotation that led to an exception when trying to persist load generator input data in the generic client.
-
Changed the startup scripts/batch files to look for extension JARs in
lib/openTCS-extensions/
instead oflib/
.
4.41. Version 2.4 (2013-02-07)
-
Updated JDOM to 2.0.4.
-
Updated JHotDraw to 7.6.
-
Updated Checkstyle to 5.6.
-
Integrated Saxon 9.4 and Apache FOP 1.1 into the build for processing the DocBook manual.
-
Major overhaul of the visualization client, including: Integration of both modes (modelling and visualization) into a single application, preparation for proper localization and integration of the course layout information into model data structures, making it easier to create complete models including course layout via the kernel API. (This basically allows to implement other clients that can create new models or import/convert existing models from other applications.) Using models containing "old" layout data is still supported but deprecated.
-
Changed license of the visualization client to LGPL.
-
Improved support for vehicle energy management: For each vehicle, a specific charging operation may be specified (default: “CHARGE”), which will be used by the dispatcher to automatically create orders to recharge the vehicle’s energy source.
-
Improved strategies for selecting parking positions and charging locations.
-
Changed initial processing state of a vehicle to
UNAVAILABLE
, preventing immediate dispatching of vehicles on startup. -
Improved kernel methods for withdrawing orders from vehicles and allow setting a vehicle’s processing state to
UNAVAILABLE
to prevent it being dispatched again immediately. -
Added kernel method dispatchVehicle() to allow vehicles in state
UNAVAILABLE
to be dispatched again. -
(Re-)Added 'dispensable' flag to class TransportOrder to indicate that an order may be withdrawn automatically by the dispatcher. (Primarily used to make parking orders abortable.)
-
Improved handling of order sequences.
-
Added a simple, preliminary implementation of data collection for statistics based on event data in
org.opentcs.util.statistics
. -
Removed class
VehicleType
and all references to it completely. All information about the vehicles themselves is stored in Vehicle, now, simplifying the code in whichVehicleType
was used. -
Added
Vehicle.State.UNAVAILABLE
for vehicles that are not in an ERROR state but currently remotely usable, either. (Examples: manual or semi-automatic modes) -
Added methods
Kernel.sendCommAdapterMessage()
andCommunicationAdapter.processMessage()
to allow clients to send generic messages to communication adapters associated with vehicles. -
Removed methods
stop()
,pause()
andresume()
from communication adapter interface as they had not served any purpose for long time. -
Removed kernel method
getInfoText()
, for which thequery()
method has served as a replacement for a while, now. -
Properly propagate exceptions to clients connected via the RMI proxy.
-
Small bug fixes and improvements to code and documentation.
4.42. Version 2.3 (2012-09-17)
-
Moved sources of the generic client into the main project’s source tree.
-
Updated JFreeChart to 1.0.14.
-
Use JFreeChart for drawing the velocity graph of a communication adapter.
-
Instead of emitting an event only after the kernel’s state changed, emit an additional one before the state transition.
-
Implemented org.opentcs.data.order.OrderSequence for processes spanning more than one transport order that should be processed by a single vehicle.
-
Added a set of properties to DriveOrder.Destination and MovementCommand, allowing an order/command to carry additional information for a communication adapter or vehicle, if necessary.
-
(Re-)Added
State.CHARGING
and mergedState.DRIVING
andState.OPERATING
intoState.EXECUTING
inorg.opentcs.data.model.Vehicle
. -
Added a settable threshold for critical and good energy levels of a vehicle.
-
Added a vehicle specific charging operation to Vehicle, settable by the communication adapter.
-
Recompute routing tables when (un)locking a path.
-
Remove
org.opentcs.data.model.Path.Action
, which wasn’t really used anywhere and doesn’t provide any benefit over a Path’s properties. -
Remove a lot of deprecated methods in the kernel interface.
-
Replace the existing dispatcher with one that is aware of order sequences and vehicles' energy levels and automatically creates orders to recharge vehicles.
-
Deprecated and largely removed references to
org.opentcs.data.model.VehicleType
, simplifying some code. -
Bug fix in
KernelStateOperating.activateTransportOrder()
: Use our own references to the transport order, not the one we received as a parameter, as that causes problems if the order has been renamed but a reference with the old name is being used by the calling client. -
Moved classes to packages properly separated by functionality, and removed a few utility classes that were not used and didn’t provide much. (This effectively means the API provided by the base JAR changed. Fixing any resulting broken imports should be the only thing required to use the new version.)
4.43. Version 2.2 (2012-07-10)
-
Published as free open source software (license: the MIT license, see
LICENSE.txt
) - Requires Java 1.7 -
Update JDOM to 2.0.2.
-
Integrated kernel and driver GUI into a single application.
-
Basic support for energy management
-
Support for dynamic load handling devices reported by vehicles/vehicle drivers to the kernel
-
Simplified integration of vehicle drivers: Vehicle drivers in the class path are found automatically using
java.util.ServiceLoader
. -
Automatic backup copies (in
$KERNEL/data/backups/
) when saving models -
Switched from properties to XML for configuration files
-
Simplified and more consistent kernel API
-
Many small bug fixes and adjustments of the included strategies
5. Contributors
We are grateful for anyone helping us to improve openTCS by contributing code or documentation. So far, the developers involved were/are (in alphabetical order by last name):
-
Hubert Buechter
-
Iryna Felko
-
Martin Grzenia
-
Preity Gupta
-
Heinz Huber
-
Olaf Krause
-
Tobias Marquardt
-
Sebastian Naumann
-
Volkmar Pontow
-
Leonard Schüngel
-
Philipp Seifert
-
Andreas Trautmann
-
Stefan Walter
-
Mats Wilhelm
-
Mustafa Yalciner
-
Youssef Zaki
If you have contributed to openTCS and we have missed you on this list, please accept our apologies and send us an e-mail via info@opentcs.org.