Using LCM and PODS


A lot of the robotic systems I’ve worked on have had a need for multiple independent software modules which communicate amongst each other to accomplish their individual goals. In academia, the Robot Operating System ROS reigns supreme due to the bevy of existing packages and visualization tools that come with it. However, ROS is built around TCP, and is intended for non-realtime work over a stable network. LCM is better optimized for realtime work, and because it uses UDP multicast, it is more tolerant of unstable wireless networks.

LCM

Lightweight Communications and Marshalling (LCM) is an interprocess communication library developed by MIT for their entry in the DARPA autonomous driving challenge. It uses UDP multicast to send messages in a decentralized way without a central process to control the creation of and subscription to the message channels.

Pods

The Pods project provides a standard format for organizing a modular codebase. Each module, or pod, places its external aspects in a standardized location. In this way, a programmer that wishes to interact with the pod already knows where to find what he needs.

The PodsTool provides templates for building pods of a few different types. The install script provided with the tool doesn’t install the templates in a system-wide directory, so after you follow their installation instructions, you need to copy the /pods/data folder to the correct location. On my Ubuntu 16.04 system, I used the following command to do so. Note that the location may differ on your machine, especially if you have a different version of Python.

sudo cp -r _pods/data /usr/local/lib/python2.7/dist-packages/_pods/