-
Notifications
You must be signed in to change notification settings - Fork 1
Turtlesim & Python: Controle em Malha Fechada
Após obter os resultados em malha aberta, decidiu-se aproveitar os sensores de posição da tartaruga para implementar um controle em malha fechada. Para receber os valores dos sensores, foram utilizados scripts do ros com essa finalidade
Afim de facilitar a obtenção de parâmetros dos sensores da tartaruga, decidimos implementar essa função em uma classe TurtleClosedLoop, cujos métodos implementam o controle em malha fechada.
class TurtleClosedLoop:
...
Serão explicados a seguir as principais funcionalidades para o controle em malha fechada, caso queira entender melhor o código e os métodos, basta olhar no repositório
Primeiramente em código deve-se importar o tipo de mensagem de posição, além das importações já feitas:
import rospy
from geometry_msgs.msg import Twist
from turtlesim.msg import Pose
import math
Neste trecho, realiza-se o import do pacote rospy, para gerenciar a interface ROS e Python, e a declaração do tipo de mensagem que será utilizado para leitura da posição é turtlesim.msg/Pose e para a publicação das velocidades é geometry_msg.msg/Twist. Também é importado a biblioteca matemática para os cálculos que serão feitos.
Para fazer a leitura dos sensores, utiliza-se a classe específica do ROS, para ler mensagens publicadas em um tópico. Usualmente, sensores realizam esse papel. Na tartaruga vamos ler a sua posição atual publicada no tópico pelo sensor /(nome_da_tartaruga)/Pose
# Elemento subscriber ROS
rospy.Subscriber("turtle1/pose", Pose, self.callback)
Para entender como funciona esse elemento, acesse a sua documentação
O callback é uma método recorrente, chamada para atualizar as informações do tópico. Vale lembrar que o nome "callback" é usualmente utilizado para esse tipo de método, no entanto você pode utilizar qualquer nome para ele. Segue o código utilizado para obter os parâmetros que o sensor /(nome_da_tartaruga)/Pose publica no tópico:
def callback(self, msg):
''' Funcao chamada toda a vez que atualizar-se o topico: turtle1/pose '''
self.turtle_x = msg.x
self.turtle_y = msg.y
self.turtle_theta = msg.theta
self.turtle_linear_velocity = msg.linear_velocity
self.turtle_angular_velocity = msg.angular_velocity