The overall architecture of a system using netsim is summarized in the figure below:
The audioserver is at the heart of the system. Here is where the essential netsim processes are run:
gobyd
: Mediates interprocess publish/subscribe communications in the Goby3 middleware.socat
: Provides a TCP server for the simulated vehicles to connect to each of the physical modem's serial or Ethernet interface.netsim_core
does not implement a specific processing framework for simulating the channel effects on the modem packets. This is handled via a plugin for a specific simulation system. Here, the MIT LAMSS Virtual Ocean Simulator is shown, based on MOOS.
liblamss_netsim_processor_plugin.so
(not shown): Implements the convolution of the signal based on impulse response data received by the Virtual Ocean (uSimModemNetwork). This is run as a shared library plugin to netsim_core
.iBellhop
: Provides a MOOS interface to the Acoustics Toolbox's BELLHOP ray tracing propagation model.uSimModemNetwork
: Implements / interfaces to the rest of the Virtual Ocean. Computes impulse responses for the processor plugin.MOOSDB
: MOOS inter-process data broker.goby_moos_gateway
(not shown): Connects the MOOSDB
to the gobyd
.While not necessary (except for the processor plugin to netsim_core
), this code is run on the same physical audioserver on the GobySoft reference hardware setup.
The vehicle simulation can be run anywhere in the world, connected to the audioserver via an Wireguard link through a cloud computing server (gobysoft.org).
Very little is required out of the vehicle simulation: it must provide basic position data for the simulated vehicles/nodes, and connect to the data interface of the modems via TCP.
In this diagram, the LAMSS MOOS-IvP vehicle simulator is show, with only the components that connect to netsim in some fashion.
netsim_manager
protocol for passing vehicle positions. For more detail, see the Vehicle Simulator Connections page.The audioserver core components are diagrammed in detail in the figure below. Note that the ProcessorThread shown is the processor_echo stub, thus not showing the publish/subscribe interfaces for the LAMSS Virtual Ocean processor plugin (which includes sending impulse_response
and subscribing to impulse_request
).
Only three modems are shown here to keep the figure readable. Additional modems are supported by netsim_core
in an analogous way.