IMC

Inter-Module Communication Protocol

Defines a common control message set understood by all types of vehicles and computers nodes in networked environments.

Inter-Module Communication (IMC) protocol is a message-oriented protocol designed and implemented in the Underwater Systems and Technology Laboratory (LSTS) to build interconnected systems of vehicles, sensors and human operators that are able to pursue common goals cooperatively by exchanging real-time information about the environment and updated objectives. IMC abstracts hardware and communication heterogeneity by providing a shared set of messages that can be serialized and transferred over different means.The protocol contrasts with other existing application level protocols by not imposing or assuming a specific software architecture for client applications. Native support can be automatically generated for different programming languages and/or computer architectures resulting in optimized code which can be used both for networked nodes and also for inter-process and inter-thread communication.The protocol has already been tested throughout various experiments led by LSTS where it has taken care of communications between vehicles, sensors and operator consoles.

Bindings: Java, Java, C++, C++, Flutter/Dart, Python

Features
Message Passing Concept

IMC serves as the sole inter-process communication mean in DUNE which is used by our vehicles and systems. It allows different tasks, from sensor drivers to guidance controllers, that run independently from each other on separate threads or processes, to exchange data using the message bus mechanism

Interoperability

Interoperability to work with other systems, present or future, without any restricted access or implementation.

Data Integrity

The check sum field is computed using the CRC-16-IBM with polynomial 0x8005 (x^16 + x^15 + x^2 + 1). The data contributing for the CRC includes all preceding header and message bytes.