Puissance de l'arduino Uno

Bonjour !

J'aimerais savoir si ma Uno est capable d'exécuter sans problème des calculs matriciels assez compliqué ?

Ce serait pour implémenter un filtre de Kalman mais je n'ai aucune idée des limites de mon arduino Uno.

Certains ont mentionné que le fait que ce soit un microcontrôleur 8 bits était un obstacle à ces calculs, est - ce vrai ?

Merci d'avance.

Bonjour,

C'est sûr qu'on peut trouver mieux comme plateforme pour faire ça, mais ça reste quand même faisable. En fait, tout dépend à quelle cadence tu veux faire tes calculs car ça fonctionnera seulement si la Uno fait les calculs plus vite que le temps imparti.

Donc, question: quelle doit être la cadence d'échantillonnage pour exécuter ton filtre de Kalman ?

arduinopizza: Bonjour !

J'aimerais savoir si ma Uno est capable d'exécuter sans problème des calculs matriciels assez compliqué ?

Ce serait pour implémenter un filtre de Kalman mais je n'ai aucune idée des limites de mon arduino Uno.

Certains ont mentionné que le fait que ce soit un microcontrôleur 8 bits était un obstacle à ces calculs, est - ce vrai ?

Merci d'avance.

Bonjour,

Je ferais la même remarque, avec quelques questions : - Pour quoi faire tous ces calculs - Et surtout, à quelle cadence ?

Serge .D

Sinon, selon que l'on reste sur des expressions linéaires ou non (dans ce cas calcul différentiel en vue) les contraintes vont changer. http://www.ferdinandpiette.com/blog/2011/04/exemple-dutilisation-du-filtre-de-kalman/

on fait bien des filtres de kalmann pour des centrales inertielle ( gyro et accéléromètre)

hazerty565: on fait bien des filtres de kalmann pour des centrales inertielle ( gyro et accéléromètre)

C'est pas pour autant que ça marchera sur son système (qu'on ne connaît pas encore).

Pour faire joujou avec les matrices jacobiennes et le calcul différentiel .... bon courage !

Serge .D

aligote: Pour faire joujou avec les matrices jacobiennes et le calcul différentiel .... bon courage !

La plupart du temps (dans le contexte d'une question posée par un Arduiniste) ça reste quand même gentiment linéaire.

Merci pour vos réponses !

Alors :

3Sigma: Bonjour,

C'est sûr qu'on peut trouver mieux comme plateforme pour faire ça, mais ça reste quand même faisable. En fait, tout dépend à quelle cadence tu veux faire tes calculs car ça fonctionnera seulement si la Uno fait les calculs plus vite que le temps imparti.

Donc, question: quelle doit être la cadence d'échantillonnage pour exécuter ton filtre de Kalman ?

Honnêtement je n'en sais rien... je suis étudiant en master de mécanique mais je me lance dans l'électronique grâce à arduino quand j'ai du temps libre donc je ne sais pas trop ce qu'est la fréquence d’échantillonnage même si je pense voir de quoi il s'agit. Le plus rapide sera le mieux.

aligote: Bonjour,

Je ferais la même remarque, avec quelques questions : - Pour quoi faire tous ces calculs - Et surtout, à quelle cadence ?

Serge .D

Sinon, selon que l'on reste sur des expressions linéaires ou non (dans ce cas calcul différentiel en vue) les contraintes vont changer. http://www.ferdinandpiette.com/blog/2011/04/exemple-dutilisation-du-filtre-de-kalman/

En gros, j'ai besoin de filtrer les données de mon gyro et de mon accéléromètre mais d'après ce que j'ai pu comprendre le filtre appliqué dépendra de la linéarité de mon système. Sachant que je souhaite stabiliser un drone avec tout ça, je ne pense pas que les variations d'angles soit linéaire ( imaginons que je vole n'importe comment).

Donc j'ai pensé à opter pour le filtre dit "Unscented Kalman filter" . J'ai vu que certaines personnes avaient utilisées des filtres de Kalman simple mais je pense qu'elles se trompent étant donné que ce filtre n'est applicable que pour les systèmes linéaires.

J'ai vu qu'il y avait le filtre complémentaire mais apparemment il est moins puissant que le filtre de Kalman et je ne sais pas s'il est applicable aux systèmes non linéaire.

aligote: Pour faire joujou avec les matrices jacobiennes et le calcul différentiel .... bon courage !

Serge .D

La partie théorique n'est pas vraiment un problème pour moi, j'ai plus peur que l'Arduino Uno ne soit pas capable de tenir le rythme étant donnée qu'un drone est assez dynamique ( donc j'imagine qu'il faut une grande puissance de calcul).

Le plus rapide sera le mieux.

Non !

Cette façon de raisonner mène droit dans le mur. Ce qui fait plus fait rarement moins. L'idéal n'existe pas, la vie c'est un gigantesque compromis. Un micro plus rapide aura des inconvénients qu'un micro Atmel avr n'aura pas.

Honnêtement je n'en sais rien...

Et bien il faut se documenter et pas imaginer.

68tjs: Non !

Cette façon de raisonner mène droit dans le mur. Ce qui fait plus fait rarement moins. L'idéal n'existe pas, la vie c'est un gigantesque compromis. Un micro plus rapide aura des inconvénients qu'un micro Atmel avr n'aura pas. Et bien il faut se documenter et pas imaginer.

bonjour +1 ;)

68tjs: Non !

Cette façon de raisonner mène droit dans le mur. Ce qui fait plus fait rarement moins. L'idéal n'existe pas, la vie c'est un gigantesque compromis. Un micro plus rapide aura des inconvénients qu'un micro Atmel avr n'aura pas. Et bien il faut se documenter et pas imaginer.

Me documenter ? J'ai 25 onglets d'ouvert sur des sujets différents ! Je veux bien me "documenter" mais faut déjà savoir sur quoi se documenter ! Regarde, la on m'a parlé de fréquence d’échantillonnage, même si j'essaie de me documenter dessus je n'en aurait qu'une vague idée. Le sujet est bien trop vaste , je ne peux pas m'éparpiller indéfiniment dans tous les domaines que je ne maîtrise pas..

arduinopizza: La partie théorique n'est pas vraiment un problème pour moi, j'ai plus peur que l'Arduino Uno ne soit pas capable de tenir le rythme étant donnée qu'un drone est assez dynamique ( donc j'imagine qu'il faut une grande puissance de calcul).

Ca m'étonnerait aussi que la Uno tienne le coup. A part ça, sur l'aspect linéaire / non linéaire, tu peux aussi commencer avec un système linéarisé.

Toujours est-il que si tu démarres dans l'électronique et l'Arduino avec comme ambition d'implémenter un filtre de Kalman non-linéaire sur un drone, je te conseille très, très vivement de procéder par étape, sinon c'est l'échec assuré. Quand je dis "par étape", ça ne veut pas dire que le Kalman linéaire est l'étape 1. Non, ça c'est l'étape N avec N >> 1.

3Sigma: Ca m'étonnerait aussi que la Uno tienne le coup. A part ça, sur l'aspect linéaire / non linéaire, tu peux aussi commencer avec un système linéarisé.

Toujours est-il que si tu démarres dans l'électronique et l'Arduino avec comme ambition d'implémenter un filtre de Kalman non-linéaire sur un drone, je te conseille très, très vivement de procéder par étape, sinon c'est l'échec assuré. Quand je dis "par étape", ça ne veut pas dire que le Kalman linéaire est l'étape 1. Non, ça c'est l'étape N avec N >> 1.

Comment ça "un système linéarisé" ? Tu veux parler du filtre de Kalman étendu ?

Je pense procéder par étape.. Enfin, il me reste plus qu'à obtenir mes angles et coder tout ça.. Tu veux parler de quelles autres étapes ?

arduinopizza: Comment ça "un système linéarisé" ? Tu veux parler du filtre de Kalman étendu ?

Non. Le filtre de Kalman intègre deux choses:

  • Un filtre
  • Un modèle de ton système (ton drone)

En gros, le filtre de Kalman simule ton système (à partir d'un modèle que tu dois écrire) sur un court intervalle de temps et corrige ensuite d'une manière optimale le résultat de cette simulation avec les mesures réalisées sur le drone. Ton drone est non linéaire, mais tu peux très bien écrire ses équations de façon linéarisée. Il y a un tas de trucs qui volent et dont les asservissements et filtres ont été conçus sur des modèles linéaires. Pour revenir au "court intervalle de temps" dont je parle plus haut, c'est ça la "cadence d'échantillonnage" (d'ailleurs j'aurais plutôt dû parler de cadence d'exécution, mais bon, ça revient ici au même que la cadence d'échantillonnage de tes mesures).

arduinopizza: Tu veux parler de quelles autres étapes ?

Liste non exhaustive:

  • faire clignoter une LED
  • faire tourner un moteur
  • lire les infos de ta centrale inertielle
  • faire un Kalman sur un système simple (un moteur par exemple)
  • ...

3Sigma: Non. Le filtre de Kalman intègre deux choses:

  • Un filtre
  • Un modèle de ton système (ton drone)

En gros, le filtre de Kalman simule ton système (à partir d'un modèle que tu dois écrire) sur un court intervalle de temps et corrige ensuite d'une manière optimale le résultat de cette simulation avec les mesures réalisées sur le drone. Ton drone est non linéaire, mais tu peux très bien écrire ses équations de façon linéarisée. Il y a un tas de trucs qui volent et dont les asservissements et filtres ont été conçus sur des modèles linéaires.

J'ai l'impression d'avoir confondu quelque chose... Pour moi le filtre de Kalman c'était une série de calculs itératifs comprenant des matrices de covariance, calcul de gain, des erreurs d'estimations et de mesures etc etc Je pensais qu'il suffisait de prendre les données fournies par ma centrale inertielle et de les intégrées dans les équations du filtre de Kalman pour en récupérer des valeurs correctes. Que veut tu dire par "modèle de mon système" ? Oui , là mon système est mon drone mais je ne vois pas ce que ça représente dans mon filtre. Tu as dit "ses équations de façon linéarisée" , de quelles équations tu parles ? Les équations cinématiques ? Tu peux me donner un exemple de modèle ?

3Sigma: Liste non exhaustive:

  • faire clignoter une LED
  • faire tourner un moteur
  • lire les infos de ta centrale inertielle
  • faire un Kalman sur un système simple (un moteur par exemple)
  • ...

Haha quand je disais que je débutais je pensais un peu plus que ça quand même. J'ai déjà fait tous ça à part le filtre de Kalman pour le moteur ( je pense que ce serait pas bête de commencer par ça d'ailleurs...) .

Modèle du système = équations différentielles, dynamique du solide. Si tu fais un master de mécanique, j'imagine que la relation fondamentale de la dynamique et tout ce qui s'en suit doit vaguement te parler. J'imagine aussi que tu as déjà mis en équations des systèmes mécaniques et que tu sais que lorsqu'on applique une force ou un couple sur un truc sensé bouger ou tourner, le truc en question subit une accélération.

Je te conseille de lire un truc sérieux sur le filtre de Kalman pour comprendre de quoi il retourne. Si tu te contentes de lire la référence citée plus haut (http://www.ferdinandpiette.com/blog/2011/04/exemple-dutilisation-du-filtre-de-kalman/), ce n'est pas suffisant car les calculs sont fait dans l'hypothèse où le système ne subit pas d'accélération. Or, j'imagine que ton drone va bouger un peu, non ?

Donc, si tu calcules des vitesses angulaires à partir de ta centrale inertielle lorsque ton système subit des accélérations alors que tu fais l'hypothèse qu'il n'y en a pas, ça ne va pas donner des choses terribles.

Bref, voilà ce que fait le Kalman:

  • une première phase où le système est simulé à partir des équations de la dynamique que tu as écrites et programmées
  • une deuxième phase où le résultat de ces équations est corrigé à partir des mesures

Le caractère optimal est régi par les matrices de covariance de l'erreur de prédiction (la prédiction concerne la simulation de ton système) et de covariance de l'erreur de mesure. En fonction du poids relatif de ces deux matrices, le filtre aura plus confiance dans la prédiction que dans la mesure, ou inversement. Si tu as une grande confiance dans ton modèle (= tes équations) et si tu as des mesures pourries, tu pourras mettre plus de poids sur le modèle. Sinon, tu pourras mettre plus de poids sur les mesures.

Au final, si ça peut te rassurer, il y a plein de gens qui sont dans ta situation, qui ont écrit un "faux" filtre de Kalman pour leur drone et ça marche quand même... parce que derrière les asservissements corrigent tout.

3Sigma: Modèle du système = équations différentielles, dynamique du solide. Si tu fais un master de mécanique, j'imagine que la relation fondamentale de la dynamique et tout ce qui s'en suit doit vaguement te parler. J'imagine aussi que tu as déjà mis en équations des systèmes mécaniques et que tu sais que lorsqu'on applique une force ou un couple sur un truc sensé bouger ou tourner, le truc en question subit une accélération.

Je te conseille de lire un truc sérieux sur le filtre de Kalman pour comprendre de quoi il retourne. Si tu te contentes de lire la référence citée plus haut (http://www.ferdinandpiette.com/blog/2011/04/exemple-dutilisation-du-filtre-de-kalman/), ce n'est pas suffisant car les calculs sont fait dans l'hypothèse où le système ne subit pas d'accélération. Or, j'imagine que ton drone va bouger un peu, non ?

Donc, si tu calcules des vitesses angulaires à partir de ta centrale inertielle lorsque ton système subit des accélérations alors que tu fais l'hypothèse qu'il n'y en a pas, ça ne va pas donner des choses terribles.

Bref, voilà ce que fait le Kalman:

  • une première phase où le système est simulé à partir des équations de la dynamique que tu as écrites et programmées
  • une deuxième phase où le résultat de ces équations est corrigé à partir des mesures

Le caractère optimal est régi par les matrices de covariance de l'erreur de prédiction (la prédiction concerne la simulation de ton système) et de covariance de l'erreur de mesure. En fonction du poids relatif de ces deux matrices, le filtre aura plus confiance dans la prédiction que dans la mesure, ou inversement. Si tu as une grande confiance dans ton modèle (= tes équations) et si tu as des mesures pourries, tu pourras mettre plus de poids sur le modèle. Sinon, tu pourras mettre plus de poids sur les mesures.

Ok. Je pense avoir compris ce que tu veux dire. C'est plus complexe que je ne pensais. Je vais m' intéresser à la dynamique du drone mais supposons que je trouve mes équations, je ne vois pas où elles interviennent dans le filtre de Kalman. J'ai pas mal étudié ce filtre ( incluant évidemment l'accélération), voici les étapes que j'ai noté :

  1. On a besoin d'une matrice "X" comprenant l'angle et la vitesse angulaire (la dérivée de l'angle quoi) et aussi d'une matrice "P" initiale de covariance des erreurs 'estimations (que l'on impose au départ)

  2. On fait une estimation de ces matrices au rang k+1

  3. On calcule le gain en utilisant nos estimations et nos mesures

  4. Enfin, on calcule la matrice "X" et "P" final en se servant du gain de Kalman calculé pour mettre une relative importance entre les mesures et les estimations.

Cependant, je ne vois toujours pas où mes futurs équations décrivant la dynamique de mon drone vont intervenir... En plus de ça, ces 4 étapes décrivent le filtre de Kalman simple (cas linéaire)...comment vais-je pouvoir appliquer cela à mon drone ? Comme tu l'as dit, ce ne sera pas terrible... Dois-je directement passer au filtre de Kalman avec les Jacobiennes etc ?

Je crois que je suis encore plus perdu qu'avant :confused: :sweat_smile:

3Sigma: Au final, si ça peut te rassurer, il y a plein de gens qui sont dans ta situation, qui ont écrit un "faux" filtre de Kalman pour leur drone et ça marche quand même... parce que derrière les asservissements corrigent tout.

Quand tu dis asservissement, tu parles des régulateurs PID utilisés pour les moteurs ?

je te conseil de lire ca.. certe en anglais mais au pire il y a google trad

https://robotics.stackexchange.com/questions/277/why-do-i-need-a-kalman-filter

http://www.electronoobs.com/eng_robotica_tut6_1.php

tu as quoi comme gyro, accelerometre?

hazerty565:
je te conseil de lire ca… certe en anglais mais au pire il y a google trad

uav - Why do I need a Kalman filter? - Robotics Stack Exchange

http://www.electronoobs.com/eng_robotica_tut6_1.php

tu as quoi comme gyro, accelerometre?

Merci je vais lire ça de suite. J’ai un MPU 6050 (GY 521)

En ce moment je lis un pdf en anglais sur la dynamique d’un drone, je le joint pour les intéressés.

Biever_2015.pdf (1.2 MB)

arduinopizza: Cependant, je ne vois toujours pas où mes futurs équations décrivant la dynamique de mon drone vont intervenir...

Lis ça: http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies

Le problème avec ce que tu as pu trouver comme "littérature" jusqu'à présent, c'est que énormément d'exemples sont basés sur une centrale inertielle dont les accélérations sont nulles. Dans ces conditions, tu n'as donc pas besoin de modéliser le système puisque tu considères qu'il ne bouge pas (ou plus exactement qu'il n'a pas de dynamique). Avec ces hypothèses, le filtre ne fait pas une estimation correcte pendant les transitoires (c'est-à-dire les phases où ton drone subit des accélérations). Heureusement, comme leur nom l'indique, les transitoires ne durent pas longtemps. Peut-être que ça suffit pour ton besoin. En tout cas, ça suffit au besoin de beaucoup de monde. Mais maintenant, si tu veux faire un truc bien et rigoureux, il faut modéliser la dynamique du drone pour avoir une bonne estimation même pendant les transitoires.

Pour procéder par étape, tu peux très bien commencer avec les hypothèses d'accélérations nulles et voir ce que ça donne. Si ça te suffit tant mieux, ça t'évitera de t'arracher les cheveux sur des choses plus compliquées (qui nécessiteront en plus, sans doute de changer de carte Arduino).

A part ça, oui, le PID est un type d'asservissement.