Metadata-Version: 2.4
Name: multilat_solver
Version: 1.1.1
Summary: Universal MultiLateration Localization System with flexible input/output adapters
Author-email: Anastasiia Stepanova <asiiapine@gmail.com>
Project-URL: Homepage, https://github.com/Innopolis-UAV-Team/multilat_solver
Project-URL: Documentation, https://github.com/Innopolis-UAV-Team/multilat_solver#readme
Project-URL: Repository, https://github.com/Innopolis-UAV-Team/multilat_solver
Project-URL: Issues, https://github.com/Innopolis-UAV-Team/multilat_solver/issues
Keywords: localization,trilateration,multilateration,mavlink,ros2,anchors
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy
Requires-Dist: pyserial
Requires-Dist: pymap3d
Requires-Dist: pymavlink
Requires-Dist: scipy
Requires-Dist: localization
Requires-Dist: toml
Provides-Extra: mqtt
Requires-Dist: paho-mqtt; extra == "mqtt"
Provides-Extra: ros2
Requires-Dist: rclpy; extra == "ros2"
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
Dynamic: license-file

# MultiLat Localizer

Universal multilateration localization with pluggable input/output adapters for distance measurements and position output.

## Features

- **Inputs:** Serial (UWB/RTK-DW1000), MQTT, UDP, File; custom adapters via `with_input()`
- **Outputs:** MAVLink, MAVROS (ROS2), UDP, File, Console; multiple outputs at once, custom adapterd via 'with_output()'
- **Calibration:** None, Linear, Quadratic, Cubic;
- **GPS:** ENU → GPS via pymap3d; frequency throttling; message type (GPS / Position / Both)
- **Config:** Python API only (no config files)

## Installation

```bash
pip install multilat_solver
```

Optional: `pip install multilat_solver[mqtt]` (MQTT), `multilat_solver[ros2]` (ROS2), `.[dev]` (development).

## Documentation

- **[Quick Start](docs/quick_start.md)** — minimal setup, anchor formats, UDP send_data + for_docs
- [Configuration](docs/configuration.md) · [Input adapters](docs/input-adapters.md) · [Output adapters](docs/output-adapters.md)
- [Calibration](docs/calibration.md) · [Examples](docs/examples.md) · [Custom adapters](docs/extension.md)

## Adapters

| Input   | Description                    |
|---------|--------------------------------|
| Serial  | Binary protocol (UWB/RTK-DW1000) |
| MQTT    | JSON over MQTT `[mqtt]`        |
| UDP     | JSON over UDP                  |
| File    | JSON file polling              |

| Output  | Description                    |
|---------|--------------------------------|
| MAVLink | ArduPilot/PX4                  |
| MAVROS  | ROS2 topics `[ros2]`           |
| UDP     | JSON over UDP                  |
| File    | JSONL file                     |
| Console | Human or JSON                  |

## Examples

- `examples/send_data.py` + `examples/for_docs.py` — UDP distance simulator + localizer (run send_data first, then for_docs); see [Quick Start](docs/quick_start.md)
- `examples/basic_usage.py` — Serial in, console/file/MAVLink out
- `examples/multi_output.py` — Multiple outputs
- `examples/mavlink_input_with_sim.py` — MAVLink distances in + simulator
- `examples/uavcan_input_mavlink_output.py` — Custom UAVCAN input → MAVLink out

## Development

```bash
git clone https://github.com/Innopolis-UAV-Team/multilat_solver
cd multilat_solver
pip install -e ".[dev]"
pytest
```
