The reference_system
package
The reference_system
package provides reusable base components (nodes) that allow users
to construct any number of "reference systems" to replicate real-world scenarios on
real-world hardware.
The purpose of these components are not to provide the most efficient way of writing a node but rather a reusable and repeatible way of writing a node so that it can be used to reliably test various key performance indicators later on.
Base node types
Most real-world systems can be boiled down to only a handful of base node "types" that are then repeated to make the real-world system. This does not cover all possible node types, however it allows for numerous complicated systems to be developed using the same base building blocks.
- Sensor Node
- input node to system
- one publisher, zero subscribers
- publishes message cyclically at some fixed frequency
- Transform Node
- one subscriber, one publisher
- starts processing for N milliseconds after a message is received
- publishes message after processing is complete
- Fusion Node
- 2 subscribers, one publisher
- starts processing for N milliseconds after a message is received from all subscriptions
- publishes message after processing is complete
- Cyclic Node
- N subscribers, one publisher
- cyclically processes all received messages since the last cycle for N milliseconds
- publishes message after processing is complete
- Command Node
- prints output stats everytime a message is received
- Intersection Node
- behaves like N transform nodes
- N subscribers, N publisher bundled together in one-to-one connections
- starts processing on connection where sample was received
- publishes message after processing is complete
These basic building-block nodes can be mixed-and-matched to create quite complex systems that replicate real-world scenarios to benchmark different configurations against each other.
New base node types can be added if necessary.
Testing and Dependencies
Common benchmarking scripts are provided within the reference_system/reference_system_py
directory which is a python module itself. The methods and tools provided there can assist
with running standardized benchmarking tests and with generating reports as well. See
the autoware_reference_system
for an example
Unit and integration tests have also been written for the reference_system
package and can be found
within the test
directory. If a new system type is
to be added, new unit and integration tests should also be added as well.