Preliminary JaiaBot system block diagram:
jaiabot
is based primarily on two publish/subscribe asynchronous middlewares:
Goby3 forms the core of the communications design, providing interthread, interprocess, and intervehicle communications. MOOS-IvP provides the behavior-based autonomy implementation using the pHelmIvP
multi-objective decision engine.
In addition, we expect to support clients using ROS
in the future.
goby_coroner
: Provides health status from the output of each of the Goby applications.goby_gps
: Takes GPS data from gpsd
and publishes it to the gobyd.goby_liaison
: Host a web interface on the platform to view and send Goby messages.goby_logger
: Subscribes to messages in the gobyd and logs them to the disk.goby_moos_gateway
: Gateway to MOOS applications.goby_ros_gateway
: Gateway to ROS middleware (not yet written).goby_opencpn_interface
: Interface from Goby3 to OpenCPN (not run from systemd, but feel free to use in the simulator).gobyd
: The Goby3 daemon which handles the publishing and subscribing.jaiabot_adafruit_bno055_driver
: Middleman between our jaiabot_imu_py
driver and the Goby system. Listens on UDP to Python driver and republishes as a Goby3 message.jaiabot_as-ezo-ec_py
: Python driver for Atlas Scientific conductivity sensor.jaiabot_atlas_scientific_ezo_ec_driver
: Middleman between our jaiabot_as-ezo-ec_py
driver and the Goby system. Listens on UDP to Python driver and republishes as a Goby3 message.jaiabot_bluerobotics_pressure_sensor_driver
: Middleman between our jaiabot_pressure_sensor_py
driver and the Goby system. Listens on UDP to Python driver and republishes as a Goby3 message.jaiabot_driver_arduino
: This is the driver for the Arduino which controls the elevators, rudder, motor, diagnostic LEDs, and power monitoring.jaiabot_engineering
: Handles commands from the Engineering Interface web page to set and test low level functionality.jaiabot_fusion
: Assembles the goby::middleware::frontseat::protobuf::NodeStatus
message used by the goby_moos_gateway
from the goby_gps
output, pressure sensor, and other sources, as needed.jaiabot_health
: Overall system health using data from goby_coroner
and eventually other sources.jaiabot_hub_manager
: Interface between the bots and the web sites. Sends and receives inter-vehicle messages on the radio and republishes / subscribes to their Goby3 counterparts on inter-process.jaiabot_imu_py
: Python driver for Adafruit bno055 IMU.jaiabot_metadata
: Logs information about the system including current jaiabot build number, current Goby3 build number, computing platform, etc.jaiabot_mission_manager
: Keeps a state machine of the overall mission state and switches from pHelmIvP control to profile mode as required.jaiabot_pid_control
: Determines values to output to motor and control surfaces via pid control loopsjaiabot_pressure_sensor_py
: Python driver for Blue Robotics Bar02 and Bar30jaiabot_web_portal
: Interface between Goby3 and the Flask web server on the hub.jaiabot_power
: Power management and circuit control.jaiabot_lights
: Light control (perhaps part of jaiabot_power
instead?).jaiabot_payload_interface
: Pluggable interface for different payload data feeds to be logged.moosdb
: The main communication mechanism for all MOOS apps.pHelmIvP
: Pluggable behavior based autonomy.pNodeReporter
: Aggregates NAV_* variables into NODE_REPORT variable for pHelmIvP.uprocesswatch
: Monitors the health of MOOS processes.