There has been some discussion internally at AutonomouStuff (and in the community - see https://gitlab.com/autowarefoundation/autoware.ai/core_planning/issues/9) about what in Autoware.ai should be considered “runtime-configurable” parameters. Since we are using launch files to run Autoware.ai in a repeatable configuration and the original design targeted using the UI provided by
runtime_manager, we have run into several cases of nodes making assumptions about things changing during runtime that some of us at AS think should be static once the node is launched. I’m using this opportunity to start a discussion about how the community feels regarding this issue. Here are a list of items which could be changed within a node, some of which are currently configurable through the UI (using a message on a
/config topic) and some of which are only configurable as start-up parameters, either through ROS params or command-line arguments:
- The names of topics to which the node will publish/subscribe (i.e. instead of using topic name remapping, some nodes accept parameters for the topic names)
- Whether a node will publish/subscribe to specific information, regardless of topic name (e.g. if using a node in conjunction with another node, change the advertisement of topics to account for that node’s subscriptions/publications)
- Internal algorithm parameters which affect the output values of messages published on topics but not the topic names (e.g. max_velocity, min_steering_angle, etc.)
- Whether a node actually publishes data or not to a given topic (even if the node is already advertising a topic, a parameter sometimes tells it to not publish any data on that topic)
There are two major methods that users of Autoware.ai use today for launching nodes: the
runtime_manager UI and launch files. When instructions are given for how to do something in the UI, you can ask users to launch nodes in a specific order. However, when nodes are launched from launch files, the order of launch is indeterminate because each node is launched as its own process and process scheduling is indeterminate.
I would like to make the following basic assumption (and would like to hear if anyone disagrees): I believe that any node, when launched, should not depend on the existence of any other node for determining its runtime configuration.
Opinion: I believe that topic names and the advertisement of or subscription to those topics should be decided when a node is launched and should not be changed while the node is running (1 and 2 above). I’m personally just fine with parameters which affect only the data being published to topics (3 and 4 above) being modifiable while a node is running.
Here’s a concrete example: Currently, the
waypoint_replanner node gets the list of running nodes from
roscore and looks for a node named
decision_maker. It then changes its topic subscriptions/publications based on whether a node with the name
decision_maker is currently running or not. I believe this is bad practice and a startup parameter (e.g.
use_decision_maker) should be set at launch and the topics should not change.
Opinions from the community?