Seg... pinne. (11 / 14 steg)
Steg 11: Den kontroll delen av registeransvarige.
Proportionella. Detta är en korrigerande åtgärd som skalförändras proportionellt till vinkeln. Om minnet lutar framåt två gånger så långt den korrigerande åtgärden är dubbelt så stor. Det är som "våren konstanten" av systemet, tillämpa en återställa kraft som pinnen flyttar från vertikal.
Derivata. Detta är en korrigerande åtgärd som skalförändras proportionellt till derivatan av vinkeln, eller den kantiga. Om minnet är dubbelt så snabbt faller, är den korrigerande åtgärden dubbelt så stor. Det är som "dämpning konstanten" av systemet, anbringa en kraft som motstår rotation i endera riktningen.
Tillsammans bildar detta ett mass-våren-spjället system, utom med virtuella fjädrar och stötdämpare. Den relativa våren konstant och dämpningen konstant påverkar hur mycket systemet svänger som det korrigerar för kantiga förskjutning. Enkel, rätt? Här är koden:
output += vinkel * KP + ränta * KD;
Japp, enkel. utdata är kommandot skickas till motorerna. KP och KD är fejk tills det balanserar (eller går goes helt instabil). En subtilitet här är att kommandot produktionen ökat av värde utgång av PD styrenheten. Så, om vinkeln hålls vid vissa förskjutningen från vertikalt, kommandot motor kommer att hålla ökande. Det är som att lägga en extra integrerad till systemet, som visas i blockdiagram nedan.
Vanligt i feedback diagram, feedback sökvägen har ett negativt tecken, men det beror egentligen på motorerna är inställt. Att välja tecknet för utdata kan antingen göras i programvaran (-= istället för +=) eller maskinvara genom att bara byta motor leads. Om båda hjulen börjar flytta på fel sätt som svar på vinkeln, kan du vända tecknet. Om ett hjul börjar röra på fel sätt, kan du bara byta sin motor leder.