pidfrees 0.2.1

A robust PID controller implementation for no_std environments, protected by GPL.
Documentation

Docs.rs Crates.io License: GPL-2.0-or-later

Pidfrees

Un contrôleur PID robuste, haute performance et sécurisé pour Rust (std & no_std).

Optimisé pour les systèmes embarqués comme RP2040 (Pico), Pico 2, STM32 et ESP32.

🛡️ La Mission

Pidfrees fournit une logique de contrôle robuste tout en restant strictement Open Source. Cette crate utilise la licence GPL-2.0-or-later pour assurer que les algorithmes de contrôle essentiels restent un bien commun et ne soient jamais privatisés.

✨ Caractéristiques Principales

  • Précision Adaptative : Choisissez entre f64 pour une haute précision (Cloud/PC) ou f32 pour une performance éclair sur les microcontrôleurs
  • Tuning Dynamique : Mettez à jour Kp, Ki, Kd et le Setpoint à l'exécution sans réinitialiser le contrôleur
  • Native no_std : Construit pour les environnements bare-metal (Embassy, RTIC, noyaux personnalisés)
  • Robustesse Garantie : Protection anti-windup native et dérivée basée sur la mesure (PV) pour éviter les "derivative kicks"
  • Zéro Surcharge : Abstraction zéro-coût, pas d'overhead binaire indépendamment de la précision choisie
  • Sécurité Totale : #![forbid(unsafe_code)] pour une confiance absolue

📦 Installation

Standard (f64 par défaut)

[dependencies]
pidfrees = "0.2.1"

Ultra-Rapide (f32 pour RP2040 / Pico / ESP32)

[dependencies]
pidfrees = { version = "0.2.1", features = ["f32"] }

💡 Démarrage Rapide

use pidfrees::PidController;

// 1. Initialisation : Kp, Ki, Kd, Cible, Min_Sortie, Max_Sortie
let mut pid = PidController::new(2.0, 0.5, 0.1, 50.0, 0.0, 100.0);

// 2. Calculer la sortie
let power = pid.update(45.0, 0.1);

// 3. Tuning Dynamique - Changez les gains à la volée
pid.set_kp(1.5);
pid.set_target(60.0);

🎮 Exemple Avancé : Planification des Gains

// Si votre robot porte une charge lourde, ajustez dynamiquement les gains
if robot.is_carrying_load() {
    pid.set_kp(3.5);  // Augmentez le gain proportionnel
    pid.set_ki(0.8);  // Augmentez l'intégral pour compenser la gravité
} else {
    pid.set_kp(2.0);  // Retour à la normale
    pid.set_ki(0.5);
}

📚 Documentation Complète

Consultez la documentation officielle pour des exemples détaillés et une API complète.

⚖️ Licence

Ce projet est licencié sous la Licence Publique Générale GNU v2.0 ou ultérieure (GPL-2.0-or-later).

Vous êtes libre d'utiliser ce code, mais toute modification ou amélioration DOIT être partagée avec la communauté. C'est le contrat de la liberté logicielle.

📝 Historique des Changements

Pour voir l'historique complet des versions, consultez le CHANGELOG.

👨‍💻 Auteur

Créé par Jorge Andre Castro


Pourquoi Pidfrees ?

Dans les systèmes embarqués, chaque cycle CPU et chaque octet de RAM comptent. Avec la fonctionnalité f32 et le tuning dynamique, pidfrees est l'un des outils les plus légers, flexibles et sécurisés disponibles pour contrôler vos moteurs et capteurs sans sacrifier la sécurité.