A transparˆencia da execu¸c˜ao dos algoritmos, o sistema de dire¸c˜ao e a altera¸c˜ao do estado do mundo foram obtidos com o uso de plugins que permitem a um utilizador aceder `a API do
Sim Car Base Posicão pan&tilt pretendida Velocidade e direcção pretendida Posição estimada por dead Reckoning
Ângulo das rodas dianteiras e posição pan&tilt atual
Figura 5.5: Informa¸c˜ao recebida e fornecida pelo plugin Sim Car Base
Gazebo. Para tal ´e necess´ario que os plugins associados ao modelo virtual abstraiam a parte f´ısica do robˆo, ou seja o hardware.
Foram desenvolvidos 3 plugins, um para o ve´ıculo, um para o painel sinal´etico e um para o mundo.
5.3.1 Plugin do ve´ıculo
O sistema de dire¸c˜ao Ackermann, o ajuste da velocidade, o movimento de pan&tilt da cˆamara, a disponibiliza¸c˜ao da informa¸c˜ao relativa `a posi¸c˜ao atual e a informa¸c˜ao relativa `a posi¸c˜ao das juntas s˜ao controlados por um plugin associado ao modelo do robˆo.
O plugin desenvolvido, para al´em de fornecer as funcionalidades j´a mencionadas acima, faz com que o robˆo virtual imite a frequˆencia de disponibiliza¸c˜ao de informa¸c˜ao do robˆo real, publicando mensagens em t´opicos ROS a um ritmo espec´ıfico. Um esquema da informa¸c˜ao consumida e produzida quer pelo robˆo real, quer pelo robˆo virtual pode ser encontrada na Figura 5.5.
Para o modelo do robˆo poder simular a dire¸c˜ao Ackermann de forma adequada, o plugin subscreve um t´opico ROS que lhe fornece a informa¸c˜ao sobre qual o ˆangulo que deveria ser adotado pela roda imagin´aria do meio. Na Figura 2.2 do cap´ıtulo 2, este ˆangulo corresponde a θc. A partir deste ˆangulo e da geometria do sistema Ackermann do robˆo, ´e poss´ıvel obter o
ˆ
angulo a adotar pelas duas rodas, a interior e a exterior, denotadas na Figura 2.2 respetiva- mente por θi e θo. As propriedades do robˆo que ´e necess´ario conhecer s˜ao a distˆancia entre
eixos e a distˆancia entre as duas rodas dianteiras. ´E assim poss´ıvel determinar os ˆangulos das rodas dianteiras de acordo com as seguintes f´ormulas:
cot θc= cot θo− D/2L
cot θo− cot θi= D/L
onde D ´e a distˆancia entre as rodas dianteiras e L a distˆancia entre eixos. Os valores destas duas caracter´ısticas s˜ao definidas na descri¸c˜ao do modelo.
O Gazebo at´e `a vers˜ao 7.1.0 ´e incapaz de efetuar qualquer tipo de opera¸c˜ao diretamente no ˆ
angulo do segundo eixo nas juntas que podem rodar sobre dois eixos em simultˆaneo1. Como as
juntas que interligam as rodas dianteiras ao link base s˜ao modeladas com este tipo de juntas, de modo a contornar este problema a solu¸c˜ao passou por aplicar uma for¸ca `as rodas utilizando um controlador PD. O controlador proporcional tenta corrigir o erro entre o ˆangulo desejado para as rodas e o ˆangulo atual destas, fazendo com que este erro se torne o mais pequeno poss´ıvel. Embora este controlador consiga efetivamente reduzir o erro, acaba por ir para al´em do objetivo onde deveria ter parado. Isto leva a que o erro nunca convirja, levando a uma situa¸c˜ao de estabilidade marginal. De forma a evitar esta situa¸c˜ao, ´e adicionado a componente derivativa ao controlador obtendo-se um controlador PD. Este tipo de controlador verifica que o erro est´a a ser reduzido e como resultado reduz a for¸ca que ´e aplicada `as rodas, permitindo que o ˆangulo das rodas convirja para um valor est´avel. Verificou-se que com o controlador PD foi poss´ıvel obter o ˆangulo pretendido para as rodas, n˜ao sendo portanto necess´ario adicionar um controlador integral.
De modo a saber qual ´e a velocidade que o robˆo virtual deve adotar, o plugin subscreve o mesmo t´opico ROS que o m´odulo de comunica¸c˜ao do robˆo real subscreve. Estando a velocidade da mensagem em metros por segundo. o plugin, conhecendo o diˆametro da roda traseira, faz uma convers˜ao para radianos por segundo antes de a aplicar `a velocidade `a roda traseira
Ap´os a rece¸c˜ao da posi¸c˜ao pan&tilt desejada para a cˆamara Kinect por parte do plugin, as juntas s˜ao colocadas nessa posi¸c˜ao. Ap´os o robˆo simulado colocar as juntas nas posi¸c˜oes pretendidas, a nova posi¸c˜ao do pan&tilt ´e publicado num t´opico ROS.
O software de controlo de alto n´ıvel do ve´ıculo, em particular o m´odulo de localiza¸c˜ao, usa como entrada a posi¸c˜ao e orienta¸c˜ao estimadas usando dados odom´etricos (dead reckoning). O plugin do ve´ıculo simula tamb´em este estimador. Mant´em internamente a estimativa anterior da postura e, usando dados odom´etricos simulados, estima e publica num t´opico a nova estimativa. Os dados odom´etricos gerados podem ou n˜ao conter ru´ıdo.
No sistema simulado, em primeiro lugar criou-se um estimador da posi¸c˜ao sem ru´ıdo que fornece sempre a postura real do robˆo no mundo. A postura estimada ´e obtida atrav´es da API do Gazebo, que permite ao utilizador aceder `a postura de qualquer modelo no mundo.
Como os dados fornecidos pela odometria do robˆo real s˜ao imprecisos devido `a sua natureza ruidosa, de modo a simul´a-la ´e necess´ario a existˆencia de ru´ıdo nos dados odom´etricos. No sistema real, os dados odom´etricos gerados pelo ve´ıculo s˜ao a distˆancia angular percorrida pela roda traseira e a posi¸c˜ao angular do servo que controla a dire¸c˜ao. Na simula¸c˜ao da odometria ruidosa s˜ao utilizados como dados odom´etricos a distˆancia angular percorrida pela roda traseira e a posi¸c˜ao angular estimada do robˆo. A cada n ciclos de atualiza¸c˜ao do Gazebo guarda-se os valores correspondentes aos dados odom´etricos, de modo a poder-se calcular a diferen¸ca destes entre ciclos. A partir da diferen¸ca da distˆancia angular percorrida pela roda traseira estima-se qual a distˆancia percorrida pelo ve´ıculo. Devido ao m´etodo utilizado para obter o valor de rota¸c˜ao da roda num determinado instante devolver um valor ruidoso, n˜ao ´e necess´aria a introdu¸c˜ao de ru´ıdo no valor calculado. A posi¸c˜ao angular estimada do robˆo ´e obtida atrav´es do mesmo m´etodo usado para se obter a odometria n˜ao ruidosa. Ap´os o c´alculo da diferen¸ca desta posi¸c˜ao entre ciclos, obt´em-se o deslocamento angular real do robˆo. Como se pretende que este valor seja ruidoso, ´e usada uma distribui¸c˜ao normal com m´edia
igual a esse valor com um desvio padr˜ao fixo afinado `a m˜ao, de onde se retira uma amostra que ser´a posteriormente usada pelo mecanismo de dead reckoning juntamente com a distˆancia percorrida pelo ve´ıculo. Esta informa¸c˜ao, ´e publicada num t´opico ROS ap´os ser calculada.
5.3.2 Plugin do painel sinal´etico
Este plugin ´e respons´avel por alterar a textura presente no painel sinal´etico de acordo com o sinal que nele se pretende apresentar. O desenvolvimento deste plugin envolveu o uso do sistema de t´opicos e mensagens do pr´oprio Gazebo, semelhante `a da plataforma ROS. O plugin desenvolvido para receber as mensagens foi associado `a componente visual do link que representa o monitor. Ap´os receber a mensagem, no momento anterior ao Gazebo efetuar o processo de rendering, a textura ´e mudada para a que foi indicada pelo utilizador na mensagem. Sabemos que n˜ao existe risco de perdas de mensagens pois a comunica¸c˜ao ´e feita sobre o modelo de comunica¸c˜ao TCP/IP.
5.3.3 Plugin do ambiente
Como j´a referido no cap´ıtulo 2 na sec¸c˜ao 2.3, na prova de condu¸c˜ao aut´onoma do festival nacional de rob´otica existe a prova D3 que implica a coloca¸c˜ao de um t´unel e v´arios obst´aculos em diferentes faixas de rodagem. Existe tamb´em a prova V1 onde s˜ao colocados em pista 6 sinais verticais escolhidos dentro de um conjunto de 12. Quer os obst´aculos, quer os sinais verticais s´o s˜ao colocados ap´os o robˆo iniciar a marcha, de modo a que n˜ao saiba a posi¸c˜oes destes objetos.
Para simular esta a¸c˜ao foi desenvolvido um plugin que tem como prop´osito a coloca¸c˜ao de qualquer objeto na pista em qualquer posi¸c˜ao escolhida pelo utilizador. Tal como no processo de mudan¸ca de sinais de trˆansito, tamb´em o desenvolvimento deste plugin envolveu o uso do mecanismo de comunica¸c˜ao do Gazebo. Ligando o plugin que instˆancia um subscritor ao mundo, ´e poss´ıvel, sempre que uma mensagem ´e recebida, colocar no mundo qualquer objeto com centro numa postura especifica, publicando uma mensagem com esta postura num t´opico pr´e-determinado pelo Gazebo para despoletar o efeito pretendido.
Como nesta prova de condu¸c˜ao aut´onoma o robˆo inicia sempre a prova sempre no mesmo lugar, ´e ´util a existˆencia de um mecanismo que fa¸ca com que os modelos voltem `a sua posi¸c˜ao inicial. Com este objetivo em mente, pode-se aproveitar o plugin referido acima pois este j´a se encontra ligado ao mundo, e adicionar-lhe outro subscritor, que executa uma rotina ap´os receber uma mensagem. Esta rotina tem como finalidade colocar o mundo na sua configura¸c˜ao inicial, ou seja, colocar os modelos na sua posi¸c˜ao inicial. Caso tivessem sido colocados novos objetos no mundo ap´os a sua cria¸c˜ao estes seriam removidos. Tal como o plugin de prolifera¸c˜ao de objetos, tamb´em este plugin age como um servidor, pois ap´os receber uma mensagem, realiza a a¸c˜ao para a qual foi concebido, publicando uma mensagem espec´ıfica num t´opico predeterminado caso pretenda apagar os objetos, ou colocando o modelo na sua posi¸c˜ao inicial.
Figura 5.6: Compara¸c˜ao entre a posi¸c˜ao angular desejada e a posi¸c˜ao real da roda direita ao longo do tempo