My favorites | Sign in
lcm
Project Home Downloads Wiki Issues Source
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 automatic marshalling/unmarshalling code generation with bindings for applications in a variety of programming languages. 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

Jan 20, 2012

Release 0.8.0

This release changes the C++ API, adds some features to lcm-logplayer-gui, and fixes a few bugs.

  • lcm-c:
    • add new macros LCM_MAJOR_VERSION, LCM_MINOR_VERSION, LCM_MICRO_VERSION to check LCM version from C/C++.
  • lcm-c++:
    • rename LCM::fileno() to LCM::getFileno(). fileno is implemented as a macro on some platforms, and is thus effectively a reserved keyword.
  • lcm-gen:
    • C++:
      • don't try to dynamically resize fixed-size arrays (re  issue #42 )
    • Python:
      • bugfix in decoding multivariable arrays
  • lcm-logplayer-gui:
    • add command line parameters to:
      • start logplayer with the log paused
      • filter out specific channels from being played back by default.

Oct 15, 2011

Release 0.7.1

This is a bugfix and maintenance release.

  • lcm-gen:
    • C++:
      • fix decoding of zero-length primitive arrays (re  issue #38 )
      • computeHash() omit parameter name if unused
      • don't #include a type's own header file for recursive types
      • fix memory leak in LCM::publish() (re  issue #35 )
      • inline methods for generated code
      • use static local variable for getHash() to reduce liblcm dependency of generated C++ code
      • #include <string> if a type has a string field
    • C:
      • don't #include a type's own header file for recursive types
    • Java:
      • add --with-jardir=DIR option to configure script to allow configuring lcm.jar destination directory.
    • General:
      • update lcm-gen manpage to document --c-no-pubsub
  • lcm-java:
    • ClassDiscoverer doesn't try to traverse unreadable files/directories

Aug 22, 2011

Release 0.7.0

This release introduces support for native C++ bindings, and includes a number of bugfixes and documentation updates.

  • lcm-gen:
    • Added the -x / --cpp option, which generates native C++ language bindings. See examples/cpp for examples, and the documentation for a tutorial and API reference.
  • lcm-c:
  • General:
    • Switched documentation from GTK-Doc to Doxygen. To build most documentation, run doxygen from the docs/ directory. Java, C#, and Python API reference docs are still built separately.

June 10, 2011

Release 0.6.0

This release includes a number of bugfixes and performance enhancements

  • lcm-c:
    • Change internal buffering from a fixed size ringbuffer to per-subscription FIFO queues. Subscriptions start with a default maximum queue length of 30 messages, which can be adjusted using the new function
    • <message_type>_subscription_set_queue_capacity()
      For example, to set the queue size to 5 for a message type example_t:
             example_t_subscription_t* subs =
                 example_t_subscribe(lcm, "EXAMPLE", message_handler);
             example_t_subscription_set_queue_capacity(subs, 5);
    • Explicitly disallow recursive calls to lcm_handle.
    • fix synchronization issues when allocating receive resources and conducting multicast self-test. see  issue #30 
  • lcm-logplayer-gui:
    • expose remote log player play and pause commands
  • lcm-logger:
    • bugfix when creating subdirectories for output files
  • lcm-spy:
    • bugfix when LCM URLs contain equal signs
    • searches directories on classpath for lcmtype .class files, in addition to .jar files.
  • lcm-gen:
    • Python
      • bugfix. remove extraneous typename
      • Constructor initializes valid fixed-size arrays
      • initialize float, double to 0.0 instead of 0
    • Java
      • now appends 'f' for const float
    • General:
      • flush stdout before failing on parse / semantic error
  • General:
    • add example for using LCM with GLib event loop
    • add example program for using LCM with select()
    • minor updates to API documentation

OlderNews

Powered by Google Project Hosting