Eu criei um pequeno robô rastreador há pouco tempo, que tinha duas pernas com dois graus de liberdade cada, totalizando 4 servos RC. Enquanto programava o movimento das pernas, notei que elas se moviam com rigidez. Faz sentido que o controlador interno do servo RC tenha uma resposta muito rápida aos comandos de posição, mas eu queria que meu rastreador se movesse de uma maneira que parecesse um pouco mais suave e realista.
Minha solução foi criar uma função cúbica do tempo que descreve o caminho dos servos e, em seguida, definir sua posição em pequenos incrementos de tempo, resultando em movimentos mais suaves. Essencialmente, o que fiz foi resolver os coeficientes em uma equação cúbica usando o intervalo de tempo, a posição inicial e final do servo e as taxas inicial e final que o servo deve mover (que é apenas a derivada da posição):
Resolva para , , e :a 1 a 2 a 3
r uma t e ( t ) = p o s i t i o n ' ( t ) = um 1 + 2 a 2 t + 3 a 3 t
Dado: , , ,p o s i t i o n ( T f ) r uma t e ( 0 ) r uma t e ( t F )
Defino a taxa do servo entre um par de movimentos como zero se os movimentos estiverem em direções opostas e positivo ou negativo se os movimentos estiverem na direção positiva ou negativa, respectivamente.
Isso funcionou muito bem, mas essa solução é limitada de algumas maneiras. Por um lado, é difícil decidir quais devem ser exatamente as taxas entre os movimentos que seguem na mesma direção. Usei a média das pistas à frente e atrás de uma posição específica entre os movimentos, mas não está claro para mim que é o ideal. Segundo, as curvas cúbicas podem levar o servo para uma posição fora do intervalo das posições no início e no final de um movimento, o que pode ser indesejável. Por exemplo, em algum momento durante o intervalo de tempo, a curva pode fazer com que o servo ultrapasse a segunda posição ou abaixo da primeira posição. Terceiro, a geração de curvas aqui não considera a taxa máxima que o servo pode girar; portanto, uma curva pode fazer com que o servo se mova a uma velocidade irrealista. Com isso,
Negligenciando essa última preocupação, esses problemas podem ser resolvidos aumentando o grau do polinômio e adicionando restrições para resolver os coeficientes, mas agora estou começando a me perguntar ...
Existe uma maneira melhor do que isso para suavizar o movimento do servo e parecer mais realista?