-
Notifications
You must be signed in to change notification settings - Fork 2
[FR] PID
Le principe de la mise en place de PID dans notre projet permettra au robot d'atteindre sa cible en suivant une ligne noire. Pour cela, il récupéra les informations du capteur couleur afin de donner des consignes de déplacements pour que le robot reste sur la ligne.
Le seul de but de la node PID et de faire les calculs de corrections de trajectoire, pour cela, il communique avec plusieurs comme on peut le voir ci-dessous :
Comme on peut le voir, la node calcule sans arrêt, mais c'est le contrôleur qui décide si les commandes qu'elle envoie seront utilisées.
Ce PID comporte plusieurs paramètres qui sont configurés à la création de la node:
class PID_controller:
def __init__(self,kp,ki,kd,isat):
self.kp = kp
self.ki = ki
self.kd = kd
self.isat = isat
self.old_error = 0
self.sum_integral = 0
- kp pour la composante proportionnelle
- ki pour la composante intégrale
- kd pour la composante dérivée
- isat la valeur max de l'erreur
def __init__(self):
super().__init__('turtlebot_pid')
self.publisher_ = self.create_publisher(Twist, 'PID_cmd_vel', 10)
self.subscription = self.create_subscription(rgbtype,'RGB_Value',self.get_RGBvalue,10)
self.subscription
timer_period = 0.5 # seconds
self.timer = self.create_timer(timer_period, self.pid_send)
self.i = 0
self.valeurgb= rgbtype()#specific topicof the RGB sensor
self.pidangle=PID_controller(0.9,2.0,0,60)
Permets la souscription au topic du capteur('sensor'), et la publication des ordres de déplacement vers le contrôleur avec un topic ('PID_cmd_vel'). Initialisation du PID avec les paramètres donnés.
def get_RGBvalue(self, msgsub):
self.valeurgb=msgsub
def pid_send(self):
error=((self.valeurgb.r+self.valeurgb.g+self.valeurgb.b)/(3*2.55))-40
white=self.valeurgb.c
angle=self.pidangle.compute(0.1,error)
msg = Twist() #RGB sensor
msg.linear.x=2#self.order.straight;
msg.angular.z=angle
self.publisher_.publish(msg)
self.i += 1
Récupération de la valeur du capteur toutes les demi secondes avec get_RGBvalue().
Calcule et envoie des paramètres de déplacements toutes les demi secondes avec pid_send().
- [FR]
- [EN]