21-22/10/06
pyl oct/nov 06

RenDezVousSpatial hp50g

en liaison avec www.lmm.jussieu.fr/~lagree/SIEF/GRAVITATION/RDV/rdv.html; the english version.
Il faut installer "SETUP.BIN" livré dans "ARMToolbox" (source) pour pouvoir faire tourner le programme qui utilise "PrRUN"

On veut faire un rendez vous spatial entre un satellite cible (ici le Soyouz) et un autre, le chasseur (ici Apollo). La représentation est dans le repère de la cible. Cette dernière est donc fixe, on commande le déplacement du chasseur en donnant des impulsions.

La difficulté du pilotage vient du fait que, d'une part on est soumis à la force de Coriolis (on est dans un repère en rotation autour de la terre, ici invisible, mais implicitement à gauche) et d'autre part on est soumis à la gravitation de la terre et à la force centrifuge. L'effet de la force de Coriolis est de nous faire "tourner" sur la droite quand on a une vitesse relative. L'effet conjoint de la gravitation et de la force centrifuge est ici représenté par un terme de "marée": si on est sur une orbite plus grande, on va tourner autour de la terre moins vite et donc de manière relative, s'éloigner de la cible; de même, si l'on est sur une orbite plus basse, on va plus vite et encore s'éloigner de la cible (à lire en français un cours sur les RDV).

On constatera que si on fournit une poussée pour avancer, l'effet initial est bien d'avancer mais, rapidement, on recule!!! En effet, si on fournit une poussée, on augmente le grand axe de la trajectoire, donc, on augmente le temps de révolution, donc on va en arrière...
But du jeu

S'approcher du Soyouz en pilotant une capsule Apollo, se positionner exactement dans l'axe du Soyouz avec une vitesse la plus réduite possible. Attention, le nombre d'impulsions est limité.

Il s'agit de réussir son Rendez Vous Spatial... et c'est spécial!!!
Utiliser les flèches pour se déplacer. Le but du jeu est de s'arrimer au au Soyouz. L'arrimage est effectif lorsque distance Apollo Soyouz est inférieure à 1 (noté D<1) et lorsque la vitesse est inférieure à 2 (noté U<2).

Attention; il y a 100 unités de propergols (noté prop=100).
à chaque niveau, "w" la vitesse de rotation augmente. Au niveau initial, il n'y a pas de rotation.

ALPHA permet de recommencer le niveau, on peut appuyer sur cette touche à tout instant sans perdre de vaisseau.

ON permet de quitter.

Il y a 3 vies, à chaque RDV réussi on a une vie de plus. On perd un vaisseau chaque fois qu'il y a choc ou arrimage raté, c'est à dire si on heurte à une vitesse supérieure à 2, ou décallé de plus de 2 pixels dasn l'axe. Le nombre de points acquis à chaque niveau est le reste de propergol multiplié par le numéro du niveau


Scores: PYL 860; Tanguy 762; PYL 320; Mathurin 212



Que fait le programme?
On lit quelle touche de flèche a été touchée, ce la donne une impulsion px ou py qui vaut -1, 0 ou 1
On en déduit la force appliquée:
fx=3*omega*omega*(x-x0)+2*(omega)*v+px;
fy=                    -2*(omega)*u+py;
la vitesse est recalculée (variation de quantité de mouvement = force):
u=u+dt*fx;
v=v+dt*fy;
Puis la position est actualisée:
x=x+dt*u;
y=y+dt*v;
t=t+dt;


Ce programme a été compilé en "C" grâce à (hpgcc)
attention, il faut réunir à la main dans la hp50g les deux fichiers "TAB.txt" et la chaine obtenue à partir de la compilation (lire le fichier "help.txt" dans "to_merge"), et renommer le résultat "rdvs50g"
C'est ce fichier final binaire qui est donné dans "rdvs50g.HPBN"

Compilation sur PC (arm-hp sur PC win)
arm-elf-gcc -mtune=arm920t -mcpu=arm920t -mlittle-endian -fomit-frame-pointer -Wall -Os -I"c:\arm-hp\include" -L"c:\arm-hp\lib" -mthumb-interwork -mthumb -c rdvs50g.c
arm-elf-ld -L"c:\arm-hp\lib" -T VCld.script "c:\arm-hp\lib"/crt0.o rdvs50g.o -lwin -lggl -lhpg -lhplib -lgcc -o rdvs50g.exe
elf2hp rdvs50g.exe rdvs50g.hp
rm rdvs50g.exe rdvs50g.o




Compilation sur Mac (deuxième contribution de Jan Brittenson dans comp.sys.hp48, la sortie dans la pile ne marche pas, je suis prenneur d'une version complètement opérationnelle)
export PATH=/usr/local/arm-hp/bin:$PATH
arm-elf-gcc -Wall -O3 -c rdvs50g.c
arm-elf-gcc -nostdlib rdvs50g.o -o rdvs50g.bin -lwin -lggl -lhpg -lhplib -lgcc
elf2hp rdvs50g.bin rdvs50g.hp