OpenJAUS

Running the OpenJAUS Node Manager

1. Node Manager Design

2. Running ojNodeManager

3. Typical ojNodeManager behavior

4. ojNodeManager Configuration File

OpenJAUS Node Manager Design

The Node Manager is a JAUS component which provides a unique set of capabilities which are required by all JAUS nodes. These include routing of messages within and between JAUS nodes, discovery of other JAUS entities and management of local resources such as other JAUS components. Similar to the Node Manager, the Communicator provides these capabilities between JAUS subsystems, as seen in the figure below. Due to the commonality between the JAUS Node Manager and the JAUS Communicator, the OpenJAUS Node Manager implements both components and can behavior as either a JAUS Node gateway, a Subsystem gateway or both.


(Image from the JAUS Reference Architecture ver. 3.3 Volume II, part 1)

The OpenJAUS Node Manager's design is shown in the figure below. It is implemented in a modular fashion to more easily allow the addition and subtraction of capabilities (particularly transport interfaces) to the system. Currently the OpenJAUS Node Manager has implemented three transport interfaces. These are the OPC UDP Interface, the JUDP interface and the OpenJAUS Component Interface. The OPC transport is a legacy interface which was commonly used by the JAUS OCUs and Payloads Committee (OCU) for interoperability experiments. The OPC interface is documented here. The JUDP transport interface supersedes the ETG interface and is documented in SAE document AS-5669. The JUDP interface is recommended for future JAUS systems and should be used where legacy support is not necessary. The OpenJAUS Component Interface is an UDP-based protocol through which components local to the machine can communicate with the local Node Manager through the loopback UDP device. Traffic over the OpenJAUS Component Interface is non-JAUS and is documented in the OpenJAUS Node Manager Interface document. These interfaces can be configured and enabled or disabled in the OpenJAUS Node Manager's configuration file (more details on the configuration file is available here).

Running ojNodeManager

The ojNodeManager project is an implementation of the OpenJAUS Node Manager. It is designed to be cross-platform and run as a console application in both Windows and Linux. Once compiled (see the tutorial on compiling the codebase here), the ojNodeManger project can be executed. Before executing ojNodeManager, the nodeManager.conf file must be properly configured properly. More information about the configuration file can be found further in this tutorial. Once run, the output from the Node Manager will appear similar to below:

This console application provides a succinct set of user inputs for user interaction. These are listed below:

t - Print the JAUS System Tree
This shows all known JAUS Subsystems, Nodes and Components which the Node Manager is aware of. Sample output of this command is shown below:

OJSubsystem-3
   OJNode-1
      OpenJAUS Node Manager (NodeManager)-1.1
         Services (2): 0, 1,
   OJNode-6
      OpenJAUS Node Manager (NodeManager)-1.1
         Services (2): 0, 1,
      pd (PrimitiveDriver)-33.1
         Services (2): 0, 33,
      gpos (GlobalPoseSensor)-38.1
         Services (2): 0, 38,
      vss (VelocityStateSensor)-42.1
         Services (2): 0, 42,
      Waypoint Driver (GlobalWaypointDriver)-45.1
         Services (2): 0, 45,

T - Print Detailed JAUS System Tree
This prints a more detailed version of the system topology. In this view, each service is listed along with its collection of input and output messages. This is displayed in the 
pattern of: COMMAND_CODE (SUPPORTED PRESENCE VECTOR). Below is an example of the output from the ojVehicleSim's Primitive Driver component.

pd (PrimitiveDriver)-33.1
   Service Type: 33
   INPUT:
      JAUS_SET_WRENCH_EFFORT (0x00FF)
      JAUS_SET_DISCRETE_DEVICES (0x00FF)
      JAUS_QUERY_PLATFORM_SPECIFICATIONS (0x00FF)
      JAUS_QUERY_WRENCH_EFFORT (0x00FF)
   OUTPUT:
      JAUS_REPORT_PLATFORM_SPECIFICATIONS (0x00FF)
      JAUS_REPORT_WRENCH_EFFORT (0x00FF)

c - Clears the Console window

? - Prints the Help Menu

ESC - Shutdown the Node Manager 

Typical ojNodeManager Behavior

During normal use of ojNodeManager, several events may occur in the Node Manager which will result in messages being output to the console window. This section attempts to document those messages and show example output from those cases.

Local component check-in / check-out

When a component local to the node comes online and "checks in" with its local node manager, the following shall be seen in the console window:

Component ADDED: PrimitiveDriver-33.1

Once a component has checked-in with a node manager, it is required to send a Report Heartbeat Pulse message to the Node Manager at least once every 3 seconds (or 1/3 Hz). If this does not occur, the component will "time out" of the Node Manager and stop receiving messages from other JAUS entities. This is done to make the node manager and the overall JAUS subsystem more robust to component which crash or otherwise shuts down improperly. If a component timeout occurs, it is noted on the console with the following message:

Component TIMEOUT: pd (PrimitiveDriver)-33.1

When a local component shuts down, it is responsible for "checking out" of the node manager as well. When this occurs, the following message will be displayed on the ojNodeManager console:

Component REMOVED: pd (PrimitiveDriver)-33.1

Discovery of other JAUS Nodes

When a JAUS node comes online (specifically the Node Manager on that node) it will typically start broadcasting Report Heartbeat messages to other JAUS Nodes on the node network. When another JAUS node is discovered, it jump starts the JAUS discovery process (which is documented in the JAUS RA) and the ojNodeManager will display the following message:

Node ADDED: JausNode-6

After discovery, nodes must continue to send heartbeat messages to other nodes during their lifetime. If a Report Heartbeat Pulse message is not received from another node for 5 seconds, it will timeout of the system tree and routing information related to that node will be removed. When this occurs, the following message will appear on the ojNodeManager console:

Node TIMEOUT: OJNode-6

When an ojNodeManager is shutdown, it informs other JAUS Node Managers that it is no longer available through the use of a Report Subsystem Configuration message. This will cause the receiving Node Manager to remove the sending Node Manager's data from the system tree. When this occurs, the following message is displayed on the ojNodeManager's console window:

Node REMOVED: OJNode-6

Discovery of other JAUS Subsystems

When a JAUS Subsystem comes online (specifically the Communicator on that node) it will typically start broadcasting Report Heartbeat messages to other JAUS Subsystems on the subsystem network. When another JAUS subsystem is discovered, it jumpstarts the JAUS discovery process (which is documented in the JAUS RA). The ojNodeManager will display the following message:

Subsystem ADDED: JausSubsystem-1

After discovery, subsystems must continue to send heartbeat messages to other subsystems during their lifetime. If a Report Heartbeat Pulse message is not received from a particular subsystem for 5 seconds, it will timeout of the system tree and routing information related to that subsystem will be removed. When this occurs, the following message will appear on the ojNodeManager console:

Subsystem TIMEOUT: OJSubsystem-1

When an ojNodeManager is shutdown, it informs other JAUS Subsystems that it is no longer available through the use of a Report Subsystem Configuration message. This will cause the receiving Subsystem to remove the sending Subsystem's data from the system tree. When this occurs, the following message is displayed on the ojNodeManager's console window:

Subsystem REMOVED: OJSubsystem-1

ojNodeManager Configuration File

The OpenJAUS Node Manager supports configuration via the nodeManager.conf file. This file defines a number of options which allow the user to enable, disable and configure the runtime environment of the node manager. The OpenJAUS code base is distributed with a template for the configuration file under the name nodeManager.conf.template. This file can be found in the ojNodeManager directory. The template is shown below for reference.

# This subsection defines the JAUS characteristics of the node
[JAUS]
SubsystemId: 
NodeId: 
Subsystem_Identification: OJSubsystem
Node_Identification: OJNode

# This subsection defines the interfaces and their options for component communication
[Component_Communications]
JAUS_OPC_UDP_Interface: true
OpenJAUS_UDP_Interface: true

# This subsection defines the interfaces and their options for node communication
[Node_Communications]
Enabled: false
JUDP_Interface: true
JUDP_IP_Address: 
#JAUS_OPC_UDP_Interface: true
#JAUS_OPC_UDP_IP_Address: 

# This subsection defines the interfaces and their options for subsystem communication
[Subsystem_Communications]
Enabled: true
JUDP_Interface: true
JUDP_IP_Address: 
#JAUS_OPC_UDP_Interface: true
#JAUS_OPC_UDP_IP_Address:

The configuration file is organized by sections. A section within the file is designated by a section title within blocks, such as [JAUS]. The OpenJAUS Node Manager makes use of four different sections as shown above. Within each section, configuration properties are designated as key / value pairs. The known keys for each section are documented below. This file allows the inclusion of comment lines by preceding the line with a '#' character (as shown above). If the configuration file or a required field in the configuration is not found or is invalid, the ojNodeManager will output an error message to the screen and terminate itself.

JAUS Section

This section is designated by the section header [JAUS] and contains items which are relevant to the JAUS addressing and namespace of the Node Manager, it contains four key / value pairs described below.

SubsystemId This numeric value designates the unique JAUS Subsystem ID value of the Node Manager. Every subsystem within a subsystem network must have a unique ID value. Valid values are the range of 1-254, inclusive.
NodeId This numeric value designated the unique JAUS Node ID value of the Node Manager. Within the Node Network, every JAUS node must have a unique ID value. Valid values are the range of 1-254, inclusive.
Subsystem_Identification This alpha-numeric value designates a human-readable name for the Subsystem associated with the Subsystem ID. This value does not have to be unique within a system and is used only as a HMI aid to the user.
Node_Identification This alpha-numeric value designates a human-readable name for the Node associated with the Node ID. This value does not have to be unique within a system and is used only as a HMI aid to the user.

Component Communications

This section is designated by the section header [Component_Communications] and contains items which are relevant to communications between the Node Manager and components local to the node. Both JAUS and non-JAUS traffic interfaces exist, with the non-JAUS traffic used solely as described in the OpenJAUS Node Manager Interface document.

JAUS_OPC_UDP_Interface This boolean value determines whether the OPC interface (described earlier) is enabled for communication between the Node Manager and local components. This interface uses port 24629 and the loopback network interface (127.0.0.1) and expects JAUS traffic only.
OpenJAUS_UDP_Interface This boolean value determines whether the OpenJAUS Node Manager Interface (described earlier) is enabled for communication between the Node Manager and local components. This interface uses port 24627 and the loopback network interface (127.0.0.1) and expects non-JAUS traffic only.

Node Communications

This section is designated by the section header [Node_Communications] and contains items which are relevant to communications between the Node Manager and other JAUS nodes.

Enabled This boolean value determines whether the ojNodeManager's node communications are enabled or not. This should be enabled when it is desired to communicate with other JAUS nodes using a Node network as shown in the diagram above. It should be disabled when the node manager is used solely to communicate to other subsystems.
JAUS_OPC_UDP_Interface This boolean value determines whether the OPC interface (described earlier) is enabled for communication between the Node Manager and other JAUS nodes. This interface uses port 3794 and the network interface specified in the parameter JAUS_OPC_UDP_IP_Address. This interface is for JAUS message traffic only.
JAUS_OPC_UDP_IP_Address This alpha-numeric value is an IPv4 value in dot-decimal format (i.e. 192.168.0.1) designates the network interface to which the JAUS OPC UDP Interface (at the node level) should bind itself. This parameter is required if the JAUS OPC UDP Interface is enabled.
JUDP_Interface This boolean value determines whether the JUDP interface (described earlier) is enabled for communication between the Node Manager and other JAUS nodes. This interface uses port 3794 and the network interface specified in the parameter JUDP_IP_Address. This interface is for JAUS message traffic only.
JUDP_IP_Address This alpha-numeric value is an IPv4 value in dot-decimal format (i.e. 192.168.0.1) designates the network interface to which the JUDP Interface (at the node level) should bind itself. This parameter is required if the JUDP Interface is enabled.

Subsystem Communications

This section is designated by the section header [Subsystem_Communications] and contains items which are relevant to communications between the Node Manager and other JAUS subsystems.

Enabled This boolean value determines whether the ojNodeManager's subsystem communications are enabled or not. This should be enabled when it is desired to communicate with other JAUS subsystems using a subsystem network as shown in the diagram above. It should be disabled when the node manager is used solely to communicate to other nodes.
JAUS_OPC_UDP_Interface This boolean value determines whether the OPC interface (described earlier) is enabled for communication between the Node Manager and other JAUS subsystems. This interface uses port 3794 and the network interface specified in the parameter JAUS_OPC_UDP_IP_Address. This interface is for JAUS message traffic only.
JAUS_OPC_UDP_IP_Address This alpha-numeric value is an IPv4 value in dot-decimal format (i.e. 192.168.0.1) designates the network interface to which the JAUS OPC UDP Interface (at the subsystem level) should bind itself. This parameter is required if the JAUS OPC UDP Interface is enabled.
JUDP_Interface This boolean value determines whether the JUDP interface (described earlier) is enabled for communication between the Node Manager and other JAUS subsystems. This interface uses port 3794 and the network interface specified in the parameter JUDP_IP_Address. This interface is for JAUS message traffic only.
JUDP_IP_Address This alpha-numeric value is an IPv4 value in dot-decimal format (i.e. 192.168.0.1) designates the network interface to which the JUDP Interface (at the subsystem level) should bind itself. This parameter is required if the JUDP Interface is enabled.

 

© OpenJAUS.com 2008
All Rights Reserved