LCM Message Definitions
This repository contains LCM message definitions for the Dimos project and tools to generate those language bindings.
It depends on our LCM fork for generation since we introduced some convinience changes to python message definitions.
lcmgen from our lcm fork is conviniently pulled and built by our flake.nix
Generating Bindings
Run generate.sh to regenerate all bindings:
./generate.sh
This will:
- Convert ROS messages to LCM definitions (from
sources/ros_msgs/tolcm_types/) - Generate Python bindings (
generated/python_lcm_msgs/) - Generate C++ bindings (
generated/cpp_lcm_msgs/) - Generate C# bindings (
generated/cs_lcm_msgs/) - Generate Java bindings (
generated/java_lcm_msgs/) - Generate Typescript bindings (
generated/ts_lcm_msgs/) - Generate Rust bindings (
generated/rust_lcm_msgs/)
Directory Structure
sources/- Source ROS message definitions and conversion toolslcm_types/- Generated LCM message definitionsgenerated/- Generated language bindings
Python Package
This repo is also a Python package and you can install it via pip install dimos-lcm
It is not very useful standalone and is meant to be used in conjuction with actual dimOS
Control values
control_msgs.ControlValues carries continuous command or state data
between a control coordinator and device-owning connections. The stream/topic
determines the direction; both use the same wire type.
| Field | Meaning |
|---|---|
source |
Publisher identity |
source_ts |
Publisher Unix timestamp in seconds |
epoch |
State generation or command session, established outside the data message |
sequence |
Increasing frame number within that source, stream, and epoch |
interface_names |
Canonical interface names declared by startup configuration |
values |
Corresponding float64 values |
The two array-length fields are LCM encoding fields and must match their arrays and each other. Consumers must reject duplicate or undeclared names, non-finite values, and invalid or stale epochs/sequences. The generated codecs serialize data; they do not enforce these application-level checks. Timestamps alone do not establish freshness across machines with unsynchronized clocks.
Interface names and their units, ownership, and supported combinations come from the resolved connection configuration. The codec does not interpret names or distinguish robot families. Examples include joint position/velocity for arms, position/velocity/effort/gains for whole-body control, pose coordinates, and linear/angular velocity for bases. Pose reference frames must be defined by the interface contract; they are not inferred from the values.
Empty frames are encodable. Whether they serve as heartbeats, whether frames are complete or sparse, and what an omitted command means are runtime contract decisions, not codec behavior. This schema does not authorize motion or implement a watchdog.
Descriptions are supplied through startup configuration, not LCM announcements. Discrete lifecycle requests and their results belong to RPC. No description, readiness, or lifecycle message types are added by this contract.
Validate the Python codec with:
python -m unittest discover -s tests -v
Metadata
Release files for dimos-lcm 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dimos_lcm-0.1.5.tar.gz | 126.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dimos_lcm-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 720.4 kB
Release files / dimos_lcm-0.1.5.tar.gz
| Download URL | dimos_lcm-0.1.5.tar.gz |
|---|---|
| Size | 126.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f99d10c811156c18794585e281754fc8a9f5376966af880aeb868f4028d6b07
|
|
BLAKE2b-256 checksum How to use checksums |
a5920f332a3fe27324f9103303f961a527de33f13fffbd89e99192386e9df9f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency logRelease files / dimos_lcm-0.1.5-py3-none-any.whl
| Download URL | dimos_lcm-0.1.5-py3-none-any.whl |
|---|---|
| Size | 593.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
80317b4665cecde161ffb784d2c9569d956d705d9a518e95e59a3c724c50f39d
|
|
BLAKE2b-256 checksum How to use checksums |
29b8e254f872031ffaebb0e8130a3df30569aa12eca3262971e952ec7ce56522
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency log