Goby3 3.5.1
2026.06.04
Loading...
Searching...
No Matches
goby-zeromq: goby_frontseat_interface

The goby_frontseat_interface application provides a common application for handling plugins for different vehicle control computers (Bluefin, Iver, WaveGlider, etc.). The goal is to reduce the duplication of effort required to support a new vehicle platform with an autonomy system written in Goby3.

This is the Goby version of the MOOS iFrontSeat. The two applications share the same drivers and motivation, so it is worth reading the iFrontSeat documentation as well.

goby_frontseat_interface is effectively a mediator between two interfaces: the Helm Interface (providing desired setpoints of heading, speed, depth, etc.) and the Vehicle Interface (carrying out the desired setpoints and providing low-level data).

Publish/subscribe

The groups are defined in

#include <goby/middleware/frontseat/groups.h>

and the Protobuf messages are in goby/src/middleware/protobuf/frontseat.proto and can be included using:

#include <goby/middleware/protobuf/frontseat.pb.h>

API Diagram

goby_clang_tool generated API figure

Helm Interface

The Helm Interface must provide the following publications:

  1. Group: goby::middleware::frontseat::groups::desired_course, Message: goby::middleware::frontseat::protobuf::DesiredCourse: Desired heading, speed, depth, etc. for the vehicle.
  2. Group: goby::middleware::frontseat::groups::helm_state, Message: goby::middleware::frontseat::protobuf::HelmStateReport: State of the Helm (either HELM_DRIVE for the Helm is ready to drive or HELM_PARK for the Helm is in a standby mode).

It must also subscribe to:

  1. Group: goby::middleware::frontseat::groups::node_status, Message: goby::middleware::frontseat::protobuf::NodeStatus: Position, orientation, etc. of the vehicle.

goby_frontseat_interface has built-in support for the pHelmIvP application from MOOS-IvP or alternatively the user can provide this interface with a custom app.

MOOS-IvP

To use the MOOS-IvP interface, complete the [goby.moos.protobuf.moos_helm] configuration block:

[goby.moos.protobuf.moos_helm] {
server: "localhost" # MOOSDB address
port: 9000 # MOOSDB port
}

and at a minimum run MOOSDB and pHelmIvP.

Vehicle Interface

The Vehicle Interface connects the vehicle API to Goby3. It is a subclass of goby::middleware::frontseat::InterfaceBase which is defined in

#include <goby/middleware/frontseat/interface.h>

See the MOOS iFrontSeat document on writing this interface.

The Vehicle Interface must be compiled as a shared library that exposes a C function "frontseat_driver_load" which must have the signature:

extern "C"
{
goby::middleware::frontseat::InterfaceBase* frontseat_driver_load(goby::middleware::frontseat::protobuf::Config* cfg)
{
return new goby::middleware::frontseat::Iver(*cfg);
}
}

This shared library is then loaded at runtime by goby_frontseat_interface using the environmental variable FRONTSEAT_DRIVER_LIBRARY, which is a path to a shared library containing the desired interface to run. This path must be fully qualified or on the ld library path (e.g. environmental variable LD_LIBRARY_PATH).

For example:

export FRONTSEAT_DRIVER_LIBRARY=/home/toby/opensource/goby3/build/lib/libgoby_frontseat_basic_simulator.so.30
goby_frontseat_interface goby_frontseat_interface.pb.cfg

Configuration

The goby_frontseat_interface has one required configuration block:

  • frontseat_cfg: Passed to the frontseat driver
    • type: Vehicle type
    • require_helm: Set false if the vehicle can run missions without a helm (Default: true)
    • name: Omit: it is automatically set to interprocess.platform. This configuration variable exists here exists for iFrontSeat support.
    • origin: Omit: it is automatically set to app.geodesy.lat/lon_origin. This configuration variable exists here for iFrontSeat support.

You can set [goby.moos.protobuf.moos_helm] if using MOOS-IvP; see above.

Available drivers in Goby3

Basic Simulator

This driver shows how to use goby_frontseat_interface and provides an example for creating your own plugins. It can also be used for simple vehicle simulations.

This is run with the goby_basic_frontseat_simulator application which provides the vehicle interface and a basic motion model.

Additional configuration:

See the goby_frontseat_interface configuration from the Goby3 course for a simple working example: https://github.com/GobySoft/goby3-course/blob/master/launch/alpha/usv_config/frontseat.pb.cfg, launched from https://github.com/GobySoft/goby3-course/blob/master/launch/alpha/usv.launch.

Bluefin

The goby_frontseat_interface_bluefin shell script runs goby_frontseat_interface with the plugin for the General Dynamics Bluefin Standard Payload Interface (SPI). This public SPI is not complete, so request a copy from Bluefin if possible.

Key additional configuration variables:

See goby_frontseat_interface_bluefin -e for more configuration options.

Iver

The goby_frontseat_interface_iver shell script runs goby_frontseat_interface with the plugin for the L3Harris Iver AUV using the Iver "Remote Helm" interface.

Key additional configuration variables:

See goby_frontseat_interface_iver -e for more configuration options.

WaveGlider SV2

This is largely obsolete at this point given the end of life for the WaveGlider SV2, but the goby_frontseat_interface_waveglider shell script runs a plugin for the LiquidRobotics WaveGlider SV2.

Key additional configuration variables: