Skip to main content

last_letter

Software libraries for UAV simulation.

Repository layout

lib/          the simulation library: C++ core, its Python package and the tests
lib/tools/    standalone analysis scripts and the packaging test container
frontends/    programs that drive the library, currently the ArduPilot SITL bridge
models/       aircraft recipes, installed to $HOME/last_letter_models
docs/         Sphinx documentation

The C++ library is called last_letter_lib, which is also the name of its CMake target and of liblast_letter_lib.so; the suffix separates it from the frontends that link it. The Python package is simply last_letter.

Build instructions

Prerequisites

Supported OS: Ubuntu 22.04, 24.04, 26.04.

A script is provided that installs all the prerequisites you need before building and using last_letter:

./tools/install-prereqs-ubuntu.sh                  # C++ library and frontends
./tools/install-prereqs-ubuntu.sh --python         # ... plus the Python package
./tools/install-prereqs-ubuntu.sh --python --dev   # ... plus pytest and pre-commit
./tools/install-prereqs-ubuntu.sh --python-only    # Python package, no C++ toolchain

Add --uv to fill the virtualenv with uv instead of pip. The script never installs into the system Python interpreter and never edits your shell profile. It prints the activation line for any virtualenv it creates, and reuses one that is already active rather than making a second.

You will get recommendations on how to build and install last_letter, depending on your options.

To build and install the C++ library

cmake -S . -B build && cmake --build build && cmake --install build

Installation defaults to the $HOME/.local prefix, so no sudo is needed. The library will be installed in $HOME/.local/lib. Override it with -DCMAKE_INSTALL_PREFIX=<path>. Note that the aircraft models are always installed to $HOME/last_letter_models, independently of the prefix.

To build and install the ArduPilot bridge

cmake -S . -B build -DLAST_LETTER_BUILD_ARDUPILOT=ON && cmake --build build && cmake --install build

The executable will be installed in $HOME/.local/bin. Ensure it is on your path.

The models root it reads defaults to $HOME/last_letter_models, and is overridden either with --models-dir <path> or with the LAST_LETTER_MODELS_DIR environment variable.

Prebuilt binaries are provided in the Githug releases tarballs.

To use the C++ library from another CMake project

The install exports a CMake package, so a downstream project only needs

find_package(last_letter_lib REQUIRED)
target_link_libraries(myapp PRIVATE last_letter_lib::last_letter_lib)

If the library was installed to a prefix CMake does not search by default, point at it with -DCMAKE_PREFIX_PATH=<prefix>.

To build the Python code

last_letter is distributed as a source distribution only — there is no prebuilt wheel to download. Installing it compiles the C++ library on your own machine, so the prerequisites above must be in place first.

To build and install the Python package in your current Python environment enter:

uv pip install <path_to_last_letter> [--force-reinstall]

or, without uv, from inside an activated virtualenv:

pip install <path_to_last_letter> [--force-reinstall]

The aircraft models and the Python package

After installing the Python package, run

last-letter-install-models [--force]

to copy the models out to $HOME/last_letter_models. The copy overlays the destination instead of replacing it, so aircraft of your own kept there are left alone.

Developers

If you wish to modify and hopefully contribute to last_letter, please read DEVELOPERS.md.

Metadata

Release files for last-letter 2.103.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for last-letter 2.103.0
File Size Uploaded Provenance
last_letter-2.103.0.tar.gz 524.3 kB Without provenance Details

Release files / last_letter-2.103.0.tar.gz

Download URL last_letter-2.103.0.tar.gz
Size 524.3 kB
Tags Source
SHA-256 checksum
How to use checksums
57f5496f98916cfd1f6b9856f8a4a03931ecd6ac9f7301b8132c8e9c9c753e11
BLAKE2b-256 checksum
How to use checksums
55c04bdd7c54c9a326f343d30fd1a5b3723c3730bfc0b4b52a20c12331c1d586
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for last-letter 2.103.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page