Qualche tempo fa ho realizzato un piccolo robot cingolato che aveva due gambe con due gradi di libertà ciascuna, quindi un totale di 4 servi RC. Mentre stavo programmando il movimento delle gambe ho notato che si muovevano piuttosto rigidamente. Ha senso che il controller interno del servo RC avrebbe una risposta molto rapida ai comandi di posizione, ma volevo che il mio crawler si muovesse in un modo che sembra un po 'più fluido e realistico.
La mia soluzione era creare una funzione cubica del tempo che descriva il percorso dei servi e quindi impostare la loro posizione con piccoli incrementi di tempo, con conseguente movimento più fluido. In sostanza quello che ho fatto è stato risolvere i coefficienti in un'equazione cubica usando l'intervallo di tempo, la posizione iniziale e finale del servo e le velocità iniziale e finale che il servo dovrebbe spostare (che è solo la derivata della posizione):
Risolvi per , , e :a 1 a 2 a 3
r a t e ( t ) = p o s i t i o n ′ ( t ) = a 1 + 2 a 2 t + 3 a 3 t
Dato: , , ,
Ho impostato il tasso del servo tra una coppia di movimenti su zero se i movimenti erano in direzioni opposte e positivo o negativo se i movimenti erano entrambi in direzione positiva o negativa, rispettivamente.
Ha funzionato abbastanza bene, ma questa soluzione è limitata in alcuni modi. Per uno, è difficile decidere quali dovrebbero essere esattamente i tassi tra i movimenti che vanno nella stessa direzione. Ho usato la media delle pendenze avanti e indietro di una particolare posizione tra i movimenti, ma non mi è chiaro che sia ottimale. In secondo luogo, le curve cubiche potrebbero portare il servo in una posizione al di fuori della gamma delle posizioni all'inizio e alla fine di un movimento, il che potrebbe essere indesiderabile. Ad esempio, ad un certo punto durante l'intervallo di tempo, la curva potrebbe far andare il servo oltre la seconda posizione o sotto la prima posizione. In terzo luogo, la generazione della curva qui non considera la velocità massima che il servo può ruotare, quindi una curva può far muovere il servo ad una velocità non realistica. Con quello,
Trascurando quest'ultima preoccupazione, questi problemi possono essere risolti aumentando il grado del polinomio e aggiungendo vincoli da risolvere per i coefficienti, ma ora sto iniziando a chiedermi ...
Esiste un modo migliore di questo per rendere più fluido il movimento dei servi e sembrare più realistico?