ATOS version 1.0.0
What's Changed
- Public release under MPL 2.0: ATOS, which is the product of several years' research projects at AstaZero, has now been released under the MPL 2.0 license. This will greatly simplify collaboration between academia, industry and governmental actors on experimental applied AV evaluation methods. The license was chosen such that it would not impede inclusion in other code bases via copyleft while still encouraging contributions from those improving the code.
- Remade system architecture to be based on ROS2: As part of the public release, this code base has been renamed from Maestro to ATOS. Furthermore, ATOS has been adapted to be based on ROS2 instead of the previous message queue based structure. All modules have been remade to use ROS2's callback-based structure. The goal of this change is to enable integration with other open source packages in the ROS2 ecosystem as well as to reduce communication boilerplate.
- New module: EsminiAdapter: This module interfaces with esmini's ScenarioEngine API.
It has the following responsibilities:
1)Load an OpenSCENARIO-file and extract static trajectories from it.
2)Dynamically, while the test is running, execute actions based on triggers specified in the OpenSCENARIO-file. - Replaced GUC method of sending control commands, in favor of a web-gui: Introduced ControlPanel, a simple web interface for sending control commands to ATOS.
Moreover, integrated with Foxglove Studio, enabling visualization of live-test data, and static visual elements such as point clouds. - New module ObjectControl: the module RelativeKinematics was renamed and adapted to replace the old ObjectControl module. The new module is OO and based on C++ in contrast with the old C based module. ObjectControl uses state classes and events, object connection handlers, object listeners and a class for interfacing with any outside objects. It is built according to an event-driven structure instead of a sequential exection structure.
- Module modification: DirectControl: This module now opens a socket that listens for incoming control messages (containing throttle, brake and steering wheel angle) specified here. The control messages are forwarded to ObjectControl, which then sends control signals to affected objects.
- New module: OSIAdapter. Replaces Visualization module. This module collects MONR-data from connected objects in ATOS, and then converts it to ASAM OSI. The module then sends the data over TCP/UDP to one or multiple clients. The send rate for the messages can be set by the user.
- New Module MQTTBridge: Added a new module that allows for publishing of V2X formatted data from the ATOS system to a MQTT broker. The module subscribes to the atos/v2x_message, parses the content of this msg to JSON and is then published over MQTT to a specified topic.
- New module TrajectoryletStreamer: Added a new module which reads trajectories and splits them into smaller chunks based on the current time in relation to the planned trajectory time. The module is intended for testing of dynamic trajectory related functions without having to solve the chunk generation problem. Once that functionality is ready, this module can easily be swapped out i.e., this is a test mock of sorts.
- ISO 22133 released version support: ObjectControl has been updated to match the released version of the communication standard ISO 22133 "Test object monitoring and control for active safety and automated/autonomous vehicle testing".
- New module: PointcloudPublisher. PointcloudPublisher reads site scans in the form of
.pcd
-files, and publishes them on relevant topics. - Clearing state: A new state that the ObjectControl enters as an intermediate state, expressing the will of the control center to exit the aborting state, and thus allow all objects to disarm.
- Back-to-start for single objects: a method was implemented to use regular test states but with autogenerated trajectories to return objects to their starting positions. The module is not adapted to the ROS2 structure and can therefore not currently be run.
- Updated the OSEM message to contain a proj string: Added a proj string to increase interoperability
- Adapted settings handling to ROS parameters structure: ROS nodes now have parameters that can be set. These parameters are set in params.yaml and are read on program start. The parameters are currently never re-read since no "parameters changed" handlers yet exist. The parameters replace the old test.conf file which is in the process of being phased out.
- Replaced shared memory with ROS services or topics: To fully embrace the ROS structure and reduce implementation coupling, the data dictionary and shared memory implementations were removed. Instead, nodes must call services of other nodes to get their data or listen to relevant topics. While this likely means a slight loss in performance it is not likely to be large since ROS2 uses shared memory under the hood. The gains on the other hand are that there is less code to maintain and it functions in a more standardised, easily-extended and cross-dependency reducing way.
- Removed util submodule: Since ATOS only used parts of the util repository, the relevant parts of that repository were lifted out or made into separate repositories. All definitions for messages that used to be sent over message queue were remade to the ROS IDL format and moved into the atos_interfaces repository. Submodule linking has been updated so that iso22133 and atos_interfaces are subrepositories.
- Scenario generation scripts created for public release demo: Automated creation of OpenSCENARIO files that ATOS can be configured to run. Different files with varying scenario complexity.
- Updated documentation - READMEs, diagrams and getting started guides
Various clarifications and fixes that facilitate usage and understanding
New Contributors
- @victorjarlow made their first contribution in #417
- @samuelthoren made their first contribution in #451
- @Robert108 made their first contribution in #475
- @seifbourogaa made their first contribution in #500
Full Changelog: v0.7.0...v1.0.0