In [1]:
%load_ext autoreload
%autoreload 2
import numpy as np
ifconfig
nmap -T4 -sP 192.168.2.0/24
686 pip install pyserial
687 vim .ssh/id_rsa.pub
688 vim .ssh/id_rsa
689 chmod 0600 .ssh/id_rsa
690 git clone git@git.framasoft.org:laurentperrinet/elasticte.git
691 cd elasticte/
692 ls
693 cat scenario_line_contraint.py
694 python scenario_line_contraint.py serial
695 pip install -e .
696 pip install --user -e .
697 python scenario_line_contraint.py serial
⇒ ssh pi@192.168.2.3
Linux pielastic 3.18.7-v7+ #755 SMP PREEMPT Thu Feb 12 17:20:48 GMT 2015 armv7l
pi@pielastic ~ $ cd elasticte/
pi@pielastic ~/elasticte $ git pull # to update the code
Already up-to-date.
pi@pielastic ~/elasticte $ python scenario_line_contraint.py serial
In [2]:
nb_pas = 12
position_present = 6
position_desired = 4
d_position = (position_desired - position_present + nb_pas//2 ) % nb_pas - nb_pas//2
print (d_position)
position_present = (position_present + d_position ) % nb_pas
print (position_present)
on vérifie que ça marche pour toute une série de positions désirées et qu'on évite le demi tour:
In [3]:
nb_pas = 12
position_present = 2
position_desired = np.arange(nb_pas)
d_position = (position_desired - position_present + nb_pas//2 ) % nb_pas - nb_pas//2
print (d_position)
position_present = (position_present + d_position ) % nb_pas
print (position_present)
on vérifie aussi que ça marche pour toute une série de positions initiales et qu'on évite le demi tour:
In [4]:
nb_pas = 12
position_present = np.arange(nb_pas)
position_desired = 8
d_position = (position_desired - position_present + nb_pas//2 ) % nb_pas - nb_pas//2
print (d_position)
position_present = (position_present + d_position ) % nb_pas
print (position_present)
In [ ]:
In [5]:
n_pas = 200. * 32. * 60 / 14
print(n_pas)
Donc, on a un nombre même pas entier mais c'est pas grave. C'est le nombre de pas à faire pour le moteur pour faire faire un tour à la lame. Dans un premier temps, on va considérer ce cercle comme des entiers entre 0 et n_pas. ça devrait pouvoir être envoyé sans probleme a chaque arduino comme un int16 (à vérifier - si on a de la marge, on peut faire un truc plus précis):
In [6]:
2**16
Out[6]:
L'algo sur le arduino doit donc avoir cette partie pour convertir une donnée absolue reçue en donnée relative à envoyer aux moteurs:
In [7]:
nb_pas = 27428
position_present = 27424
position_desired = 4 # recu avec la lecture sur le port série
# quand on reçoit une valeur absolue on calcule
d_position = (position_desired - position_present + nb_pas//2 ) % nb_pas - nb_pas//2
# on envoie d_position aux moteurs
# on met à jour la position du moteur
position_present = (position_present + d_position ) % nb_pas
print(d_position, position_present)
In [8]:
!git s
#!git add 2015-10-27\ élasticité\ r*
In [11]:
!git commit -am' on connecte le π + coordonnées absolues'
In [12]:
! git push