Implementation eines Einheitensystem mit user-defined literals und in Kombination mit Festkomma-Arithmetik für das open-source C++-Microcontroller-Framework modm.


Zusammenfassung

Für alle physikalischen Berechnungen in unserer Robotersoftware wollen wir Einheiten nutzen können, dies sorgt für übersichtlicheren und besser selbst-dokumentierenden Code.

Beispiel:

using namespace modm::units;
length_t distance = 300_mm;
time_t   time     = 1500_ms;
velocity_t speed  = distance / time;
float foo         = distance + time; // compiler error: Units are not compatible.

Da es auf Microcontrollern aus verschiedenen Gründen nicht erstrebenswert mit Gleitkommazahlen zu rechnen ist, bietet es sich an gleichzeitig Festkomma-Arithmetik [1] im modm [2] zu implementieren.

Diskussion & Features

  • Fehlerabschätzung Multiplikation und Division
  • Unittests
  • Portieren und Anpassen bestehender Klassen

Tätigkeitsfelder und Technologien

  • C++

Referenzen und Links

  • [1] https://de.wikipedia.org/wiki/Festkommazahl
  • [2] https://modm.io
  • [3] https://github.com/salkinium/upainter/tree/master/ges/math
  • http://en.cppreference.com/w/cpp/language/user_literal
  • https://github.com/nholthaus/units