In ihre Ablauf verwendet du "sleep(0.01). Das bedeutet aber nicht das auch jeden 0.01 s eine komplette durchlauf gemacht ist ! Das auslesen mit I2C, und die berechnungen kosten auch einiges. Wahrscheinlich ist eine Durchlauf dan auch langer dan 0.01 s !! Damit schon die Hinweis um ein Timer zu verwenden.
Für das heutige Program konnen sie das leicht kalibrieren : einfach die Berechnung machen mit 0.02 s : Angle=Angle + (gyro-offset)*0.02 !
Besser ist die Timer variante :
If (timer>10) {timer=0;
mach auslesen + berechnung;}
timer muss dan jeden ms erhoht werden in eine separate thread. Python hat sicher so etwas. Forteil ist naturlich das ihre Program weiter lauft, zweitens das diese 10ms exact wird.