Skip to main content

SGP-Tools Logo SGP-Tools Logo

A Python library for efficient sensor placement and informative path planning

PyPI License

What is SGP-Tools?

SGP-Tools is a powerful and flexible Python library designed for solving Sensor Placement and Informative Path Planning problems, enabling efficient and scalable solutions for environment monitoring, e.g., monitoring air/water quality, soil moisture, or temperature.

Sensor Placement

Sensor Placement is the problem of finding ideal locations to deploy a set of static sensors to best monitor a spatial phenomenon. The goal is to select a finite number of locations from a continuous space or a discrete set of candidates to maximize the information gathered about an entire area of interest. This is crucial when deploying a limited number of sensors to cover a large field.

Informative Path Planning (IPP)

Informative Path Planning extends this concept to mobile sensors. Instead of finding static locations, IPP aims to compute an informative path for one or more robots to travel along. The path is designed to maximize information gain about the environment, often while adhering to constraints such as a limited travel distance. This is essential for applications like aerial surveying or robotic exploration.

IPP vs. Lawnmower Paths

A common approach to surveying an area is to use a "lawnmower" path, a simple back-and-forth pattern designed for complete coverage. The following table summarizes the key differences between IPP and Lawnmower Paths:

Factor Lawnmower Path Informative Path Planning (IPP)
Primary Goal Complete and uniform coverage of a predefined area. Targeted data collection in areas of high information or uncertainty.
Performance Slow data collection but provides a high accuracy reconstruction of the envionment. Fast data collection but provides an approximate reconstruction of the envionment.
Prior Knowledge Not required; often used when no prior information is available. Beneficial, but not required for adaptiev IPP; uses prior information to guide the sampling strategy.
Adaptability Non-adaptive; the path is fixed before the mission starts. Highly adaptive; the path is updated in real-time based on sensor data.
Efficiency Can be inefficient if the phenomenon of interest is sparse. Highly efficient for sparse or spatially variable phenomena.
Computational Cost Low; simple to plan and execute. Medium; requires onboard processing to analyze data and update the path.
Best For Baseline mapping, homogenous environments, initial surveys. Dynamic phenomena, resource-constrained missions.

Why SGP-Tools?

  • State-of-the-Art Algorithms: Includes a variety of optimization methods including greedy algorithms, Bayesian optimization, CMA-ES, and SGP-based optimization.
  • Advanced Modeling Capabilities: Go beyond simple point sensing with tools for informative path planning for multi-robot systems and complex sensor field-of-view (FoV) models.
  • Non-Stationary Kernels: Capture complex, real-world phenomena with specialized non-stationary kernels like the Neural Spectral Kernel and the Attentive Kernel.
  • Flexible and Extensible: Built on GPflow and TensorFlow, the library is designed to be modular and easy to extend with your own custom methods, kernels, and objectives.

Installation

The library is available as a pip package. To install the package, run the following command:

python3 -m pip install sgptools

Installation from source:

git clone https://github.com/itskalvik/sgp-tools.git
cd sgp-tools/
python3 -m pip install -r requirements.txt
python3 -m pip install -e .

Note: The requirements.txt file contains packages and their latest versions that were last verified to be working without any issues.

Quick Start

Here's an example of how to use SGP-Tools to get an informative path using the ContinuousSGP method:

from sgptools.utils.data import Dataset # Class for loading and managing datasets
from sgptools.utils.misc import get_inducing_pts # Utility for selecting inducing points
from sgptools.utils.tsp import run_tsp # TSP/VRP solver for initial path planning
from sgptools.utils.gpflow import get_model_params # For training initial GP/SGP hyperparameters
from sgptools.methods import get_method # Gets the class for continuous SGP optimization
from sgptools.core.transformations import IPPTransform # Transforms for IPP

# 1. Load or generate a dataset
# This will create a synthetic dataset for demonstration
dataset = Dataset(num_train=500, num_test=10000, 
                  shape=(100, 100))
X_train, y_train = dataset.get_train()
X_test, y_test = dataset.get_test()

# 2. Learn the GP hyperparameters from the training data
print("Learning GP hyperparameters...")
_, noise_variance, kernel = get_model_params(
    X_train, y_train, max_steps=1000, verbose=True
)

# 3. Setup the IPP model
num_placements = 15

# Initialize inducing points and get initial path
Xu_init = get_inducing_pts(X_train, num_placements)
Xu_init, _ = run_tsp(Xu_init, time_limit=10)

# Setup IPP transform with a sampling rate for continuous sensing
transform_continuous_sensing = IPPTransform(sampling_rate=4)

# Initialize the ContinuousSGP model
method = get_method('ContinuousSGP')
csgp_optimizer = method(
    num_placements, 
    X_train, 
    kernel,
    noise_variance, 
    transform_continuous_sensing,
    X_init=Xu_init[0]
)

# 4. Run the optimization
print("Optimizing sensor placements...")
solution_path = csgp_optimizer.optimize(max_steps=200)

print(f"Solution Path: {solution_path}")

For more detailed instructions, please refer to our tutorials

SGP-based IPP

Video Summary

Datasets

High-resolution topography and bathymetry data can be downloaded from NOAA Digital Coast

About

Please consider citing the following papers if you use SGP-Tools in your academic work 😄

@article{JakkalaA25,
author={Kalvik Jakkala and Srinivas Akella},
title ={Fully differentiable sensor placement and informative path planning},
journal = {The International Journal of Robotics Research},
year = {2025},
URL={https://www.itskalvik.com/publication/sgp-foundation/},
}

@inproceedings{JakkalaA24IPP,
AUTHOR={Kalvik Jakkala and Srinivas Akella},
TITLE={Multi-Robot Informative Path Planning from Regression with Sparse Gaussian Processes},
booktitle={IEEE International Conference on Robotics and Automation, {ICRA}},
YEAR={2024},
PUBLISHER = {{IEEE}},
URL={https://www.itskalvik.com/publication/sgp-ipp/}
}

@inproceedings{JakkalaA25AIPP,
AUTHOR={Kalvik Jakkala and Srinivas Akella},
TITLE={Fully Differentiable Adaptive Informative Path Planning},
booktitle={IEEE International Conference on Robotics and Automation, {ICRA}},
YEAR={2025},
PUBLISHER = {{IEEE}},
URL={https://www.itskalvik.com/publication/sgp-aipp/}
}

Acknowledgements

This work was funded in part by the UNC Charlotte Office of Research and Economic Development and by NSF under Award Number IIP-1919233.

Metadata

Release files for sgptools 2.0.7

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

Source distribution (sdist)

Source distribution for sgptools 2.0.7
File Size Uploaded
sgptools-2.0.7.tar.gz 79.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sgptools 2.0.7
File Interpreter ABI Platform
sgptools-2.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 167.4 kB

Release files / sgptools-2.0.7.tar.gz

Download URL sgptools-2.0.7.tar.gz
Size 79.5 kB
Tags Source
SHA-256 checksum
How to use checksums
34069604f12061a9a0633e173b6787de82876a4c918c4e2a6268cf8558e9d58e
BLAKE2b-256 checksum
How to use checksums
4c4cd244830ee8a40c6cab9208d4af152e1fbbe3555ff31bc08125687a747d8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Feb 14, 2026.

Transparency log

Release files / sgptools-2.0.7-py3-none-any.whl

Download URL sgptools-2.0.7-py3-none-any.whl
Size 87.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cfb54c3506c3114a28e13a1240c066ba714c17b7af797abe16d18f046da04713
BLAKE2b-256 checksum
How to use checksums
75e2cf64bf65d2aebf52c5fb63f91bc99cbcc8a51f9cdf4e83e874a21556b20b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Feb 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.0.7 This release

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.2.0

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

1 release file

1.0.0

1 release file

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