Eu tenho uma função discreta que representa uma posição 1d no espaço ao longo do tempo. Eu tenho um sistema de movimento que gostaria de obter essa curva, mas, devido a restrições no empurrão (terceira derivada) e aceleração (segunda derivada), ele não pode realmente alcançar o movimento. Isso ocorre devido a uma descontinuidade na função, onde passa de um sinal plano para um aumento acentuado.
Estou procurando um algoritmo que pegue as séries discretas e produza uma nova série que se aproxime do original, sem violar os limites superiores da magnitude da segunda e terceira derivadas. Não tenho uma definição estrita de como gostaria de minimizar o erro para a posição, mas um ajuste de erro quadrático médio de soma padrão é provavelmente razoável. Para a derivada, estou aproximando usando a diferença centralizada padrão.
Tentei simplesmente aplicar os limites e dirigir em direção à posição do alvo o mais rápido possível, mas isso é instável (não considera adequadamente o tempo de repuxar e desacelerar e, portanto, ultrapassa o alvo e oscila). aplicando um filtro passa-baixas repetido até que as restrições sejam atendidas, mas isso parece um hack e não estou convencido de que isso me dará um ajuste muito bom. Existe alguma maneira de criar um filtro que limite especificamente as derivadas do sinal?
Algumas notas adicionais:
A nova série deve ter o mesmo comprimento que a série original. Esse movimento ocorre ao mesmo tempo que outra operação e os dois são estritamente sincronizados. É aceitável, no entanto, se não conseguir atingir a posição final dentro das restrições; isso significa apenas que a operação paralela é muito agressiva para o movimento seguir. Isso não deve ocorrer, na prática, quando configurado corretamente.
Comecei a investigar uma abordagem iterativa que identifica um ponto que viola as restrições, depois ajusta o erro e divide o negativo do erro entre os dois pontos vizinhos, para que a soma dos valores da função seja preservada. Ele calcula o erro no vizinho e transfere o erro restante para a esquerda ou direita, respectivamente. Se atingir o final da função e ainda houver erro, ele apenas atinge os limites. Não sei se essa abordagem tem algum fundamento teórico sólido, mas vou experimentar e ver como ela se comporta com meus sinais.
Mais notas:
É razoável aproximar a função de empurrão (terceira derivada) como uma combinação linear de funções de impulso e impulso não sobrepostas. Para uma série de entradas típica, é algo parecido com isto (o azul vs. o vermelho é minha tentativa atual de filtrar; isso é principalmente apenas para transmitir uma idéia da forma):
Aqui está um perfil típico de aceleração:
Aqui está um perfil de velocidade típico (a subida no início é o que causa todo o problema; a física do problema faz o sistema preferir começar a se mover quase a uma velocidade infinita desde o início, mas considerações práticas impedem ):
Para aqueles interessados, aqui está a série de dados brutos, delimitados por tabulações, a partir dos quais as derivadas da diferença central foram aproximadas para produzir os gráficos acima:
x 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.510544858 4.529570168 4.548595479 4.567620789 4.5866461 4.60567141 4.624696721 4.643722031 4.662747342 4.681772652 4.700797963 4.719823273 4.738848584 4.757873894 4.776899204 4.795924515 4.814949825 4.833975136 4.853000446 4.872025757 4.891051067 4.910076378 4.929101688 4.948126999 4.967152309 4.98617762 5.00520293 5.024228241 5.043253551 5.062278862 5.081304172 5.100329483 5.119354793 5.138380104 5.157405414 5.176430725 5.195456035 5.214481346 5.233506656 5.252531967 5.271557277 5.290582588 5.309607898 5.328633209 5.347658519 5.36668383 5.38570914 5.404734451 5.423759761 5.442785072 5.461810382 5.480714657 5.497626044 5.514537431 5.531448818 5.548360206 5.565271593 5.58218298 5.599094367 5.616005754 5.632917141 5.649828528 5.666739915 5.683651302 5.700562689 5.717474077 5.734385464 5.751296851 5.768208238 5.785119625 5.802031012 5.818942399 5.835853786 5.852765173 5.869676561 5.886587948 5.903499335 5.920410722 5.937322109 5.954233496 5.971144883 5.98805627 6.004967657 6.021879044 6.038790432 6.055701819 6.072613206 6.089524593 6.10643598 6.123347367 6.140258754 6.157170141 6.174081528 6.190992916 6.207904303 6.22481569 6.241727077 6.258638464 6.275549851 6.292461238 6.309372625 6.326284012 6.343195399 6.360106787 6.377018174 6.393929561 6.410840948 6.427752335 6.444663722 6.461575109 6.478486496 6.495397883 6.512309271 6.529220658 6.546132045 6.563043432 6.579954819 6.596866206 6.613777593 6.63068898 6.647600367 6.664511754 6.681423142 6.698334529 6.715245916 6.732157303 6.74906869 6.765980077 6.782891464 6.79783353 6.807698506 6.817563482 6.827428457 6.837293433 6.847158409 6.857023385 6.866888361 6.876753336 6.886618312 6.896483288 6.906348264 6.91621324 6.926078215 6.935943191 6.945808167 6.955673143 6.965538119 6.975403095 6.98526807 6.995133046 7.004998022 7.014862998 7.024727974 7.034592949 7.044457925 7.054322901 7.064187877 7.074052853 7.083917828 7.093782804 7.10364778 7.113512756 7.123377732 7.133242707 7.143107683 7.152972659 7.162837635 7.172702611 7.182567587 7.192432562 7.202297538 7.212162514 7.22202749 7.231892466 7.241757441 7.251622417 7.261487393 7.271352369 7.281217345 7.29108232 7.300947296 7.310812272 7.320677248 7.330542224 7.3404072 7.350272175 7.360137151 7.370002127 7.379867103 7.389732079 7.399597054 7.40946203 7.419327006 7.429191982 7.439056958 7.448921933 7.45668417 7.46311785 7.46955153 7.47598521 7.48241889 7.488852569 7.495286249 7.501719929 7.508153609 7.514587289 7.521020969 7.527454649 7.533888329 7.540322008 7.546755688 7.553189368 7.559623048 7.566056728 7.572490408 7.578924088 7.585357768 7.591791447 7.598225127 7.604658807 7.611092487 7.617471594 7.622952136 7.628432678 7.63391322 7.639393762 7.644874304 7.650354846 7.655835389 7.661315931 7.666796473 7.672277015 7.677757557 7.683238099 7.688718641 7.694199183 7.699679725 7.705160268 7.71064081 7.716121352 7.721601894 7.727082436 7.732562978 7.73804352 7.743524062 7.749004605 7.754485147 7.759965689 7.765446231 7.770926773 7.776407315 7.781828236 7.786267475 7.790706714 7.795145953 7.799585192 7.804024432 7.808463671 7.81290291 7.817342149 7.821781388 7.826220627 7.830659866 7.835099105 7.839538344 7.843977584 7.848416823 7.852856062 7.857295301 7.86173454 7.866173779 7.870613018 7.875052257 7.879491497 7.883930736 7.888369975 7.892809214 7.897248453 7.901687692 7.906126931 7.91056617 7.915005409 7.919444649 7.923883888 7.928323127 7.932762366 7.937201605 7.941640844 7.946080083 7.950519322 7.954958561 7.959397801 7.96383704 7.968276279 7.972715518 7.977154757 7.980384921 7.982851165 7.985317409 7.987783653 7.990249897 7.992716141 7.995182385 7.997648629 8.000114873 8.002581117 8.005047361 8.007513605 8.009979849 8.012446092 8.014912336 8.01737858 8.019844824 8.022311068 8.024777312 8.027243556 8.0297098 8.032176044 8.034642288 8.037108532 8.039574776 8.04204102 8.044507264 8.046973508 8.049439752 8.051905996 8.05437224 8.056838484 8.059304728 8.061633119 8.063606114 8.065579109 8.067552105 8.0695251 8.071498095 8.07347109 8.075444085 8.07741708 8.079390076 8.081363071 8.083336066 8.085309061 8.087282056 8.089255051 8.091228046 8.093201042 8.09410447 8.094332124 8.094559777 8.09478743 8.095015084 8.095242737 8.09547039 8.095698043 8.095925697 8.09615335 8.096381003 8.096608657 8.09683631 8.097063963 8.097291616 8.09751927 8.097746923 8.097974576 8.09820223 8.098429883 8.098657536 8.098885189 8.099112843 8.099340496 8.099568149 8.099795803 8.100023456 8.100251109 8.100478762 8.100706416 8.100934069 8.101161722 8.101389376 8.101617029 8.101844682 8.102072336 8.102299989 8.102527642 8.102755295 8.102982949 8.103210602 8.103438255 8.103665909 8.103893562 8.104121215 8.104348868 8.104576522 8.104804175 8.105031828 8.105259482 8.105487135 8.105714788 8.105942441 8.106170095 8.106397748 8.106625401 8.106853055 8.107080708 8.107308361 8.107536014 8.107763668 8.107991321 8.108218974 8.108446628 8.108674183 8.108899792 8.109120089 8.109331659 8.109531087 8.109714959 8.10987986 8.110022376 8.110139158 8.11022965 8.110297009 8.110344649 8.110375986 8.110394434 8.110403409 8.110406324 8.110406324