web.archive.org

lcm - Lightweight Communications and Marshalling - Google Project Hosting

Project Information

Members

Featured

Downloads

Links

LCM is a set of libraries and tools for message passing and data marshalling, targeted at real-time systems where high-bandwidth and low latency are critical. It provides a publish/subscribe message passing model and an XDR-style message specification language with bindings for applications in C, Java, and Python. It was originally designed and used by the MIT DARPA Urban Challenge Team as its message passing system.

LCM is designed for tightly-coupled systems connected via a dedicated local-area network. It is not intended for message passing over the Internet. LCM has been developed for soft real-time systems: its default messaging model permits dropping messages in order to minimize the latency of new messages.

Features

  • Low-latency inter-process communication
  • Efficient broadcast mechanism using UDP Multicast
  • Provides type-safe message marshaling that automatically detects most types of errors (such as version mismatches between different modules)
  • User-friendly logging and playback
  • Essentially unlimited packet size
  • No centralized "database" or "hub" -- peers communicate directly
  • No daemons
  • Supports C/C++, Java, Python, MATLAB, and C#

Requirements

  • POSIX.1-2001 system (GNU/Linux, OS X, Cygwin, Solaris, etc.) or Windows XP/Vista/7
  • GLib >= 2.0
Java >= 1.5 is strongly recommended, as several important utilities distributed with LCM are written in Java.

Documentation

  • LCM design overview (PDF) -- Describes the design principles of LCM, the best place to start for a quick understanding.
  • More Documentation -- Tutorials, API Reference, Troubleshooting, etc.

News

November 8, 2010

Release 0.5.2:

This release includes a number of bugfixes and performance enhancements

  • lcm-logger:
    • exit when disk full
    • use GLib regexes if they're available.
    • Add --invert-channels / -v flag
  • lcm-java:
    • Make LCMTypeDatabase public
    • LCM fragmentation: guard against receiving same fragment twice
    • lcm.lcm.LCM: allow passing NULL or the empty string to the constructor to explicitly specify default LCM provider.
    • lcm.lcm.LogFileProvider: bugfix for write mode
    • remove lcm.test.SlowLCMSubscriber
  • lcm-gen:
    • general
      • warn if struct has 'int' member type instead of 'intN_t'
      • add options --csharp-strip-dirs and --csharp-root-nsp
    • Python
      • generate valid code on empty LCM type
      • only emit new_parents in _get_hash_recursive if necessary
      • fix __init__.py imports - check for "from msg import msg" instead of "import msg"
      • lock __init__.py when writing
    • C#
      • miscellaneous bugfixes
    • Java
      • trust explicit array length field, not .length attribute.
      • fix copy which copied in the wrong direction
      • faster arraycopy in several instances.
  • miscellaneous:
    • add lcm-lite implementation
    • modify examples -- place LCM types in package "exlcm"
    • add tutorial-dotnet.sgml to Makefile
  • Windows & .NET:
    • LCM.NET - fix unsubscribe bug
    • portability fixes

July 14, 2010

Release 0.5.1:

This is a bugfix release, affecting only the Windows port.

  • Windows:
    • Fix lcmgen Visual Studio project file - missing emit_csharp.c
    • Add a .NET tutorial and some some C# examples

June 7, 2010

Release 0.5.0:

This release introduces experimental support for C# / .NET, provided by Jan Hrbáček. Bug reports and patches are greatly appreciated.

This release also introduces a small python API change, and renames a program in windows.

Additional bugfixes are included.

  • Windows:
    • Now builds lcm-gen.exe, not lcmgen.exe
  • .NET:
    • The lcm-dotnet/ directory contains a publish-subscribe library for .NET applications.
  • lcm-gen:
    • (C#) A new set of options are available for generating C# bindings
    • (Python) change init.py import statements. If a package named 'proj' contains the LCM type msg_t, then the init.py file now contains:
    •      from msg_t import msg_t
    and the recommended usage pattern is:
         import proj
         instance = proj.msg_t()
    see googlecode  issue #21 
    • (Windows, Java) fix pathname bug
  • Other:
    • minor build system bugfixes

Mar 15, 2010

Release 0.4.1:

This is primarily a bugfix and maintenance release.

  • C:
    • fix leaking file descriptors
    • fix OS/X compile bug for lcm-example (missing #include <sys/select.h>)
    • simplify project include path requirements in Windows
    • update error checking, messages for single host use (Linux)
  • Java:
    • expose encode/decode methods for advanced users
  • lcm-gen:
    • (C) add --c-no-pubsub command line option to lcm-gen to generate C language bindings without a dependency on liblcm (useful if only the marshalling aspect of LCM is desired).
    • (Java) don't complain about default pkg if one is specified on cmd line.
  • lcm-spy:
    • remember last message on each channel so that object panels open up immediately.
    • put frames in front when double clicked.
  • Other:
    • remove manpage-specific GFDL copyright notices.

Jan 6, 2010

Release 0.4.0:

This release includes experimental support for Microsoft Visual C++. Thanks go to Randy Sybel for providing this port. Although it's undergone some testing, it should be considered highly experimental, and is not well documented or packaged at all. Bug reports and patches are greatly appreciated.

This release also incorporates a number of minor bugfixes for the Java port. See the changelog for details.

OlderNews