Ação de Andar
Neste handout vamos criar nossa primeira ação: A ação de andar uma distância d.
Como estudamos em Explorando Tópicos e Mensagens, a velocidade linear do robo pode ser controlada publicando uma mensagem do tipo Twist em cmd_vel. Porém, muitas vezes queremos percorrer uma distância conhecida, mas como fazer isso apenas com a velocidade?
Em robotica uma estratégia comum é o método de Dead Reckoning que consiste em deslocar-se com velocidade constante por um tempo fixo, sem receber feedback de quanto, realmente, se deslocou.
Dentro do pacote robcomp_util/robcomp_util, baseando-se no codigo Nó Base de Ação, crie um arquivo denominado andar.py e uma classe chamada Andar e siga os seguintes passos:
- Mude o nome da classe para
Andare o nome do nó paraandar_node. - Mude também a chamada da classe na função
main()paraAndar(). - Mude o nome do estado de
acaoparaandar. - No construtor
__init__(), adicione e a variávelself.velocidadecom o valor de0.2 m/s. - Na função
reset(),- Modifique a definição da função
reset()para receber um parâmetrodistanciaque define a distância a ser percorrida. - Calcule o tempo necessário,
self.thresholdpara percorrer a distância com uma velocidade constante. - mude o estado do robô para
andar. - Inicie a variável
self.tempo_inicialcomo o seguinte:self.tempo_inicial = self.get_clock().now().to_msg() self.tempo_inicial = float(self.tempo_inicial.sec)
- Modifique a definição da função
- Na função
andar(antiga funçãoacao),- Adicione a velocidade linear do robô no pacote da mensagem
twistda seguinte formaself.twist.linear.x = self.velocidade. - Calcule o tempo decorrido
self.dtentre o tempo atual e o tempo inicial, e imprima esse valor. - Se o tempo decorrido for maior ou igual a
self.thresholdsegundos, pare o robô, zere a velocidade na mensagemself.twist.linear.x = 0.0, e mude o estado do robô parastop.
- Adicione a velocidade linear do robô no pacote da mensagem
A ideia do método Dead Reckoning é que você se desloca em velocidade constante por um tempo fixo, dessa forma, voce se deslocou uma distancia d = v * t, onde v é a velocidade e t é o tempo. Com isso em mente,
- Adicione o nó no arquivo
setup.pye então compile o pacote. - Teste esta ação, executando o nó no simuldor e verificando se o robô se move a distância correta.