Article View: fr.sci.electronique
Article #146algorithme de triangulation "double-CORDIC" (was Re: Recherche Microcontroleur)
From: YG
Date: Sat, 01 Nov 2003 02:46
Date: Sat, 01 Nov 2003 02:46
124 lines
5561 bytes
5561 bytes
salut,
bon, j'ai envoy� un gros email � Gaetan.
j'esp�re qu'il l'a bien re�u car mon mailer
n'a pas gard� trace de l'envoi.
je me permets aussi de cross-poster sur fr.comp.algorithmes
car �a d�vie lentement sur son domaine de comp�tences.
je soumets l'id�e "brute de fonderie" � qui �a peut int�resser,
car je n'ai pas encore test� l'algo (pas le temps et puis c'est
pas mon genre de faire les devoirs des �tudiants, gniark gniark gniark !)
mais je crois avoir trouv� une solution qui est � la fois simple,
rapide et relativement pr�cise (dans le sens o� il n'y a
qu'une op�ration complexe � faire, au lieu de plusieurs op�rations
trigo successives qui vont accumuler approximations et erreurs
de calcul, n�cessitant donc des variables plus longues et
plus d'it�rations, donc plus de temps).
Je rappelle que le but est de faire de la triangulation
pour un robot genre coupe E=m6. Je consid�re les �l�ments suivants.
On a 2 capteurs angulaires, donnant 2 angles alpha et beta,
normalis�s de mani�re ad�quate pour que l'algo CORDIC puisse
fonctionner juste par d�calage/test du bit carry.
Les deux capteurs sont s�par�s par une distance L,
que l'on va normaliser � 2^N bits * 0.60725293510314
si on a un registre � N bits.
Pour simplifier encore, les angles
vont seulement de 0 � 90� et ils sont aussi normalis�s
avec la constante qu'il faut (je ne l'ai plus en t�te).
Donc on a 2 angles et une longueur.
�a ne correspond pas aux entr�es de l'algo CORDIC :
en mode "rotation" il prend 1 angle (normalis�)
et une paire x,y de coordonn�es. Il retourne l'angle � 0
et les nouvelles coordonn�es.
L'id�e du "double CORDIC" est d'effectuer 2 rotations
simultan�es et entrelac�es. Il faut �videmment faire
attention car les 2 rotations sont dans des rep�res
diff�rents, il ne faut pas se tromper dans les signes,
mais bon.
Pour la premi�re rotation sur l'axe du capteur 1, on a les coordonn�es
initiales x1=0 et y1=0.60725293510314.
y
^
|
|
2
|
|
| x
|
|
|
|
1-------------------------> x
On va donc effectuer la rotation selon l'angle alpha
et obtenir x2 et y2.
Enfin, c'est juste une premi�re sous-pseudo-rotation.
Ensuite, on effectue une 2� sous-pseudo-rotation selon
l'angle beta avec comme origine le capteur 2 :
(faire aussi attention au signe de l'angle etc.)
y
^
|
|
2-------------------------> x
|
|
| x
|
|
|
|
1
|
|
puis on recommence pour le bit suivant de l'angle alpha etc....
en sortie, on a x et y normalis�s comme une fraction de L.
l'algo "papier" donne:
x1 = 0
y1 = 2^N * 0.60725293510314
boucle N fois :
- un pas de rotation CORDIC : x1,y1,alpha => x2,y2,alpha<<1
- un pas de rotation CORDIC : x2,-y2,beta => x1,-y1,beta<<1
A vue de nez, x et y doivent converger.
Je ne sais pas ce que �a donne si x d�passe L, il faut
utiliser du calcul avec plus de bits pour autoriser �a,
ainsi que revoir les normalisations.
C'est �videmment encore plus compliqu� dans les cas plus
g�n�raux et il y a probablement une m�thode similaire
pour faire de la "vraie" triangulation avec 3 capteurs
(genre radio etc). Mais l� n'est pas le propos...
Ca devrait �tre r�alisable facilement sur un PIC
vu qu'une version 16 bits a �t� �crite (voir
http://www.piclist.com/techref/microchip/math/vector/mag-ng.htm?key=CORDIC&from= )
et pour Gaetan, 8 bits devraient suffire,
rendant le code encore plus l�ger et rapide.
J'aimerais juste savoir si je ne suis pas un abruti,
si l'id�e fonctionne et si �a a d�j� �t� essay�.
YG
PS: Pour ceux qui ne connaissent pas CORDIC, un peu de rattrappage :
http://www.dspguru.com/info/faqs/cordic2.htm
http://www.andraka.com/files/crdcsrvy.pdf
http://my.execpc.com/~geezer/embed/cordic.htm
Je n'ai jamais vu (depuis que je joue avec google pour
trouver des resources sur CORDIC) d'�vocation de l'algo
que j'ai expliqu� ici. Aurais-je donc vraiment invent�
quelquechose de nouveau ?????
Technical Details
Message-ID:
<3fa31c52$0$6966$7a628cd7@news.club-internet.fr>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.stueberl.de!proxad.net!proxad.net!m.t-online.fr!v.t-online.fr!t-online.fr!not-for-mailReferences:
<3f958e16$0$242$626a54ce@news.free.fr> <3fa105ff$0$224$626a54ce@news.free.fr> <3fa1d57f$0$6974$7a628cd7@news.club-internet.fr> <3fa28fa0$0$10434$626a54ce@news.free.fr> <3fa2fc07$0$6972$7a628cd7@news.club-internet.fr>Show Full Headers
Complete Article Headers
X-Google-Language: FRENCH,CP1252 X-Google-Thread: f5075,c5eda34355b73842,start X-Google-Attributes: gidf5075,public X-Google-Thread: 111deb,18d5e2888d59d1e5 X-Google-Attributes: gid111deb,public X-Google-ArrivalTime: 2003-10-31 18:37:12 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!newsfeed.stueberl.de!proxad.net!proxad.net!m.t-online.fr!v.t-online.fr!t-online.fr!not-for-mail Date: Sat, 01 Nov 2003 03:46:56 +0100 From: YG <whygee@f-cpu.org> Organization: Freedom CPU Project User-Agent: Mozilla/5.0 (Windows; U; Win95; en-US; rv:1.4.1) Gecko/20031008 X-Accept-Language: en-us, en, fr MIME-Version: 1.0 Newsgroups: fr.sci.electronique,fr.comp.algorithmes Subject: algorithme de triangulation "double-CORDIC" (was Re: Recherche Microcontroleur) References: <3f958e16$0$242$626a54ce@news.free.fr> <3fa105ff$0$224$626a54ce@news.free.fr> <3fa1d57f$0$6974$7a628cd7@news.club-internet.fr> <3fa28fa0$0$10434$626a54ce@news.free.fr> <3fa2fc07$0$6972$7a628cd7@news.club-internet.fr> In-Reply-To: <3fa2fc07$0$6972$7a628cd7@news.club-internet.fr> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Lines: 125 Message-ID: <3fa31c52$0$6966$7a628cd7@news.club-internet.fr> NNTP-Posting-Date: 01 Nov 2003 02:37:07 GMT NNTP-Posting-Host: 212.194.156.163 X-Trace: 1067654227 news.club-internet.fr 6966 212.194.156.163 X-Complaints-To: abuse@club-internet.fr