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
Andar
e o nome do nó paraandar_node
. - Mude também a chamada da classe na função
main()
paraAndar()
. - Mude o nome do estado de
acao
paraandar
. - No construtor
__init__()
, adicione e a variávelself.velocidade
com o valor de0.2 m/s
. - Na função
reset()
,- Modifique a definição da função
reset()
para receber um parâmetrodistancia
que define a distância a ser percorrida. - Calcule o tempo necessário,
self.threshold
para percorrer a distância com uma velocidade constante. - mude o estado do robô para
andar
. - Inicie a variável
self.tempo_inicial
como 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
twist
da seguinte formaself.twist.linear.x = self.velocidade
. - Calcule o tempo decorrido
self.dt
entre o tempo atual e o tempo inicial, e imprima esse valor. - Se o tempo decorrido for maior ou igual a
self.threshold
segundos, 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.py
e 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.