Aller au contenu


Contenu de xav12358

Il y a 10 élément(s) pour xav12358 (recherche limitée depuis 03-avril 13)


#63667 Integration de vitesse

Posté par xav12358 sur 04 février 2015 - 10:53 dans Programmation

Bonjour,

 

Je dois réaliser la programmation d'un sujet sur un bras robotique.

 

J'ai un bras robotique sur un chariot qui se déplace selon un axe (le bras également). Le bras est une tige droite qui est fixé sur le chariot en un point.

 

J'ai comme capteur a disposition, la gyromètre sur le bras qui me donne la vitesse de rotation du bras et un capteur qui me donne la position du capteur en bout du bras et sa vitesse.

 

Connaissant la longueur de la tige, je dois donner l'estimation de la vitesse du chariot.

 

Je voudrais appliquer un filtre de kalman mais je ne sais pas comment et sur quelles données l'appliquer. Je m'explique:

- Connaissait la vitesse horizontal du capteur en bout de bras et la vitesse de rotation du bras, je peux en déduire une vitesse horizontal corrigé du chariot

- connaissant la position angulaire du bras et la position du capteur en bout de bras, je peux en déduire la position estimée du chariot. que j'ai a plus faible fréquence.

 

Je voudrais intégrer la vitesse et la position pour avoir une position fiable d chariot sur l'axe.

Je ne sais pas si dans le filtre de kalman j'intégre les vitesses corrigés ou brutes , pareil pour les positions.

J'ai deux solutions :

- soit je corrige les deux données et je fais un filtre de kalman avec un vecteur d'état à 2 dimensions (px et vx)

- soit j'utilise les vitesses et positions brutes dans ce cas le vecteur d'état va être plus grand je devrais intégrer certainement la vitesse angulaire et l'angle du bras.

 

 

Quel serais la meilleur solution selon vous?

 

D'avance merci.

 




#60821 Question sur quadrirotor

Posté par xav12358 sur 05 juin 2014 - 06:29 dans Programmation

Ba en fait il faut une valeur neutre de vitesse autour de laquelle on ajoute des valeurs de pid.

En fait pour chaque moteur on a une parti dédié au tangage, au roulis, au lacet et au pas.
Pour le pas, une valeur neutre est mise pour permettre au quadri de rester stable en altitude.



#60789 Question sur quadrirotor

Posté par xav12358 sur 29 mai 2014 - 04:21 dans Programmation

Bonjour,

Je m'interesse au quadrirotor et plus particulierement à leur asservissement. J'ai quelques notions en régulation pid, ma question porte sur l'asservissement en altitude d'un quadrirotor.

Quand on pilot en manuel le quadrirotor, on gere toujours le pas pour faire en sorte qu"il se stabilise. Sur un autopilot, on a une vitesse neutre pour le pas et on asservie autour de cette valeur neutre avec un asservissement type pid.

Ma question est la suivante, on sait que en fonction de la charge ou du niveau de batteries, le neutre peut changer pour gérer l'altitude. Comment un autopilot s'arrange pour faire en sorte que ce soit transparent pour nous, c'est a dire comment il recale le neutre?

Si quelqu'un pouvait m'éclairer?

D'avance merci.



#58118 Integration de données

Posté par xav12358 sur 20 octobre 2013 - 10:34 dans Programmation

C'était purement théorique, je n'ai pas deux capteurs qui captent de vitesse. C'etait juste pour savoir quelle serait la valeur de deltaT en fonction de différents capteurs ayant des temps d'acquisition complétement différents.

Pour compenser l'imprécision du capteur d'accélération notamment il y a les coefficients alpha1 et alpha2.
Comme dans ce lien qui explique comment intégrer les données gyros et accéléros pour faire une centrale inercielle: http://www.starlino.com/imu_guide.html

On fusionne les données de gyro et d'accéléros pour une estimation de la position angulaire :

Rest(n) = (Racc * w1 + Rgyro * w2 ) / (w1 + w2)
Rest(n) = (Racc * w1/w1 + Rgyro * w2/w1 ) / (w1/w1 + w2/w1)
Rest(n) = (Racc + Rgyro * wGyro ) / (1 + wGyro) = alpha1* Racc + RGyro*alpha2 avec alpha1+alpha2 =1



#58107 Integration de données

Posté par xav12358 sur 18 octobre 2013 - 08:02 dans Programmation

Concernant la variance de la valeur estimée j'ai un document pour l'expliquer à la page 64 figure 1.6:

http://www.cs.unc.ed...ursePack_08.pdf

On voit que la variance du résultat est inférieure aux valeurs des deux données d'entrée.

Pour le code je me suis trompé, je voulais le faire sur la position, je recommence:

%% Initialisation
pk =0

tref = timenow;

while(1)
if(c1)
{
pk = pk + alpha1*vc1*(timenow-tref);
tref = timenow
}

if(c2)
{
pk = pk + alpha2*(time -tref)^2/2*ac1
tref = timenow
}


C'est mieux ?



#58105 Integration de données

Posté par xav12358 sur 17 octobre 2013 - 08:51 dans Programmation

Merci Black Templar d'avoir enfin compris mon problème.

Donc en fait quand on voit des filtres de kalman (ou d'autre algo) ou on considère que deltaT est toujours égale a la fréquence d'acquisition du signal c'est faux ?

Je prend un autre exemple, je veux fusionner une donné de vitesse que je connais et une donné d'accélération que j'ai. J'ai deux capteurs c1 pour la vitesse et c2 pour l'accéléromètre avec des fréquences d'acquisitions différentes ca donnerait:

%% Initialisation
vk =0

tref = timenow;

while(1)
if(c1)
{
vk = vk + alpha1*vc1;
tref = timenow
}

if(c2)
{
vk = vk + alpha2*(time -tref)*ac1
tref = timenow
}

Ou alpha1 et alpha2 sont les coefficients de confiance des capteurs tel que alpha1 + alpha2 =1.

Je me suis trompé ?

Pour la question de R1D1 concernant l'intérêt de fusionner deux capteur qui donne la même donnée. Les deux capteurs peuvent avoir en pratique des écart types différents et donc dans le cas de l'utilisation du filtre de Kalman si sigma1 et 2 correspondent aux capteurs 1 et 2,on aura:
sigmaf = f(sigma1,sigma2) < min(sigma1,sigma2).

D'apres ce que j'ai cru comprendre ...



#58098 Integration de données

Posté par xav12358 sur 17 octobre 2013 - 11:27 dans Programmation

Je crois que je me suis mal fait comprendre depuis le début.

Je n'ai pas de problème pour filtrer les signaux (filtre passe bas,...). Supposons que les signaux sont bon et qu'ils n'ont pas d'erreur mais qu'il donne la même information mais a des intervalles de temps différents.

Normalement pour intégrer une position on intégre les vitesse pour un capteur ca donne:

p(t) = p(t-1) + deltaT*v(t) ou deltaT est la fréquence d'acqusition de la données genre 10ms.

mais dans le cas ou on fusionne deux capteurs qui donne deux vitesses (à fréquence d'acquisition de 20 et 30ms) ca va donner quoi?
p(t) = p(t-1) + deltaT1*v1(t)
et p(t) = p(t-1) + deltaT2*v2(t)

Mais dans ce cas deltaT1 et deltaT2 ne vaudra pas 20 et 30ms ? Pour moi ca doit valoir la durée depuis la derniere fusion...
C'est a dire pour intégrer la vitesse du capteur c2 si depuis la derniere intégration il s'est passé 5ms deltaT2 vaudra 5ms et pas 30ms. Ai-je raison?
Sinon pour moi la position p(t) ne sera pas correcte si on carte deltaT1 et deltaT2 égaux à 20 et 30ms.

J'espere que j'ai été plus clair...



#58096 Integration de données

Posté par xav12358 sur 17 octobre 2013 - 10:35 dans Programmation

Personne pour me répondre ?

Pourtant je suppose que ca doit être une question basique quand on fait de la fusion des données ? Nan?



#57969 Integration de données

Posté par xav12358 sur 01 octobre 2013 - 07:55 dans Programmation

En fait j'imagine qe j'ai deux capteurs qui me donne la meme information mais à intervalle de temps complétement différents. Ces deux capteurs me donnent la meme information, c'est a dire les vitesses vx et vy.

Mon problème est de savoir comment fusionner ces deux données capteurs.

L'equation je la connais effectivement,c'est ce que j'ai fait dans mon algorithme. Mon problème est de savoir à quoi correspond cette "écart de temps" dans la mesure ou j'ai deux capteurs qui ont des temps d'acquisition completement différent.

J'avais oublié quelque chose dans mon algo, le voici modifié:

Initialisation:
Posx = 0
Posy = 0
tref = 0

while(1)

si(c1 a une donnée) alors
tnow = donnedate
Posx+ = (tnow-tref)*v1x
Posy+ = (tnow-tref)*v1y
tref = donnedate
finsi

si(c2 a une donnée) alors
tnow = donnedate
Posx+ = (tnow-tref)*v2x
Posy+ = (tnow-tref)*v2y
tref = donnedate
finsi

finwhile



#57964 Integration de données

Posté par xav12358 sur 30 septembre 2013 - 04:54 dans Programmation

Tout d'abord bonjour à tous et à toutes,

Je suis nouveau sur ce forum, je suis étudiant en éléctronique.

Je voulais poser une question car j'ai un soucis d'intégration de données sur un projet.
J'ai plusieurs vitesses de déplacement qui me viennent de différent capteur et je voudrais les intégrer.
J'ai deux capteurs avec des fréquences d'acquisition différentes donc un des capteurs qui me fournit les données de manière asynchrone.

J'ai donc un capteur c1 qui me donne des données de vitesse v1 etun capteur c2 qui me donne des données de vitesse v2.

Je voudrais intégrer ces deux vitesses instantanées pour obtenir une position et voici mon programme:


Initialisation:
Posx = 0
Posy = 0
tref = 0


si(c1 a une donnée) alors
tnow = donnedate
Posx+ = (tnow-tref)*v1x
Posy+ = (tnow-tref)*v1y
finsi

si(c2 a une donnée) alors
tnow = donnedate
Posx+ = (tnow-tref)*v2x
Posy+ = (tnow-tref)*v2y
finsi


Voila, il faut dire que je ne tiens pas compte des rotations éventuelles et j'ai fait l'hypothese que j'obtenais les données dans le même référenciel.

Quelqu'un pourrait me dire si ma démarche est bonne?

D'avance merci.