Skip to content

WhatIsGoby

Toby Schneider edited this page May 26, 2016 · 2 revisions

What is Goby?

  • Goby-Acomms (available since version 1) provides a field-tested networking system for acoustic modems, such as the WHOI Micro-Modem. Acoustic modems are widely used in subsea environments where light based (radio, microwave, etc.) systems fail. The interface between Goby-Core and Goby-Acomms relies on simple extensions to Google Protocol Buffers and the "in-water" marshalling scheme is the Dynamic Compact Control Language (DCCL), which provides (internally) high levels of compression for basic types (int, unsigned int, double, string, etc.) as well as the option to define custom codecs for any given Google Protocol Buffers message type (e.g. one could write a "lossy" codec that sends the shape parameter for a CTD cast instead of the full set of samples).
  • Goby-Common (partially in version 2, to be complete in version 3) is a collection of ideas and code to provide general purpose interprocess and interplatform communication based on messaging schemes drawn both from the existing marine robotics and global open source communities. The focus is on a high degree of runtime reliability and collaboration between development communities.
    • For introductory users, Goby is implemented in C++ and Google Protocol buffers as Goby-PB, which provides a "template" application that allows object-based messaging between processes and platforms without any concern for serialization, routing, sockets, and so on.
    • For advanced users, it provides a transport layer built on ZeroMQ (which supports 20+ languages including C, C++, Java, .NET, Python, and major platforms) for communicating over Unix sockets, TCP, or reliable multicast (PGM) using one or more existing (e.g. MOOS, LCM, Protobuf, CCL, DCCL, ...) messaging schemes. Goby does not mandate a programming language, a messaging scheme, or a development system and thus intends to tie together groups with different goals, styles, and rules. Furthermore, Gateways can be written to interface the ZeroMQ based Goby transport with the native transport systems used by other architectures (e.g. MOOSDB, LCM multicast).