Verify All Non-Trivial Nodes Implement 3-tier Design Pattern
Description
All non-trivial nodes in Autoware.Auto should (generally) follow a 3-tier design pattern. This does not appear to be true for the entire stack at the moment.
Expected behavior
All non-trivial nodes should (generally) have, at a minimum, 3 levels of abstraction. These look something like this:
- A "core," pure C++ class which performs all basic mathematical and utility functions which are not ROS-related.
- This class may use ROS utitilities such as logging, but such use must be justified in terms of why it cannot be done via the class's external interface (e.g. the enclosing node uses information obtained via the class's external interface to populate log messages).
- A "ROS Node" class which inherits from
rclcpp::Node
, handles all ROS-specific functions, and instantiates the class defined in 1. - A "ROS Executable" which contains the
main
function, creates an instance of the class defined in 2, and handlesrclcpp::spin()
in some way.
Definition of Done
- Implement this pattern in all packages in the Autoware.Auto stack that are determined to be complex enough to require it.
-
coveriance_insertion_node
- create core class (possibly move to
tools
?)
- create core class (possibly move to
-
lidar_utils
- remove dependency on
rclcpp
if no ROS functions are used
- remove dependency on
-
velodyne_driver
- remove dependency on
rclcpp
if no ROS functions are used
- remove dependency on
-
xsens_driver
- remove dependency on
rclcpp
if no ROS functions are used
- remove dependency on
-
localization_common
- remove dependency on
rclcpp
if no ROS functions are used
- remove dependency on
-
ndt_nodes
- move core functionality in
map_publisher
to new package orcommon
components, if complex enough or potentially re-usable
- move core functionality in
-
lane_planner
- remove dependency on
rclcpp
if no ROS functions are used
- remove dependency on
-
object_collision_estimator
- remove dependency on
rclcpp
if no ROS functions are used
- remove dependency on
-
parking_planner_node
- move core functionality to
parking_planner
package, if possible
- move core functionality to
-
recordreplay_planner
- remove dependency on
rclcpp
if no ROS functions are used
- remove dependency on
-
point_cloud_filter_transform_nodes
- move core functionality out of package either into new package or
common
components likelidar_utils
- move core functionality out of package either into new package or
-
point_cloud_fusion
- move core functionality out of package either into new package or
common
components likelidar_utils
- move core functionality out of package either into new package or
-
ray_ground_classifier_nodes
- move core functionality to
ray_ground_classifier
package, if possible
- move core functionality to
-
euclidean_cluster_nodes
- move funcitionality in
common
file to eithereuclidean_cluster
orcommon
components likelidar_utils
- move funcitionality in
-
joystick_vehicle_interface
- move core functionality to new package or
common
components, if complex enough or potentially re-usable
- move core functionality to new package or
-
lidar_integration
- move core functionality to new package or
common
components, if complex enough or potentially re-usable
- move core functionality to new package or
-
Edited by Joshua Whitley