Aller à : navigation, rechercher

Tête panoramique Clauss

Présentation du projet

Les têtes panoramiques motorisées Clauss Rodeon VR sont utilisées pour la réalisation automatisée de prise de vue panoramique. Une version modifiée de la tête Clauss Rodeon VR HD a notamment été utilisée pour l'image de Paris 26 gigapixels.

Tête motorisée Clauss pendant la prise de vue à Paris

La tête VR ou la version modifiée permettent d'obtenir des panoramiques cylindriques et sphériques à 180°x360°.

  • Le débattement vertical est de 360° par pas de 0,006° (Par défaut, dans le logiciel Clauss, le bridage est de -90/+90°, il est débridé sous Papywizard).<cite_reference_link>).
  • Le débattement horizontal est de 360° par pas de 0,015° (sans bridage de la rotation, il peut faire autant de tour que possible<cite_reference_link>).
  • La tête est alimentée par secteur (via une alimentation 12VCC, 2A) ou par batterie (NiMH, 7,2V/2600 mAh<cite_reference_link>).
  • Elle dépend d'un ordinateur pour fonctionner et communique soit par un port série RS232 ou par un adapteur Bluetooth série intégré<cite_reference_link>.
  • Un adaptateur USB/Série de type PL-2303 est fourni avec.
  • Enfin, une prise mini-DIN à 6 broches permet de connecter un déclencheur d'appareil photo au format Canon N3 ou Nikon (10 broches)<cite_reference_link>.

Jusqu'à présent, seul un petit logiciel aux fonctionnalités limitées et tournant exclusivement sous Windows ou WindowsMobile permettait de gérer la tête. Aucune compatibilité directe n'était possible avec d'autres systèmes d'exploitation ou PapyWizard.

Lors du record du monde, l'idée m'est naturellement venue de décoder les communications, afin de pouvoir porter cette tête sous PapyWizard. Ce qui est fait aujourd'hui !

Profitant, d'un peu de temps et du prêt de la tête par Kolor, j'ai décodé les communications.


Vidéo de la tête lors de la prise de vue de Madrid 41.1 Gigapixel (fonctionnement avec PapyWizard)

Vidéo montrant la tête en fonctionnement avec PapyWizard


Essai de prise de vue avec la tête et PapyWizard


Capture d'écran PapyWizard

Principe de fonctionnement

Les têtes Clauss sont issues d'un système modulaire, appelle Rodeon. Le coeur du système est le transceiver, qui reçoit les ordres du PC et commande les moteurs via un bus unique RS-485<cite_reference_link>.

Lorsque l'ordinateur communique avec la tête Clauss, il dialogue séparément avec le transceiver (commande qui commencent en hexa par 'c0' ), le moteur horizontal ('c1') et le moteur vertical ('c2').

Il est donc normal que pendant la phase d'initialisation, les mêmes commandes soient renvoyées trois fois, pour chaque élément de la chaine (transceiver, moteur H, moteur V).

Décoder le protocole

La tête communique avec l'ordinateur via un lien série RS232 en 19200 8N1. L'ordinateur envoie une requête, puis la tête lui réponds. Chaque seconde, l'ordinateur demande :

  • une fois l'état de la batterie
  • deux fois la position horizontale
  • deux fois la position verticale.

Pour plus de lisibilité, j'ai utilisé au maximum une représentation en ASCII. Mais attention, certaines commandes peuvent sembler identiques en ASCII, mais ce n'est pas le cas ! CR signifie Carriage return (Hexa: 0d).

Note de fma38 : la tête communique bien en ASCII (par opposition à binaire). Dans le cas où elle veut transmettre la valeur 100, elle envoie 3 octets qui sont les 3 caractères '1', '0', et '0' (soient 0x31, 0x30, 0x30 en hexa, ou 49, 48, 48 en décimal). En binaire, elle aurait envoyé 1 seul octet, de valeur 100 (qui correspond au caractère 'd', mais qui n'a pas de sens 'visuel'). Hexa, c'est juste une représentation humaine des octets qui transitent... Par contre, le protocole de la Rodeon mélange allègrement binaire et ASCII, puisque certaines valeurs transmises n'ont pas de représentation ASCII :o/

Protocole

Démarrage

L'ordre d'envoi des commandes suit l'ordre de cette page.

Initialisation/ Reset

La commande d'initialisation est composée par le numéro de l'élément, le caractère R (hexa: 52) et le caractère CR.

Par exemple, initialisation du transceiver : c0 52 0d.

Réponse du transceiver : a0 52 0d a0 62 30 0d.

Pour les moteur, réponse : a1 62 30 0d ou a2 62 30 0d (modifiée par le numéro de l'élément)

Attention, en mode Bluetooth, la tête réponds b0 au lieu de R !

Référence de l'élément

Elle est composée par le numéro de l'élément, le caractère w (hexa: 77) et le caractère CR.

Par exemple, référence du transceiver : c0 77 0d.

Réponse du transceiver : a0 77 0d a0 77 33 30 2e 35 30 30 2d 30 31 30 30 0d. En Ascii : _w._w30.500-0100, soit référence 30.500.0100.

Pour les moteurs, références = 30.500.1000, quelque soit la variante du moteur (avec ou sans frein, 24000 ou 72000 pas). Exemple de référence sur le site Clauss

Commande de remise à la position 0° du moteur

Elle est composée par le numéro de l'élément, le caractère Y (hexa: 59) et le caractère CR.

Par exemple : c1 59 0d.

Réponse du transceiver : a2 59 0d OU a2 59 0d a1 62 39 0d OU a2 59 0d a1 62 30 0d

Marque de l'élément

Elle est composée par le numéro de l'élément, le caractère m (hexa: 6d) et le caractère CR.

Par exemple, marque du transceiver : c0 6d 0d.

Réponse du transceiver : a0 6d 0d a0 6d 43 4c 41 55 53 53 0d . En Ascii : _m._mCLAUSS, soit la marque CLAUSS.

Pour les moteurs, réponses identiques.

Attention, en mode Bluetooth, la tête peut répondre a0 62 30 0d a0 6d 0d a0 6d 43 4c 41 55 53 53 0d. En Ascii : _b._m._mCLAUSS.

Version de l'élément

Elle est composée par le numéro de l'élément, le caractère v (hexa: 76) et le caractère CR.

Par exemple, version du transceiver : c0 76 0d.

Réponse du transceiver : a0 76 0d a0 76 30 32 2e 30 30 0d . En Ascii : _v._v02.00. , soit version 2.00.

Pour les moteurs, version 1.05.

Nombre de pas du moteur

Elle est composée par le numéro de l'élément, le caractère u (hexa: 75) et le caractère CR.

Par exemple, nombre de pas du moteur H : c1 75 0d.

Réponse du transceiver : a1 75 0d a1 75 32 34 30 30 30 0d . En Ascii : _u._u24000. , soit 24.000 pas.


Plusieurs modèles de moteurs sont disponibles<cite_reference_link> :

  • 24.000 pas (moteur horizontal, exploité à 360°)
  • 60.000 pas (moteur vertical, exploité à 90°, soit 30.000 pas).
  • 72.000 pas (disponible au catalogue)

Vitesse max du moteur

Elle est composée par le numéro de l'élément, le caractère f (hexa: 66) et le caractère CR.

Par exemple, vmax du moteur H : c1 66 0d.

Réponse du transceiver : a1 66 0d a1 66 30 33 30 30 30 0d . En Ascii : _f._f03000. , soit vmax = 3000 (133%). Vitesse à 100% = 2250.

Sous Papywizard, la vitesse max (ici 3000) est égale à 100%, contrairement au logiciel Clauss qui estime qu'elle est égale à 133%.

Commande inconnue du moteur

Elle est composée par le numéro de l'élément, le caractère a (hexa: 61) et le caractère CR.

Par exemple : c1 61 0d.

Réponse du transceiver : a1 61 0d a1 61 30 38 0d. En Ascii : a08.

Commandes d'initialisation inconnues

Elles sont composée du numéro du transceiver, du caractère L (hexa : 4c), d'un code à deux chiffres et du caractère CR.

Le code à deux chiffre est incrémentale, il prend successivement les valeurs suivantes : 00, 10, 20, 30, 40, 50, 60, 70, 80, 90.

Par exemple : c0 4c 30 30 0d. En Ascii : _L00.

Réponse : a0 4c 30 30 0d. En Ascii : _L00.

Commande de remise à zéro des compteurs de position

Elle est composée par le numéro de l'élément, le caractère N (hexa: 4e) et le caractère CR.

Cette commande, complémentaire à la commande 'Y', permet de remettre les compteurs de position 'p' à zéro, après déplacement du moteur pour remise à zéro.

Par exemple : c1 4e 0d.

Réponse du transceiver : a1 4e 0d. En Ascii : a1N.


Etat de la batterie

La commande _xCR (Hexa: c0 78 0d) est envoyée par le PC.

La tête réponds _x093CR (Hexa: a0 78 30 39 33 0d).

La valeur 093 est l'état de la batterie en pourcentage, de 0 à 100. Quand la tête est branchée sur secteur, la tête réponds 125.

Etat de la position horizontal

Elle est composée par le numéro de l'élément (ici c1), le caractère p (hexa: 70) et le caractère CR.

Par exemple, position du moteur horizontal : _p. En hexa : c1 70 0d.

La tête réponds _p+0002029CR (Hexa: a1 70 2d 30 30 30 31 37 32 30 0d).

La valeur peut être négative (_p-0001234) ou positive (_+0001234). Elle est codé de 0 (0°) à 24000 (360°).

Si le moteur est très proche ou arrivé à la coordonnée, il complétera sa réponse par _b (En hexa : a1 62 30 0d).

Exemple : _p._p+0000000._b . En hexa : a1 70 0d a2 70 2b 30 30 30 30 30 30 30 0d a1 62 30 0d.

Si la tête commence sa toute première rotation à gauche, la valeur est positive, sinon elle est négative. Comme la valeur est codée sur 7 digits, la tête peut enchainer 416,66 tours avant de planter (overflow). Dans la pratique, la position de la tête sera calculée par rapport à la dernière position connue et la nouvelle position.

Quand le niveau de batterie est trop faible, le moteur n'arrive plus à tourner. Cependant, l'état de la position continue d'augmenter, sans aucune corrélation avec l'état réel du moteur. Ce n'est pas une panne, juste que les batteries sont faibles !

Etat de la position vertical

Elle est composée par le numéro de l'élément (ici c2), le caractère p (hexa: 70) et le caractère CR.

Par exemple, position du moteur vertical : _p. En hexa : c2 70 0d.

La tête réponds _p+0002029CR (Hexa: a2 70 2d 30 30 30 31 37 32 30 0d).

La valeur peut être négative (_p-0001234) ou positive (_+0001234). Elle est codé de -15000 (90°, bras vers soit quand le module Bluetooth est à droite) à 0 (0°) jusqu'à 15000 (-90°, bras au fond, avec module à droite).

Si le moteur est très proche ou arrivé à la coordonnée, il complétera sa réponse par _b (En hexa : a2 62 30 0d).

Exemple : _p._p+0000000._b . En hexa : a2 70 0d a2 70 2b 30 30 30 30 30 30 30 0d a2 62 30 0d.

Quand le niveau de batterie est trop faible, le moteur n'arrive plus à tourner. Cependant, l'état de la position continue d'augmenter, sans aucune corrélation avec l'état réel du moteur. Ce n'est pas une panne, juste que les batteries sont faibles !

Prise d'une photo

La tête permet de commuter deux signaux indépendants simultanément. Usuellement, le premier signal (pin 3 et 4 de la miniDin 6 broches) est l'AutoFocus. Le second signal (pin 5 et 6) est le déclenchement (Shutter).

  • La commande _L01CR (Hexa: c0 4c 30 31 0d) enclenche l'autofocus.*
  • La tête réponds _L01CR (Hexa: a0 4c 30 31 0d).
  • La commande _L11CR (Hexa: c0 4c 31 31 0d) déclenche l'appareil photo (shutter + autofocus).
  • La tête réponds _L11CR (Hexa: a0 4c 31 31 0d).
  • La commande _L00CR (Hexa: c0 4c 30 30 0d) arrête tout déclenchement (relâchement des contacts shutter + autofocus).
  • La tête réponds _L00CR (Hexa: a0 4c 30 30 0d).

En pratique, lors d'une prise de vue, les commandes suivantes sont envoyées : L01, L11, L00, L10, L00, L10. Je ne sais pas à quoi correspond la commande L10, qui n'influe pas sur le shutter (ni sur l'autofocus).

Note de fma38 : L10 doit juste activer le contact 'shutter', sans l'AF. Suivant le boîtier, ça marche ou non, certains voulant absolument que le contact AF soit lui aussi fermé pour que l'obturateur se déclenche (ce qui est toujours le cas lorsqu'on appuie sur le bouton de l'appareil).

Note de martinlbb : Malheureusement non, ce n'est pas l'état de chaque signal. Ce qui est confirmé par les commandes L20 à L90 qui sont hors logique binaire.

Déplacement de la tête (mode automatique)

La tête envoie d'abord la destination, puis communique la vitesse du moteur et enfin, ordonne la rotation. La rotation cesse d'elle même quand la tête est arrivée à la position demandée.

Définir la destination

Elle est composée par le numéro de l'élément, le caractère S (hexa: 53), le signe + ou -, un code à 7 chiffres et le caractère CR.

Le signe et le code à 7 chiffres sont les coordonnées à atteindre : -15000, +24000 par exemple.

Par exemple, destination +90° sur l'axe vertical : _S+0015000. En hexa : c2 53 2b 30 30 31 35 30 30 30 0d .

Réponse du moteur : _S+0015000. En hexa : a2 53 2b 30 30 31 35 30 30 30 0d

Définir la vitesse moteur

Elle est composée par le numéro de l'élément, le caractère F (hexa: 46), un code à 5 chiffres et le caractère CR.

Le code à 5 chiffres est la vitesse du moteur. La vitesse max est trouvée lors de l'initialisation. Exemple : 100% = 2250.

Par exemple, vitesse à 10% sur l'axe horizontal : _F02250. En hexa : c1 46 30 30 32 32 35 0d .

Réponse du moteur : _F00225. En hexa : a1 46 30 30 32 32 35 0d .

Aller à la position (GO)

Elle est composée par le numéro de l'élément, le caractère G (hexa: 47), le chiffre 0 (hexa : 30) et le caractère CR.

Par exemple, aller à la position demandée sur l'axe horizontal : _G0. En hexa : c1 47 30 0d .

Réponse du moteur : _G0. En hexa : a1 47 30 0d .

Attention, si le moteur est déjà la position demandée, il répondra _G0._b0. (hexa : a1 47 30 0d a1 62 30 0d ).

Déplacement de la tête (manuel)

Contrairement au mode automatique, la tête ne sait pas précisément à quelle position elle doit aller. Elle reçoit donc une commande lui ordonnant d'aller à la position la plus éloignée.

Quand l'utilisateur souhaite faire cesser le mouvement, la tête reçoit une commande d'arrêt du moteur.

Plus précisément, la destination la plus éloignée est définie pour chaque axe (en fonction du sens de rotation, c'est + ou -24000 sur l'axe H et + ou -15000 sur l'axe V).

Ensuite, la vitesse des moteurs est précisée.

Si c'est la toute première commande manuelle sur l'axe, trois commandes inconnues sont envoyées (I, J et A).

Enfin, une commande de mise en route (GO) est envoyée, avec un paramètre différent selon l'axe. C'est une variante du mode automatique.

Définir la destination

Elle est composée par le numéro de l'élément, le caractère S (hexa: 53), le signe + ou -, un code à 7 chiffres et le caractère CR.

Le signe et le code à 7 chiffres sont les coordonnées à atteindre : -15000, +24000 par exemple.

Par exemple, destination +90° sur l'axe vertical : _S+0015000. En hexa : c2 53 2b 30 30 31 35 30 30 30 0d .

Réponse du moteur : _S+0015000. En hexa : a2 53 2b 30 30 31 35 30 30 30 0d

Définir la vitesse moteur

Elle est composée par le numéro de l'élément, le caractère F (hexa: 46), un code à 5 chiffres et le caractère CR.

Le code à 5 chiffres est la vitesse du moteur. La vitesse max est trouvée lors de l'initialisation. Exemple : 100% = 2250.

Par exemple, vitesse à 10% sur l'axe horizontal : _F02250. En hexa : c1 46 30 30 32 32 35 0d .

Réponse du moteur : _F00225. En hexa : a1 46 30 30 32 32 35 0d .


Commandes inconnues

Cette série de trois commandes est uniquement utilisée lors du premier mouvement manuel sur chaque axe. Elle n'est plus utilisée après.

'Commande I'

Elle est composée par le numéro de l'élément, le caractère I (hexa: 49), un paramètre sous forme de chiffre et le caractère CR.

Pour l'axe horizontal, le paramètre est '2', pour l'axe vertical, c'est '9'.


Par exemple, sur l'axe horizontal : _I2. En hexa : c1 49 32 0d .

Réponse du moteur : _G0. En hexa : a1 49 32 0d .


Par exemple, sur l'axe vertical : _I9. En hexa : c2 49 39 0d .

Réponse du moteur : _G0. En hexa : a2 49 39 0d .


'Commande J'

Elle est composée par le numéro de l'élément, le caractère J (hexa: 4a), le chiffre 9 et le caractère CR.

Par exemple : _J9. En hexa : c1 4a 39 0d .

Réponse du moteur : _J9. En hexa : a1 4a 39 0d .

'Commande A'

Elle est composée par le numéro de l'élément, le caractère A (hexa: 41), un code à 5 chiffres et le caractère CR.

Le code à 5 chiffres est toujours 00010.

Par exemple : _A00010. En hexa : c2 41 30 30 30 31 30 0d .

Réponse du moteur :_A00010. En hexa : a2 41 30 30 30 31 30 0d .

Aller à la position (GO)

Elle est composée par le numéro de l'élément, le caractère G (hexa: 47), un paramètre sous forme de chiffre et le caractère CR.

Le chiffre est '1' pour l'axe horizontal et '0' pour l'axe vertical.

Par exemple, lancer le moteur sur l'axe horizontal : _G1. En hexa : c1 47 31 0d .

Réponse du moteur : _G0. En hexa : a1 47 31 0d .

Par exemple, lancer le moteur sur l'axe vertical : _G0. En hexa : c1 47 30 0d .

Réponse du moteur : _G0. En hexa : a1 47 30 0d .


Arrêt du moteur

La commande est composée par le numéro de l'élément, le caractère O (hexa: 4f), le chiffre '3' et le caractère CR.

Par exemple, arrêt du moteur horizontal : _O3CR. En hexa : c1 4f 33 0d .

Réponse du moteur : _O3CR. En hexa : a1 4f 33 0d .


Extinction de la tête (arrêt des communications)

Avant l'arrêt de la tête, les deux axes sont remis en position de transport. Une fois le déplacement fini, il suffit d'interrompre le lien série.

Pour toutes les têtes, la position horizontal est 0°. Le déplacement n'est pas obligatoire car la position 0° de la tête peut varier à chaque allumage.

Pour la position vertical, sur les têtes XP, CL et ST, il est préférable de placer le bras vertical à +90° pour faciliter le transport de la tête.

Sur la tête HD, il est préférable de laisser le bras vertical à 0° pour qu'il prenne moins de place.

Une option est disponible dans PapyWizard pour choisir la position du bras vertical lors de l'arrêt de la tête.


Retour d'expérience

Modèles testés

Rodeon VR Head : 24000 pas, moteur sans freins.

Rodeon VR HD : 60000 pas, moteur freiné.

Accus intégrés

Les batteries intégrées ne sont pas pratiques. Elles nécessitent un chargeur spécifique. En démontant une batterie, vous trouverez un pack de 6 accus AA (1,3V/2600mAh) connecté par une broche 9v. Vous pouvez facilement vous procurez un | coupleur de 6 piles AA qui sorte en prise 9V. Une fois fixé par scratch sur le cadre, vous pouvez aisément changer les accus quand vous en avez besoin.

01rasto a eu l'idée de remplacer les batteries actuelles par des batteries d’appareil photo/vidéo. Il profite ainsi d'un chargeur unique pour sa tête et ses appareils. Il a simplement remplacé la platine existante par une platine compatible avec ses accus.


L'intérieur d'une batterie, composée de 6 accus AA
Un coupleur de 6 piles AA avec connecteur 9V

Autonomie

Environ 1200 photos par batterie chargée. Avec des équipements lourds (2Kg et plus), la tête n'arrive plus à tourner quand les batteries atteignent les 75%. L'état de la batterie est très optimiste, dans la pratique, à partir de 80% de batterie, c'est bientôt le moment de changer d'accu !

Pour un pano de 714 photos en mode filaire (avec un 5D Mark II et un EF 100-400, pour un poids de 2,3 Kg) : 4% de batterie consommée en 40 minutes.

Pour un pano de 3000 photos en Bluetooth (avec 4Kg de charge, équilibrée à 2Kg par coté<cite_reference_link>) : 28% (soit un tout petit peu plus qu'une batterie complète...) (vitesse moteur : normal, soit 28% sous PapyWizard et environ 50% dans le logiciel Rodeon, qui compte jusqu'à 130%)

Connexion

Le simple fait de laisser brancher le câble série sur la tête désactive le Bluetooth. Pour l'utiliser, débranchez le câble ! (cf 'Présentation du projet', et la note correspondante).

Bluetooth

La clef PIN Bluetooth est 'CLAUSS'.

Pour vous connecter à la tête :

Sous Linux

Pour éviter les erreurs de connexion, vous devez créez un fichier pincodes dans le répertoire /var/lib/bluetooth/DEVICE_MAC/ . Celui-ci contiendra ceci : 'CLAUSS_MAC CLAUSS' (par exemple: 00:01:95:07:45:f6 CLAUSS)

DEVICE_MAC est l'adresse mac (de type 00:00:00:00:00) de votre adaptateur Bluetooth (visible avec hcitool dev). CLAUSS_MAC est l'adresse mac (de type 00:00:00:00:00) de votre tête Clauss (visible avec hcitool scan, dans la ligne qui contient 'RODEONmodular').

Après, vous pouvez directement vous connecter depuis Papywizard.

Sous Windows

Utilisez l'explorateur de périphériques Bluetooth, puis connectez-vous à 'RODEONModular'. Le code PIN est 'CLAUSS' (sans les guillemets). Si l'ordinateur vous propose de s'en souvenir, autorisez le. Une fois effectué, vous pouvez directement vous connecter depuis PapyWizard.

Sous Mac

Dans la barre de menu du Finder, cliquez sur le logo Bluetooth, puis 'Configurer un appareil Bluetooth'. Après recherche, choisissez la tête : 'RODEONModular'. Ensuite, dans l'écran qui affiche le code PIN (par défaut 0000), cliquez sur 'Options de code' et 'Utiliser un code spécifique'. Saisissez 'CLAUSS' comme code, puis cliquez sur 'Continuer' et 'Quitter'.

Notes et références

Attention, les notes références ne s'affichent pas si vous n'êtes pas identifié !

<cite_references_prefix><cite_references_link_one> <cite_references_link_one> <cite_references_link_one> <cite_references_link_one> <cite_references_link_one> <cite_references_link_one> <cite_references_link_one> <cite_references_link_one><cite_references_suffix>