• Ready for review
  • 5.4 Robot > Architecture

    This page shows the ROS architecture currently running on the Duckiedrone, inclusive of nodes and topics, for informational purposes. A set of tools is made available to investigate data transfer.

    Robot > Architecture provides an interactive map of the ROS nodes running on the DD21

     

    If you are not with ROS (Robotic Operating System) this is a good time to pause and check the tutorials on ROS.org.

    In a nutshell: ROS is a middleware, i.e., the postal service of data between “nodes” in a robot. Amongst all middlewares (there are many), ROS is like Mc Donalds: maybe not the best food, but it serves billions every day and you know what you’ll get anywhere you walk into one.

    Duckietown relies on ROS to transfer data between various places in the mind of the robot. A quick glossary:

    • Nodes: one or more functions that are grouped together. Nodes might take inputs (i.e., “subscribe” to topics) and provide outputs (i.e., “publish” topics)

    • Topics: the "pipes" that connect nodes. These pipes can be used to transfer data.

    • Messages: the actual data that might (or not) be transferred inside topics.

     

    To get a practical idea, try going to the Dashboard > Mission Control and clicking on the properties of any block streaming data, e.g., the “Motors PWM” block and notice where the data comes from:

     

    The dashboard blocks stream messages coming from ROS topics; in the case of motors amelia/flight_controller_node/motors

    Features

     

    This architecture page allows investigating the ROS graph of active nodes on the DD21. A “Toolbox” is provided to filter the architecture map’s nodes and topics based on a number of properties:

     

    Nodes:

    • Filter: select enabled or active nodes;

    • Color: color codes based on health, status, and type;

    • Cluster: rearranges map based on module or machine on which nodes are running.

     

    Topics:

    • Filter: only used topics or subscribed to;

    • Width: changes the width of arrows based on the amount of data being transferred (frequency or bandwidth);

    • Color: based on health or type.