Ces données sont envoyées par le port série, via un kit radio, puis récupérées sur un pc (mon pc en phase de développement, puis un raspberry ensuite).
J'ai pour l'instant pu vérifier la bonne réception des trames avec QGroundControl.
Je souhaite maintenant recevoir les messages avec un programme python qui contiendra l'algorithme de pilotage et renverra des ordres en vitesse de moteur ou en position de barre.
Je me suis d'abord basé sur la documentation officiel
git clone git://github.com/mavlink/mavlink.git
cd mavlink/pymavlink
python setup.py install
J'ai ensuite essayé de lancer un exemple (mavtester.py). Je suis malheusement tombé sur une erreur concernant le sous-module mavtest qui n'existait pas.
J'ai donc cherché à recompiler à partir de
mavgen.py -o mavlinkv10.py mavlink/message_definitions/v1.0/common.xml
Cette fois j'obtiens l'erreur "No module named mavgen_python"
En fait l'erreur ne vient pas vraiment de là, mais de l'utilisation de mavgen.py au lieu de mavgenerate.py
Voici donc les bonnes commandes à exécuter :
cd mavlink
sudo python mavgenerate.py -o mavlinkv10.py message_definitions/v1.0/common.xml
Cela lance une GUI permettant de choisir les messages à générer à partir d'un fichier xml de définition des messages.
A la fin de l'opération, j'ai eu un message me signalant que tout s'était bien passé.
Cependant, dans la console j'avais un message d'erreur, mais qui semble sans importance :
^CException in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1489, in __call__
return self.func(*args)
File "mavgenerate.py", line 172, in generateHeaders
tkinter.messagebox.showinfo('Successfully Generated Headers', 'Headers generated successfully.')
File "/usr/lib/python2.7/lib-tk/tkMessageBox.py", line 83, in showinfo
return _show(title, message, INFO, OK, **options)
File "/usr/lib/python2.7/lib-tk/tkMessageBox.py", line 72, in _show
res = Message(**options).show()
File "/usr/lib/python2.7/lib-tk/tkCommonDialog.py", line 48, in show
s = w.tk.call(self.command, *w._options(self.options))
KeyboardInterrupt
Mais cela ne réglait pas plus le problème du manque de mavtest.
J'ai finalement modifié le script mavtester.py pour supprimer la dernière ligne qui était la seule à utiliser le module mavtest.
Le test se lance de la manière suivante
python mavtester.py --device /dev/ttyUSB0
Mais le programme stoppait sur :
Waiting for APM heartbeat
Cela ne fonctionnait pas, alors que des bits de vie étaient bien envoyés par l'arduino, ce que j'ai pu vérifier avec QgroundControl.
Etait-ce dû à un problème de version de la librairie (lors de l'installation avec setup.py, la version 0.9 et la version 1.0 sont copiées)?
J'ai cherché dans le code. mavutil.mavlink10() permet de vérifier si la version 1.0 est bien utilisée, et c'était le cas.
J'ai finalement trouvé l'erreur. Je n'avais pas précisé le baudrate dans la commande (il est par défaut à 115200).
Avec la commande suivante, j'arrive bien à revevoir le bit de vie.
python mavtester.py --device /dev/ttyUSB0 --baudrate 57600
Aucun commentaire:
Enregistrer un commentaire