Desenvolvimento de um Simulador para um Veículo Autônomo

Transcrição

Desenvolvimento de um Simulador para um Veículo Autônomo
Universidade Federal de Minas Gerais
Curso de Graduação em Engenharia de Controle e Automação
Projeto Final de Curso
Desenvolvimento de um Simulador para um Veículo
Autônomo
Guilherme Lage Becker
Orientador: Luciano Cunha de Araújo Pimenta
Supervisor: Guilherme Augusto Silva Pereira
Belo Horizonte
Novembro de 2010
Monografia
Desenvolvimento de um Simulador para um Veículo Autônomo
Monografia submetida à banca examinadora para avaliação curricular
da disciplina PFCII, para obtenção do grau de Engenheiro de Controle
e Automação.
Belo Horizonte, Novembro de 2010
i
Resumo
Palavras-Chave: Simulação, Veículos Autônomos, Gazebo.
O desafio de desenvolver um veículo autônomo envolve uma infinidade de etapas,
sendo que em cada uma delas um módulo diferente é desenvolvido, envolvendo a
realização de diversos testes. O Grupo de Pesquisa e Desenvolvimento de Veículos
Autonômos da Universidade Federal de Minas Gerais tem trabalhado no desenvolvimento de um veículo deste tipo e a construção de um simulador computacional
dentro de um ambiente realístico tornaria a realização de testes muito mais segura
e barata.
Este trabalho descreve todo o projeto e implementação de um modelo para este
veículo em questão dentro de um ambiente de simulação. A construção de um modelo
realístico deve levar em consideração diversos aspectos como a modelagem dinâmica
e cinemática do veículo, a interação deste com um ambiente real e a possibilidade de
interação com o usuário. O ambiente de simulação 3D Gazebo que foi usado possui
código aberto e possibilita a simulação de vários robôs em um ambiente externo,
com suporte a desenvolvimento de sensores e objetos e interação plausível entre os
diversos elementos. Utilizando todas estas funcionalidades e os diversos dados já
coletados sobre este veículo, é implementado um algoritmo que represente o modelo
cinemático do carro juntamente com seus sensores. Feito isto, é criado um ambiente
realístico no Gazebo e desenvolvida uma interface para que o usuário possa comandar
o veículo. Obtendo um resultado satisfatório, testes passam a ser realizados com
mais segurança e eficiência.
Ao longo desta monografia, será detalhada a maneira de se desenvolver robôs personalizados, neste caso o veículo, para o ambiente Gazebo e como integrar a estes
robôs novos módulos à medida que estes são desenvolvidos. Todo o trabalho deve ser
desenvolvido com cuidado para que a simulação fique o mais próximo da realidade.
Além disso, serão explicadas as etapas de desenvolvimento de um driver para o
veículo e como fazer o uso de uma ferramenta na área de robótica para comandá-lo.
Abstract
Keywords: Simulation, Autonomous Vehicles, Gazebo.
The challenge of developing an autonomous vehicle involves a variety of steps, and
in each one a different module is developed, involving the completion of several tests.
The Group of Research and Development of Autonomous Vehicles from the Federal
University of Minas Gerais has been developing such a vehicle and the construction
of a computational simulator in a realistic environment would make testing much
safer and cheaper.
This work describes the entire design and implementation of a model for this vehicle
in a simulation environment. The construction of a realistic simulator must take
into consideration various aspects such as dynamic and kinematic modelling of the
vehicle, the interaction with a real environment and the possibility of interaction
with the user. The 3D simulation environment Gazebo which was used is open
source and allows the simulation of multiple robots in an external environment,
supports development of sensors and objects and plausible interaction among the
various elements. Using all these features and the various data already collected on
this vehicle, an algorithm that represents the entire kinematic model of the car along
with their sensors is implemented. After that, a realistic environment in Gazebo is
created and an interface is developed so that the user can operate the vehicle. Thus,
tests can be performed safely and efficiently.
Throughout this work, the development of customized robots, in this case the vehicle,
to the environment Gazebo will be detailed and how to integrate the new modules
to this robot as they are developed. All the work should be carefully developed to
avoid possible errors that can make the simulation unfeasible. The steps to develop
a driver for the vehicle and how to use a popular tool in robotics to control it will
also be explained.
Agradecimentos
Um projeto de engenharia nunca deve ser creditado somente a uma pessoa, mesmo
que esta tenha desenvolvido a maior parte dele. A concretização deste projeto não
teria sido possível sem a colaboração dos colegas do CORO (Laboratório de Sistemas
de Computação e Robótica) e por isto gostaria de agradecer fortemente por todo o
apoio e suporte.
Agradeço ao meu orientador Luciano e ao meu supervisor Guilherme por todo o
conhecimento a mim transmitido e por terem me dado a oportunidade e viabilizado
o desenvolvimento deste projeto. Obrigado também ao professor Luiz Themystokliz
pelas sugestões e ferramentas para elaboração desta monografia.
Em especial gostaria de agradecer à toda minha família e amigos por todo o suporte
e motivação que me deram durante este projeto e ao longo de todo o curso. Sem
estas pessoas, muito provavelmente não teria atingido meus objetivos.
Sumário
Resumo
i
Abstract
ii
Agradecimentos
iii
Lista de Figuras
v
Lista de Tabelas
vi
Siglas e Abreviações
vii
1 Introdução
1
1.1
Apresentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
A Instituição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3
Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.4
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.5
Escopo do Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.6
Organização do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . .
5
iv
SUMÁRIO
v
2 Revisão Bibliográfica
6
2.1
Veículos Autônomos . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.2
Simulação Robótica . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2.1
O Software Player/Stage/Gazebo . . . . . . . . . . . . . . . .
9
2.2.2
Outros Simuladores . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.3
Trabalhos Semelhantes na Área . . . . . . . . . . . . . . . . . 17
3 Descrição do Processo
20
3.1
Sistemas de Atuação e Controle . . . . . . . . . . . . . . . . . . . . . 21
3.2
Implementações Utilizando o Player . . . . . . . . . . . . . . . . . . . 23
3.2.1
Modelo do Veículo . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.2
Criação de um Ambiente para o Gazebo . . . . . . . . . . . . 25
3.2.3
Interface de comunicação do Player com o Gazebo . . . . . . . 26
3.2.4
Interface de comunicação do Player com o robô real . . . . . . 27
4 Desenvolvimento e Implementação
29
4.1
Modelo Físico do Veículo . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2
Ambiente para Simulação . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3
Desenvolvimento do Driver para o Veículo . . . . . . . . . . . . . . . 32
4.3.1
Programa Cliente para Comunicação com o Driver . . . . . . . 35
5 Testes e Análise de Resultados
37
5.1
Testes sobre o Simulador . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2
Testes no Veículo Autônomo . . . . . . . . . . . . . . . . . . . . . . . 39
6 Conclusão
42
6.1
Dos Resultados Obtidos . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2
Propostas de Continuidade . . . . . . . . . . . . . . . . . . . . . . . . 43
SUMÁRIO
A Códigos Fonte XML para o Simulador
vi
44
A.1 Código XML do Modelo Físico . . . . . . . . . . . . . . . . . . . . . . 44
A.2 Código XML do Ambiente de Simulação . . . . . . . . . . . . . . . . 51
Referências Bibliográficas
56
Lista de Figuras
1.1
Imagem do Ambiente de Simulação Gazebo. . . . . . . . . . . . . . .
2
2.1
Imagem da parte interna do Chevrolet Astra sendo desenvolvido pelo
PDVA com alguns de seus sistemas de controle. . . . . . . . . . . . .
8
2.2
Diagrama de funcionamento das ferramentas em conjunto [15]. . . . . 12
2.3
Estrutura geral de funcionamento do Gazebo [16]. . . . . . . . . . . . 12
2.4
Projeto de um robô de 6 pernas no Gazebo [6]. . . . . . . . . . . . . . 13
2.5
Projeto de engenharia reversa de um Segway utilizando o Gazebo[6]. . 14
2.6
Veículo autônomo modelado no Gazebo[19]. . . . . . . . . . . . . . . 19
3.1
Arquitetura projetada para controle da posição [21]. . . . . . . . . . . 22
3.2
Implementação de um modelo físico no Gazebo. . . . . . . . . . . . . 24
3.3
Implementação de juntas no Gazebo. . . . . . . . . . . . . . . . . . . 24
3.4
Integração de um controlador a um modelo do Gazebo. . . . . . . . . 24
3.5
Exemplo de um arquivo para descrição de um ambiente. . . . . . . . 25
3.6
Ligação entre um arquivo do Gazebo com a configuração do Player. . 26
3.7
Estrutura de um programa cliente. . . . . . . . . . . . . . . . . . . . 27
vii
LISTA DE FIGURAS
viii
3.8
Níveis de abstração desde um programa cliente até o robô em si. . . . 28
4.1
Imagem do veículo projetado para simulação.
4.2
Uso de um dispositivo laser no veículo. . . . . . . . . . . . . . . . . . 30
4.3
Imagem ilustrativa da física que envolve a junção entre chassi e rodas
dianteiras [4]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4
Imagem ilustrativa do ambiente urbano desenvolvido para simulação.
4.5
Visualização de uma outra posição. . . . . . . . . . . . . . . . . . . . 32
4.6
Estrutura de funcionamento de um driver para o Player.[8] . . . . . . 33
5.1
Visualização dos eixos de movimento. . . . . . . . . . . . . . . . . . . 38
5.2
Visualização física do ambiente incluindo o laser. . . . . . . . . . . . . 38
5.3
Sequência lógica de teste realizado. . . . . . . . . . . . . . . . . . . . 40
. . . . . . . . . . . . . 30
32
Lista de Tabelas
ix
Siglas e Abreviações
PDVA: Grupo de Pesquisa e Desenvolvimento de Veículos Autônomos da Universidade Federal de Minas Gerais
CORO: Laboratório de Sistemas de Computação e Robótica da Universidade Federal de Minas Gerais
(P/S/G): Player/Stage/Gazebo Project
DARPA: Defense Advanced Research Projects Agency
IMU: Inertial Measurement Unit
GPS: Global Positioning System
MRS: Multi-Robot Systems
TCP: Transmission Control Protocol
CAPÍTULO
1
Introdução
Esta monografia descreve todo o planejamento, execução e conclusão de um simulador para um veículo não-tripulado, sendo parte de um Projeto Final de Curso para
graduando em Engenharia de Controle e Automação. Este simulador é desenvolvido
em ambiente computacional e consiste em importante contribuição para os testes
dos diversos sistemas automáticos presentes no veículo.
1.1
Apresentação
O Grupo de Pesquisa e Desenvolvimento de Veículos Autônomos (PDVA) da Universidade Federal de Minas Gerais vem desenvolvendo sistemas de controle automático
de maneira a tornar um veículo Chevrolet Astra autônomo. Este grupo é formado
por professores e alunos da universidade e é associado a alguns laboratórios que
oferecem ferramentas e suporte ao desenvolvimento do veículo.
Um destes laboratórios é o CORO - Laboratório de Sistemas de Computação e Robótica que está descrito na Seção 1.2. Dentro do CORO percebeu-se uma necessidade
de facilitar a realização de testes sobre os sistemas desenvolvidos para o veículo e a
partir disto surgiu a idéia do desenvolvimento de um simulador realístico para este
automóvel.
1
1.1
Apresentação
2
O desenvolvimento de veículos não-tripulados é objeto de pesquisa cada vez mais
comum em universidades e centros de pesquisa de todo o mundo. A idéia é fazer com
que em algum tempo os carros sejam totalmente automáticos da mesma maneira
que outros meios de transporte como trens, aviões e metrôs têm se tornado. Deste
modo, os passageiros não teriam de se preocupar com a direção, podendo assim
ocupar o seu tempo com outras tarefas, evitar o stress causado pelo tráfego das
grandes cidades e o cansaço de longas viagens. Um outro ponto importante e que
depende do desenvolvimento bem consolidado destes veículos será tornar o trânsito
muito mais seguro e organizado.
A idéia de se desenvolver um simulador para este veículo seria diminuir o custo e facilitar a quantidade de testes necessários. Razões mais claras para isto se encontram
na Seção 1.3. Feitas algumas pesquisas, concluiu-se que este simulador deveria ser
construído com o uso do ambiente de simulação 3D chamado Gazebo que pertence
ao projeto Player/Stage/Gazebo (P/S/G) [14]. Este projeto desenvolve software
em código aberto que permite a realização de pesquisa sobre robôs e sistemas de
sensores. Assim como as razões para o desenvolvimento do simulador, motivos mais
claros para a escolha deste projeto se encontram na Seção 1.3. Para efeito de visualização deste ambiente a ser utilizado, foi copiada do site do projeto [6] a Figura
1.1 que mostra dois robôs interagindo com um ambiente e seus respectivos campos
de visão sensoriais.
Figura 1.1: Imagem do Ambiente de Simulação Gazebo.
As etapas para desenvolvimento deste projeto e os resultados esperados podem ser
bem entendidos com a leitura da Seção 1.4, uma vez que nela estão descritos os
principais passos e como é feita a validação deste simulador.
1.2
1.2
A Instituição
3
A Instituição
O projeto é desenvolvido dentro da própria UFMG, mais especificamente no CORO
- Laboratório de Sistemas de Computação e Robótica que está vinculado ao Departamento de Engenharia Elétrica da Universidade Federal de Minas Gerais. Neste
laboratório são realizadas atividades de pesquisa e desenvolvimento nas áreas de robótica, visão computacional, processamento de imagens digitais, sistemas integrados
de hardware e software, sistemas a eventos discretos, instrumentação e controle por
computador.
O CORO é um dos laboratórios associados ao Grupo de Pesquisa e Desenvolvimento
de Veículos Autônomos(PDVA) que constitui o grupo responsável pelo desenvolvimento do veículo autônomo. Diversos trabalhos voltados para o desenvolvimento de
módulos que buscam a autonomia do carro foram desenvolvidos neste laboratório e
têm tornado viável o objetivo de conceber um veículo totalmente autônomo.
Apesar de o laboratório estar vinculado ao Departamento de Engenharia Elétrica,
vários de seus membros pertencem ao Departamento de Engenharia Eletrônica e
Mecânica. Isto faz com que este laboratório seja multidisciplinar devido a grande
interação entre estas áreas.
O CORO oferece ainda suporte à parte experimental de disciplinas ministradas para
o programa de graduação em Engenharia de Controle e Automação, Engenharia
Elétrica e também para o Programa de Pós Graduação em Engenharia Elétrica.
1.3
Motivação
O advento de novas tecnologias torna necessário uma grande quantidade de testes
quanto à eficácia, qualidade e viabilidade destes novos produtos ou serviços. Testes
realizados diretamente sobre o produto em questão podem ser extremamente caros
e até mesmo perigosos.
Com a evolução do computador e de sua capacidade de processamento, uma maneira
encontrada para reduzir o custo e risco destes testes foi o uso de simulações. Elas
podem representar algo muito próximo do real e se não chegam a eliminar testes
reais, ao menos os reduzem em grande quantidade.
O desenvolvimento de um veículo autônomo pelo PDVA é dividido em diversas
etapas e diferentes projetos, já que envolve o controle de diferentes sistemas para
1.4
Objetivos
4
tornar o veículo totalmente automático. Logo, como citado acima, uma infinidade
de testes sobre o veículo são necessários. Para que estes testes sejam seguros, deve se
tomar um grande cuidado, buscando um ambiente que não ofereça riscos às pessoas.
Isto sem falar no custo de utilização do veículo e possibilidade de colisão devido a
eventuais falhas.
Estas questões motivaram a busca por uma maneira de simular este veículo para
realização de testes. O ambiente Gazebo para simulação de robôs em 3D vem sendo
usado com sucesso e resultados satisfatórios foram obtidos por diferentes projetos
ao redor do mundo, por isto, como primeiro passo, foi feita a decisão de utilizá-lo.
Um segundo ponto importante é o fato deste ambiente possuir código aberto, o que
possibilita modificações necessárias para adaptação ao projeto. Outra questão importante é o fato de haver documentação mostrando como deve ser implementada
toda a modelagem física de um robô, seus sensores e até mesmo a criação de ambientes. Para consumar esta escolha leva-se em conta o fato de o ambiente respeitar
leis físicas de corpos rígidos para interação entre objetos e robôs.
1.4
Objetivos
O desenvolvimento de um simulador para um veículo autônomo envolve três etapas
críticas. São elas:
• Desenvolver um modelo do carro para o ambiente de simulação com controladores e sensores para uma simulação realística;
• Criar um ambiente de simulação dentro do simulador 3D Gazebo que represente algo próximo do mundo real para que o veículo possa ser corretamente
simulado;
• Criar um driver de modo que um programa cliente possa se comunicar diretamente com os sistemas já desenvolvidos para o veículo autônomo através do
software Player.
Pelo fato de diversas pesquisas estarem em andamento e outras e já terem sido
realizadas sobre este veículo, há uma enorme massa de dados que pode ser utilizada
na construção do algoritmo de modelagem física e dinâmica. Espera-se que um
usuário possa simular de maneira eficaz um módulo desenvolvido para o veículo.
Neste caso, tendo ele obtido um resultado satisfatório, sentirá segurança para realizar
testes com o veículo real.
1.5
1.5
Escopo do Projeto
5
Escopo do Projeto
Neste trabalho, como se trata do desenvolvimento de um simulador computacional,
a maior parte das atividades desenvolvidas é na área de programação/desenvolvimento de software. Desta maneira, conhecimentos de disciplinas como Algoritmos
e Estrutura de Dados I e II, Análise Projeto e Programação Orientada a Objeto
(A.P.P.O.O) e Automação em Tempo Real são profundamente necessários.
O desenvolvimento de um simulador realístico envolve também toda a parte dinâmica de movimento do veículo. Desta maneira, é importante também o conhecimento de toda a modelagem física do veículo e para isto são usados conhecimentos
obtidos em disciplinas como Engenharia de Controle e Laboratório de Controle e
Automação I.
1.6
Organização do Trabalho
O trabalho está dividido em seis capítulos. Este primeiro capítulo apresentou uma
introdução ao projeto a ser descrito nesta monografia e o laboratório aonde será
desenvolvido. O Capítulo 2 corresponde à revisão bibliográfica, indicando a atual
situação do tema abordado e fornecendo uma base para que o leitor compreenda
este trabalho. O Capítulo 3 corresponde à descrição do processo, aonde é apresentada a metodologia utilizada para execução do projeto, são feitas análises quanto
aos possíveis métodos e soluções e é encerrada a parte de estudos necessários para
entendimento do projeto.
O Capítulo 4 apresenta as fases de desenvolvimento e implementação aonde são
apresentadas soluções utilizadas e tudo que foi feito no decorrer do projeto. O
Capítulo 5 corresponde à validação de tudo o que foi desenvolvido uma vez que é
feita a apresentação dos testes e análise de resultados. Para finalizar este trabalho
tem-se o capítulo de Conclusão. Nele são apresentadas conclusões obtidas a partir
da análise dos testes.
CAPÍTULO
2
Revisão Bibliográfica
Este capítulo tem como propósito abordar o atual estado de desenvolvimento do
tema deste projeto. Para isto será feita uma introdução aos veículos autônomos e
em que estágio se encontram as pesquisas dessa área, para em seguida tratar um
tema aonde é necessário fazer maior abordagem teórica. Este tema diz respeito
à simulação robótica, às ferramentas do projeto Player e à projetos de veículos já
desenvolvidos com auxílio de simulação.
2.1
Veículos Autônomos
Os veículos autônomos são uma tendência natural no mundo à medida em que os
meios de transporte vêm se automatizando cada vez mais. Aviões, trens e metrôs já
se encontram num estado de evolução que os permitem trafegar sem ação humana,
mas ainda assim as pessoas se sentem inseguras para se locomover em um veículo
não tripulado. Porém, a tendência é que este sentimento mude à medida em que a
confiança nas novas tecnologias aumente e que esta evolução garanta menor susceptibilidade a erros do que a locomoção em meios de transporte controlados por um
ser humano.
Os primeiros veículos automotivos autônomos vêm sendo desenvolvidos já a um
longo tempo, porém é perceptível que este desenvolvimento deu um grande salto nos
6
2.1
Veículos Autônomos
7
últimos anos. A DARPA, Agência de Projetos de Pesquisa em Defesa Avançada, é
hoje o principal órgão de pesquisa do Departamento de Defesa dos Estados Unidos
e vem organizando desde 2004 uma competição entre veículos autônomos chamada
DARPA Grand Challenge [1]. O desafio consiste no desenvolvimento de um veículo
autônomo capaz de cumprir um determinado objetivo. Nas primeiras edições, o
objetivo foi o de atravessar uma região de deserto numa espécie de desafio offroad e em sua última edição envolveu trafegar em um ambiente urbano, interagindo
com semáforos, edifícios, calçadas e outros veículos. A competição é aberta para
times e organizações de todo o mundo, podendo envolver grupos de pesquisa de
universidades ou até empresas da iniciativa privada mas com um único objetivo: o
desenvolvimento de sistemas veiculares automáticos seguros que possam ser usados
tanto para aplicações militares quanto comerciais [18]. Este desafio despertou o
interesse de diversos órgãos e empresas para a importância do desenvolvimento de
veículos não tripulados e a cada evento(2004, 2005 e 2007) tem aumentado o número
de inscrições.
No primeiro ano de desafio (2004), nenhum dos veículos conseguiu cumprir o desafio
proposto, porém um deles atingiu a maior distância e foi considerado vencedor,
sendo ele pertencente a um grupo de pesquisa da Universidade de Carnegie Mellon.
Já no segundo ano (2005), cinco veículos conseguiram completar o percurso com
sucesso, o que mostra um grande avanço em um espaço curto de tempo. O vencedor
foi o veículo da universidade de Stanford [22] que completou o percurso proposto no
menor intervalo de tempo. Na última edição do evento (2007), que envolveu o desafio
de trafegar em um ambiente urbano, venceu novamente o veículo desenvolvido pela
Universidade de Carnegie Mellon. Enquanto nas duas primeiras edições o desafio
era muito mais o ambiente físico, de modo que os veículos apenas se encontravam
em uma tentativa de ultrapassagem, nesta última edição os automóveis tinham de
respeitar leis de trânsito e tomar decisões em tempo real baseadas no movimento de
outros veículos.
Ao longo destes anos, o que se pode ser observado foi uma rápida evolução nos diversos sistemas de controle automáticos presentes nestes veículos. Os modelos mais
modernos apresentam hoje redes de sensores interligadas a um conjunto de microcontroladores juntamente com sistemas de localização do tipo GPS. Os sistemas
básicos necessários para que um veículo autônomo possa trafegar com segurança são
os de aceleração e frenagem do veículo, de localização e interação com o ambiente
externo.
O veículo Chevrolet Astra que vem sendo modificado pelo PDVA para se tornar
2.2
Simulação Robótica
8
autônomo já possui toda esta parte essencial de controle desenvolvida para que possa
se locomover. Pode-se ver na Figura 2.1, adaptada de [23], alguns dos sistemas já
desenvolvidos para este veículo. Dentre eles se encontram o sistema de aceleração,
frenagem, câmbio e direção, além de um computador acoplado e um joystick pelo
qual pode-se guiar o veículo. Além disso já foram implementados sistemas de GPS1
juntamente com IMU2 para localização. Todos os módulos citados e apresentados
na figura já foram testados com sucesso, de modo que o veículo já tem capacidade
de se mover de maneira independente.
Figura 2.1: Imagem da parte interna do Chevrolet Astra sendo desenvolvido pelo
PDVA com alguns de seus sistemas de controle.
2.2
Simulação Robótica
Uma outra maneira de classificar veículos autônomos é considerá-los robôs, o que
envolve uma imensa área de pesquisa que é a robótica. A capacidade de programação
da locomoção do veículo sem o controle de um ser humano ou o seu comando à
distância o coloca na mesma posição de robôs equipados com sensores e capazes de
agir de maneira autônoma.
1
GPS - Global Positioning System - Sistema de posicionamento global baseado em satélites com
localização dada por coordenadas geográficas.
2
IMU - Inertial Measurement Unit - Dispositivo eletrônico capaz de medir velocidade, orientação
e forças gravitacionais baseado em acelerômetros.
2.2
O Software Player/Stage/Gazebo
9
Para diminuir o custo e o tempo de pesquisa no desenvolvimento de robôs, grupos
de pesquisa têm investido em maneiras de criar aplicações embarcadas para um
robô sem depender fisicamente dele. A maneira mais usual de fazer isso é por
meio de simulações computacionais. Muitas vezes, as aplicações desenvolvidas em
um ambiente de simulação podem ser transferidas diretamente ao robô real com
mínimas modificações.
2.2.1
O Software Player/Stage/Gazebo
O projeto Player, mais conhecido pelo seu nome em língua inglesa The Player Project, é o nome dado a um projeto de desenvolvimento de ferramentas que auxiliam na
pesquisa de sistemas robóticos e de sensores. Segundo [14], este projeto começou na
University of Southern California(USC) em 1999 devido a uma necessidade interna
de interfacear e simular sistemas multi-robôs (MRS). De acordo com [17], todo o
código desenvolvido foi movido para a comunidade de código aberto para facilitar a
propagação e adaptação do programa a diferentes necessidades. Estas ferramentas
auxiliam na programação e simulação de robôs por possibilitar o desenvolvimento
de aplicações para um robô sem depender fisicamente dele.
Os programas já desenvolvidos pelo projeto podem ser divididos em três partes
básicas. O programa Player que se encontra na versão 3.0.1, o plugin de simulação
2D Stage que está na versão 3.2.2 e o plugin de simulação 3D Gazebo que é o membro
mais recente e se encontra na versão 0.10.0. Uma questão importante é o fato de o
Stage e o Gazebo só funcionarem em sistemas operacionais do tipo POSIX que são
aqueles baseados em Unix como Linux, Solaris e Mac OSX. O Player tinha a mesma
restrição até pouco tempo atrás quando foi lançada uma versão para Windows.
O Player
O programa Player é uma espécie de servidor desenvolvido para rodar em um robô
real que fornece uma interface simples para todos os sensores e atuadores do robô via
rede. Ou seja, seu modelo permite que programas para controle de robôs rodando
em uma máquina qualquer se comuniquem com o robô de acordo com o modelo
Cliente/Servidor, que é consagrado no mundo da computação.
Segundo [6], os programas cliente se comunicam com o Player através de sockets
na camada TCP - Transmission Control Protocol. Isto permite que os programas
cliente sejam desenvolvidos praticamente em qualquer linguagem, uma vez que a
2.2
O Stage
10
grande maioria delas oferece suporte a este tipo de comunicação.
A ideia básica dos programas cliente desenvolvidos é enviar comandos para atuadores
e ler dados de sensores para realizar controle sobre os robôs de uma maneira limpa e
simples, além de possibilitar a configuração de dispositivos durante o uso. O Player
já oferece suporte a uma grande variedade de dispositivos de hardware para robôs,
sendo ele feito através do desenvolvimento de drivers para comunicação entre o
Player e o dispositivo. Além disso, possui implementações sofisticadas de algoritmos
comuns necessários como os de rastreamento e localização. É possível também que
novos algoritmos sejam desenvolvidos de acordo com a necessidade para tornar o
Player ainda mais customizado em função de determinados interesses, assim como
novos drivers para se incluir a comunicação com novos dispositivos.
Outro aspecto importante do Player é o fato de este permitir o acesso de diversos
programas cliente de maneira simultânea. Isto permite que diversos clientes enviem
comandos a um mesmo servidor Player de diferentes localidades. De acordo com
[14], não existe implementado nenhum tipo de sincronização para este caso, de modo
que não existe uma fila de comandos e o último comando enviado sobrescreverá o
anterior. Isto foi feito para dar maior flexibilidade aos programas cliente. Outro
aspecto também é a suposição de que programas clientes diferentes são colaborativos,
ou seja, se múltiplos programas comandam um único dispositivo, estes clientes devem
estar ajudando uns aos outros.
O Stage
O Stage é um ambiente para simulação de robôs em duas dimensões que suporta
múltiplos robôs, sensores e objetos sendo altamente configurável. Este ambiente
tem como objetivo possibilitar o rápido desenvolvimento de controladores que eventualmente funcionarão em robôs reais e possibilitar experimentações sem acessar o
objeto real, ou seja, simulações.
Os softwares Player e Stage são totalmente compatíveis, de modo que um programa
cliente desenvolvido pode comunicar tanto com o um robô real quanto com o Stage
sem nenhuma modificação de código via servidor Player. Este fator possibilita o que
tanto se busca com a simulação robótica conforme citado na Seção 2.2.
Um aspecto importante é que o Stage é capaz de simular uma quantidade enorme de
robôs chegando ao número de centenas, o que é interessante quando se deseja analisar
a interação entre vários robôs. Esta é a grande diferença dele para o ambiente
Gazebo, que será apresentado na tópico a seguir. Neste texto se dará maior enfoque
2.2
O Gazebo
11
ao Gazebo pelo fato de o simulador a ser desenvolvido contemplar um único robô que
é o veículo autônomo. Porém, ambos os ambientes desempenham papel equivalente
e a maioria dos conceitos se aplica de maneira semelhante aos dois.
O Gazebo
O Gazebo, assim como o Stage, é um ambiente de simulação de robôs, porém em
três dimensões levando em conta a dinâmica dos objetos simulados. Isto possibilita
simulações com grau de fidelidade bem maior que as do Stage. No entanto, este
fator gera maior complexidade na simulação, o que é computacionalmente mais caro
e impossibilita a simulação com um número tão grande de robôs, a não ser que
eles sejam extremamente simples e sem muitas funcionalidades. Assim, em geral, a
simulação é feita com até vinte robôs.
No entanto, em uma visão global, o objetivo do Gazebo é o mesmo que o do Stage:
possibilitar ao usuário o desenvolvimento de controladores que eventualmente funcionarão em robôs reais podendo testá-los anteriormente em um ambiente de simulação. O Gazebo também é totalmente compatível com o Player podendo um mesmo
programa cliente se comunicar com o Gazebo ou com o robô real via servidor Player.
Para melhor entendimento do funcionamento destas ferramentas em conjunto, foi
copiada do tutorial de um dos usuários do ambiente e estudante de pós-graduação
da universidade aonde se iniciou o projeto [15] a Figura 2.2 que mostra a estrutura
de funcionamento. Como pode ser visto, o programa cliente recebe dados ou envia
comandos através de comunicação TCP. O servidor Player usando a mesma comunicação do tipo TCP conversa tanto com o ambiente de simulação Stage quanto com
o hardware real, que no caso seria um robô. Já o Gazebo se comunica com o Player
por memória compartilhada para garantir melhor velocidade e eficiência.
Para melhor examinar o caso de interesse neste projeto, pode-se utilizar a estrutura
geral dos componentes do Gazebo mostrada na Figura 2.3 de acordo com [16]. Como
pode-se ver, o programa cliente desenvolvido se comunica com o Gazebo por memória
compartilhada utilizando uma interface. A interface é ligada a um modelo que se
subdivide em duas partes principais: o ambiente em si aonde o robô em questão
será simulado e o próprio robô ou robôs. Os robôs podem ainda ser divididos em
três partes que são:
• O corpo físico e suas características;
• Os sensores responsáveis pelo envio de dados;
2.2
O Gazebo
12
Figura 2.2: Diagrama de funcionamento das ferramentas em conjunto [15].
• Os atuadores que recebem os comandos.
Figura 2.3: Estrutura geral de funcionamento do Gazebo [16].
Pode-se ver ainda na Figura 2.3 uma parte ligada à estrutura do Gazebo chamada
de Open Dynamics Engine (ODE). Esta é uma biblioteca para física de objetos
muito usada na comunidade de código aberto que foi desenvolvida por Russel Smith
[4]. Ela é usada para simular a dinâmica e os movimentos associados a corpos
rígidos articulados que é o caso de robôs. Para auxiliar o funcionamento do Gazebo
é utilizado ainda o GLUT (OpenGL Utility Toolkit) [5] que corresponde a uma
2.2
O Gazebo
13
ferramenta para visualização de aplicações gráficas que fazem o uso da biblioteca
OpenGL.
Segundo [16], apesar de ainda ser um software bem recente, o Gazebo já foi usado
para várias diferentes metodologias de projeto que não seriam possíveis em outros
simuladores. Um dos projetos citados possui questões de morfologia e controle.
Desenvolver arquiteturas robóticas envolve questões como a do ovo e da galinha:
Seria melhor desenvolver um sistema de controle compatível com o hardware ou o
hardware compatível com o controle necessário? A solução é a prototipação aonde
ambas as soluções são desenvolvidas de maneira simultânea e em partes com testes
intermediários. Utilizando este princípio de projeto foi desenvolvido na USC um
robô andante de seis pernas como pode visto na Figura 2.4 obtida do site do projeto
Player [6]. A construção do hardware teria tomado um tempo enorme porém, a
simulação e testes em várias etapas agilizou o processo.
Figura 2.4: Projeto de um robô de 6 pernas no Gazebo [6].
Um outro exemplo citado por Koenig e Howard em [16] foi o uso de engenharia
reversa para melhor entendimento e sintonização do controle de um equipamento.
Trata-se de um Segway, que é um objeto físico desenvolvido para o transporte de
pessoas que seria algo como um patinete motorizado. Este meio de transporte tem
a dinâmica muito similar a de um pêndulo invertido e testar modificações pode
ser extremamente perigoso devido à sua instabilidade. Logo, para isso foi criado
o modelo de um Segway no Gazebo como pode ser visto na Figura 2.5 obtida do
site do projeto Player [6]. O controle usado no hardware real foi transferido para o
modelo de simulação e com isso foi possível sintonizar melhor o controlador e realizar
2.2
Outros Simuladores
14
testes para diversas condições com segurança. Ao final do projeto, as melhorias
desenvolvidas foram replicadas ao Segway real.
Figura 2.5: Projeto de engenharia reversa de um Segway utilizando o Gazebo[6].
Além desses, diversos outros tipos de projetos com diferentes objetivos podem ser
desenvolvidos no Gazebo. Existem ainda projetos para melhoria de algoritmos ou
até mesmo para simulação de um robô dentro de um novo ambiente. Isto mostra a
flexibilidade desta ferramenta quando se envolve simulação robótica.
Como todo simulador, o Gazebo também possui algumas limitações importantes.
Por ser um simulador desenvolvido para ambientes externos, possui algumas questões
que não estão implementadas como os modelos físicos de um solo, areia ou grama
que fogem do escopo do projeto. Além disso, o ambiente não contempla ainda
objetos deformáveis e fenômenos de termodinâmica e dinâmica dos fluidos devido
à alta complexidade computacional. Porém, alguns destes itens citados podem ser
incluídos à medida em que se verifique sua necessidade.
2.2.2
Outros Simuladores
Apesar de os softwares do projeto Player terem sido tratados com maior detalhe pelo
fato de serem a ferramenta utilizada neste projeto, existem ainda outros simuladores
para a área da robótica. Dentre eles se encontram alguns com código aberto, nenhum
deles tão completo e desenvolvido quanto o Gazebo, e vários outros comerciais. Serão
abordados neste texto dois dos simuladores comerciais mais utilizados que são o
2.2
Webots
15
Webots desenvolvido pela Cyberbotics Ltd e o Microsoft Robotics Developer Studio
que como seu nome já diz é desenvolvido pela Microsoft.
Os motivos para a escolha dos softwares do projeto Player em detrimento dos outros
que serão apresentados abaixo são:
• Os softwares do Player possuem código aberto, o que possibilita adaptações
no código caso necessário;
• As ferramentas são gratuitas não sendo necessário nenhum tipo de licença;
• Os softwares rodam em um sistema operacional gratuito de larga escala que é
o Linux;
• Diversos projetos já foram desenvolvidos no mundo fazendo o uso destas ferramentas com sucesso;
• Grande comunidade desenvolvedora oferecendo suporte;
• Experiências prévias de pesquisadores integrantes do laboratório CORO.
Webots
O Webots, assim como o Gazebo, é um simulador robótico profissional usado largamente para propósitos comerciais e educacionais. O projeto Webots teve início em
1996 no Swiss Federal Institute of Technology em Lausanne na Suiça. Anos depois,
com o sucesso do projeto, este software passou a ser desenvolvido comercialmente e
hoje é controlado pela Cyberbotics Ltd.
As semelhanças com o Gazebo são muitas. De acordo com [9], o Webots inclui um
conjunto de sensores e atuadores frequentemente usados em experimentos robóticos
e também um conjunto de modelos de robôs que podem ser livremente modificados.
É possível ainda utilizar o Webots para construir novos modelos aonde se define
suas propriedades gráficas que incluem o formato, dimensões, cores e texturas e
suas propriedades físicas que consistem em massa, fatores de fricção e até mesmo
constantes de mola e amortecimento. Além disso, o Webots faz uso também da
Open Dynamics Engine (ODE) [4] para simular a dinâmica de corpos rígidos.
Os programas para controle de robôs que se comunicam com o Webots podem ser
escritos em uma variedade de linguagens de programação como C, C++, Java e
MATLAB e o Webots funciona nos sistemas operacionais mais comuns da atualidade
incluindo aí o Windows, Mac OS X e Linux.
2.2
Microsoft Robotics Developer Studio
16
A maior desvantagem do Webots é o fato de este ser um software pago de alto
custo. Ele é vendido hoje em dia em duas versões, sendo uma educacional dedicada
ao ensino de robótica em salas de aula e uma versão profissional mais completa
dedicada ao desenvolvimento com intuito comercial.
O Webots possibilita também a transferência de programas de controle a um robô
real. Neste caso, o programa de controle deve rodar em um computador enviando
comandos e lendo dados do robô real ao invés do robô simulado. Para atingir
isto, é necessário que o usuário escreva sua própria implementação da Application
Programming Interface (API) de funções do Webots como uma pequena biblioteca.
Alguns projetos já foram desenvolvidos com o auxílio do Webots. A título de exemplo podemos citar o projeto de desenvolvimento de um robô usado como aspirador
de pó e outro como cortador de grama. Em [13] Ganapathy e Lui mostram como
isso foi feito e como o Webots auxilia de modo a facilitar este desenvolvimento.
Um outro exemplo interessante é a chamada RobotStadium que consiste numa competição online de futebol de robôs baseada no simulador Webots. Seu objetivo é
uma simulação prévia de modo a auxiliar times que participarão da RoboCup, uma
competição de robôs reais que envolve a disputa de um jogo de futebol.
Microsoft Robotics Developer Studio
O Microsoft Robotics Developer Studio, muito conhecido por sua sigla MRDS, é
um ambiente para controle e simulação de robôs totalmente baseado na plataforma
Windows. De acordo com [2], o MRDS faz uso da Concurrent and Coordination
Runtime (CCR), uma biblioteca de programação concorrente baseada na plataforma
.NET da Microsoft. Esta biblioteca faz o controle de tarefas paralelas usando troca
de mensagens o que possibilita a coordenação de múltiplos serviços para atingir
comportamentos complexos como são os dos robôs.
O MRDS inclui uma ferramenta de programação visual usada para criar e depurar
aplicações para robôs, interfaces baseadas em Windows e web, simulação em três
dimensões e acesso simples a sensores e atuadores. Estas são características em geral
comuns a todos as ferramentas de desenvolvimento de robôs existentes. Porém,
diferentemente do Webots e do Gazebo, o MRDS faz uso da biblioteca chamada
PhysX [3] para simulação da dinâmica de corpos rígidos.
Apesar de diversos projetos interessantes terem sido desenvolvidos a partir do MRDS,
o programa não foi o sucesso que a Microsoft esperava. Em um movimento com o
objetivo de expandir a base de usuários e estabelecer vínculos, a companhia tomou
2.2
Trabalhos Semelhantes na Área
17
uma atitude que pode ser chamada de inesperada para uma companhia como ela.
A partir de 2008, o MRDS deixou de ser vendido e o seu download pode ser feito
diretamente do site da oficial da Microsoft. Isto deve tornar esta ferramenta cada
vez mais utilizada devido a todo o suporte que a companhia fornece. Porém, ainda
há uma grande limitação em relação ao Gazebo: o fato de não possuir código aberto
impossibilita a modificação de código, que é muitas vezes necessário para adaptações
de projeto.
Dentre projetos desenvolvidos com o auxílio do MRDS, encontram-se diversos projetos de robôs menores, porém há um projeto que se destaca no campo de interesse
desta monografia que corresponde ao veículo desenvolvido pela universidade de Princeton para o desafio DARPA que será descrito com mais clareza na próxima seção.
2.2.3
Trabalhos Semelhantes na Área
Após uma grande busca por projetos semelhantes aos que envolvem o tema desta
monografia, alguns trabalhos foram encontrados no que diz respeito ao uso de uma
ferramenta com interface de simulação para o desenvolvimento de veículos autônomos. Em geral os projetos encontrados com desenvolvimento utilizando simulação
dizem respeito à robôs menores, porém dois trabalhos se mostraram bastante interessantes por apresentarem o uso de simulação no auxílio ao desenvolvimento de
veículos para o desafio DARPA.
Ambos os trabalhos encontrados dizem respeito a veículos desenvolvidos para a
versão urbana do desafio DARPA Grand Urban Challenge no ano de 2007. Este
desafio foi citado na Seção 2.1 como um dos principais alavancadores de pesquisa e
desenvolvimento de veículos autônomos. Um dos projetos pertence a Universidade
de Princeton nos Estados Unidos que através do Princeton Autonomous Vehicle
Engineering (PAVE), que corresponde ao seu grupo de desenvolvimento de veículos
autônomos, desenvolveu um dos veículos participantes do desafio.
De acordo com [7], a universidade participou do desafio urbano fazendo o uso de
um veículo Ford Escape modelo 2005 equipado com sistema de aceleração eletrônico, direção controlada por potência eletrônica e sistema de frenagem regenerativo
também eletronicamente controlado. Neste projeto, ao invés de construir atuadores
para este sistema, a universidade optou por interfacear diretamente com os sistemas eletrônicos presentes, diferentemente do veículo sendo desenvolvido pelo PDVA,
aonde apenas a aceleração é controlada desta maneira.
2.2
Trabalhos Semelhantes na Área
18
O processamento necessário para comando do veículo é feito por quatro servidores
independentes interligados aos sistemas do veículo. Todas as câmeras e sensores
também estão ligados a estes servidores para que leitura e interpretação dos dados
possa ser feita de modo a enviar os comandos calculados aos sistemas eletrônicos
citados. Além disso, os servidores possuem conexão com a internet possibilitando
comandos de maneira remota.
Todos os servidores presentes rodam o sistema operacional Microsoft Windows Server 2003 equipados com a ferramenta de auxílio a desenvolvimento de programas
robóticos Microsoft Robotics Developer Studio. A capacidade do MRDS de tratar
diversos serviços concorrentemente funcionou de forma satisfatória.
Anteriormente a toda esta aplicação do MRDS para tratar os diversos serviços necessários para comando do veículo, foi feita uma simulação utilizando a interface em
3D para verificar possíveis problemas a serem enfrentados e situações de risco. Atingindo os objetivos satisfatoriamente, todo o código desenvolvido pôde ser movido
diretamente para o veículo sem a necessidade de modificação.
Já o outro trabalho encontrado pertence a Ohio State University também nos Estados Unidos e se mostra ainda mais interessante por fazer o uso dos softwares do
projeto Player para auxílio no desenvolvimento. Através de seu grupo de pesquisa
e desenvolvimento de veículos autônomos conhecido como Autonomous City Transport, a universidade escolheu um Toyota Highlander do tipo híbrido. Este veículo
apresenta diversas facilidades no que diz respeito a torná-lo autônomo. Tanto o seu
sistema de aceleração, quanto o de frenagem e o de transmissão podem ser controlados eletronicamente, o que agiliza bastante o processo e facilita o controle por não
ter de envolver atuadores externos.
Por se tratar de um veículo para um desafio urbano, as dificuldades são muito maiores já que envolvem a interação com diversos outros veículos e obstáculos e o fato de
ter que passar por cruzamentos, semáforos e até mesmo situações de estacionamento.
Por estes motivos o uso de simulação para se avaliar diversas situações possíveis se
mostrou interessante. De acordo com [19] os ciclos de desenvolvimento e testes do
carro fazendo uso do Gazebo podem ser divididos em duas partes. A primeira trata
da representação realística do modelo do veículo. Tanto as características físicas do
veículo como forma, peso e tamanho quanto as características dinâmicas como comportamento de aceleração, frenagem e direção estão incluídas no modelo utilizado.
Um grande número de sensores, tais como receptores GPS e lasers também estão
inclusos no modelo para que se possa simular toda a parte de fusão de sensores para
tomada de decisão.
2.2
Trabalhos Semelhantes na Área
19
A segunda parte diz respeito ao ambiente aonde será simulado este veículo e contêm
características de gravidade e fricção assim como possibilita a criação de objetos
e situações customizadas. A Figura 2.6 retirada de [19] apresenta uma situação
aonde o veículo em questão deve enfrentar um cruzamento interagindo com um
outro veículo.
Figura 2.6: Veículo autônomo modelado no Gazebo[19].
Maiores detalhes quanto ao uso de simulação neste projeto e quanto a transposição do código desenvolvido para o veículo real não foram citados, porém o uso da
simulação se mostrou um facilitador nos testes do veículo.
CAPÍTULO
3
Descrição do Processo
Este capítulo fará uma breve apresentação dos sistemas de atuação presentes no
veículo juntamente com seu modelo cinemático e como foi o desenvolvimento deste
modelo para o Gazebo. Em seguida é apresentada a construção de um ambiente
dentro do Gazebo para finalmente ser feita uma apresentação de como será feita
a interface entre o Player e o Gazebo ou entre o Player e os sistemas de atuação
presentes no veículo.
O veículo de passeio sobre o qual este trabalho foi desenvolvido é um Chevrolet
Astra. Este carro possui motor 2.4 com 16 válvulas e 130 cavalos de potência.
Dentre algumas características importantes do veículo estão câmbio automático,
direção hidráulica e sistema eletrônico de aceleração.
Em seu atual estágio de desenvolvimento acredita-se que este veículo possua instrumentação suficiente para transitar de maneira autônoma em ambientes aonde
não haja trânsito de outros carros e pessoas, uma vez que os sistemas de detecção
e desvio de obstáculos e de interação com outros objetos ainda se encontram em
desenvolvimento.
20
3.1
Sistemas de Atuação e Controle
3.1
21
Sistemas de Atuação e Controle
Segundo Sabbagh[20] dentre os sistemas de atuação que já se encontram automatizados estão os quatro mecanismos básicos para condução do veículo. São eles:
• Sistema de câmbio;
• Sistema de frenagem;
• Sistema de aceleração;
• Sistema de direção.
Eles correspondem ao primeiro passo quando se deseja desenvolver um veículo autônomo e foram apresentados na Figura 2.1. Dentre esses mecanismos, o câmbio, o
freio e a direção são comandados por atuadores eletromecânicos e o acelerador é
controlado diretamente de maneira eletrônica em função da presença de um sistema
de aceleração eletrônico no veículo. Todos estes sistemas são controlados por microcontroladores embarcados no carro que estão ligados a um computador via porta
USB, ou seja, é possível operar todos eles via software.
O sistema de câmbio teve maior facilidade de ser desenvolvido pelo fato de o veículo possuir câmbio automático. Deste modo, não é necessário se preocupar com
o acionamento da embreagem e nem mesmo com a troca da primeira até a quinta
marcha. Com isso, toda a atuação necessária é feita com o movimento de um braço
robótico para frente ou para trás entre os modos de estacionamento, ponto morto,
condução em marcha ré e condução convencional para a frente. Controlado por um
microcontrolador, o braço é capaz de fazer a mudança entre os diferentes modos.
O sistema de aceleração tem um detalhe interessante que é o fato de seu comando já
ser eletrônico, ou seja, o veículo possui um módulo eletrônico interno responsável por
transformar a atuação sobre o acelerador em um comando eletrônico mais preciso
e eficiente. Deste modo, atuando diretamente sobre este módulo, foi possível criar
uma maneira de se chavear entre o modo manual da aceleração, feito através do
pedal e o modo automático, controlado via software. Quando comandado em modo
automático, o acionamento da velocidade desejada é feito através de um sinal PWM Pulse Width Modulation(Modulação por Largura de Pulso) correspondente enviado
diretamente ao módulo eletrônico que controla a aceleração.
O sistema de frenagem do veículo foi desenvolvido como um Projeto Final de Curso
de Engenharia de Controle e Automação pelo aluno Tiago Mendonça da Silva [11].
3.1
Sistemas de Atuação e Controle
22
Inicialmente um motor de corrente contínua acoplado à uma caixa de redução e a
uma alavanca são responsáveis por transmitir ao pedal de freio o torque desejado.
O controlador implementado faz o controle do torque que se deseja aplicar ao pedal e possui também uma interface com o sistema de emergência do veículo para
situações aonde seja necessário frear bruscamente. Mais tarde, o sistema de freio
foi aprimorado como parte de um Trabalho de Conclusão de Curso de um aluno de
Engenharia Elétrica chamado Maurício F. Baleeiro[10]. Nesta melhoria foi acoplado
ao carro um atuador linear microcontrolado para fazer o acionamento do freio.
Para encerrar a descrição dos sistemas básicos presentes tem-se o sistema de direção. Para controle da direção das rodas dianteiras, foi usado um motor de corrente
contínua acoplado a uma caixa de redução. O motor recebe comandos de um microcontrolador capaz de controlar sua posição, velocidade e corrente. Deste modo,
quando acionado, este sistema faz com que a direção gire para a posição desejada.
Além destes importantes sistemas já implementados, há ainda um importante sistema de controle de posição e atitude. Este foi desenvolvido também por uma aluna
de mestrado chamada Michelle Mendes Santos[21] e reúne a informação proveniente
de diversos sensores para calcular a ação a ser tomada pelo veículo. Dentre esses
sensores se encontra um GPS e uma IMU juntamente com um sensor de orientação
das rodas dianteiras e um sensor de velocidade das rodas. Os sinais provenientes
destes sensores são reunidos por meio de fusão sensorial para que o software seja
capaz de calcular os comandos necessários aos sistemas básicos do veículo como
mostrado na Figura 3.1. Com o uso deste sistema, um aluno de Projeto Final de
Curso em Engenharia de Controle e Automação[20] desenvolveu um projeto para
que fosse possível programar uma trajetória para o veículo através da marcação de
coordenadas com o sistema de GPS por exemplo.
Figura 3.1: Arquitetura projetada para controle da posição [21].
3.2
Implementações Utilizando o Player
3.2
23
Implementações Utilizando o Player
Esta seção apresenta a maneira como são feitas as implementações visando o desenvolvimento de um simulador utilizando as ferramentas do projeto Player. Isto
deve passar pela criação do modelo físico e dinâmico do carro, pela criação de um
ambiente de simulação e pelo desenvolvimento de uma interface entre o servidor
Player e os comandos presentes nos módulos do veículo.
3.2.1
Modelo do Veículo
A modelagem de um robô qualquer dentro do Gazebo contém algumas propriedades
chave. São elas a presença física e a interface. A interface em si será abordada na
seção 3.2.3. A presença física do robô envolve os seguintes itens:
• Corpo - uma esfera, uma caixa ou uma composição de formas;
• Cinemática - as juntas e velocidades;
• Dinâmica - a massa, fricção e forças envolvidas;
• Aparência - cor e textura.
O primeiro passo para criação de um robô envolve a descrição de sua parte física. Isto
é feito através de um arquivo do tipo XML com a extensão *.model. É possível criar
corpos com múltiplas geometrias nesta estrutura como mostra a Figura 3.2. Neste
caso, está se tratando da composição de dois corpos sendo o principal um cilindro
e o secundário mais interno que está acoplado ao cilindro uma peça retangular. As
diferentes tags do arquivo dizem respeito às características como rotação, tamanho,
densidade e material.
Muitas vezes torna se necessária a criação de juntas entre diferentes objetos. Isto
também é possível de ser feito através de código XML. Diferentes tipos de juntas
podem ser criadas, desde juntas simplesmente físicas sem movimento algum a juntas
como dobradiças que tem movimento limitado ou juntas esféricas que tem movimento
ilimitado. A junta de uma roda ao chassi de um veículo poderia ser descrita pelo
código apresentado na Figura 3.3. As tags deste tipo de descrição dizem respeito
a detalhes como o quanto uma dobradiça pode dobrar e aonde os corpos sendo
conectados.
3.2
Modelo do Veículo
24
Figura 3.2: Implementação de um modelo físico no Gazebo.
Figura 3.3: Implementação de juntas no Gazebo.
Muitos modelos dentro do Gazebo requerem a necessidade de movimento e de leitura de dados de sensores como é o caso do veículo autônomo. A integração de
controladores a modelos é também feita através de código XML apesar de o código propriamente dito destes controladores não estar implementado neste tipo de
linguagem. Controladores são compilados e integrados a modelos do Gazebo como
apresenta o código da Figura 3.4. Neste exemplo é feita a integração de um controlador de posição a um robô chamado Pioneer2dx. Os dois primeiros filhos do arquivo
XML correspondem às rodas do veículo que são os parâmetros sobre os quais será
feito o controle e o último filho define a interface sobre a qual o controlador irá ler
dados e escrever comandos. Este detalhe será melhor explicado na Seção 3.2.3.
Figura 3.4: Integração de um controlador a um modelo do Gazebo.
Estes constituem os passos básicos na criação de um modelo para o Gazebo. Há
ainda alguns detalhes importantes do tipo como se criar um novo sensor ou atuador para o Gazebo, porém estes não serão abordados neste trabalho e maiores
informações podem ser obtidas no site do projeto [6].
3.2
Criação de um Ambiente para o Gazebo
3.2.2
25
Criação de um Ambiente para o Gazebo
Para rodar o ambiente de simulação Gazebo é necessário o uso de um arquivo com
extensão*.world. Este arquivo é do tipo XML e contém informações a respeito dos
itens que compõem o ambiente, da organização física do ambiente e dos modelos
que devem ser carregados para o ambiente. Modelos podem ainda estar integrados,
ou seja, um robô constitui um modelo e um sensor é também um modelo. Neste
caso, este arquivo também especifica como modelos que devem estar integrados estão
conectados fisicamente. A figura 3.5 apresenta um exemplo de como seria a descrição
destes modelos em um arquivo.
Figura 3.5: Exemplo de um arquivo para descrição de um ambiente.
Este código possui a descrição de um modelo de robô simples chamado Pioneer2AT
composto de um dispositivo laser ligado à ele. As coordenadas <xyz> dizem respeito
à posição relativa do laser em relação ao robô.
Dentre outros parâmetros globais que podem ser descritos no arquivo *.world encontrase também a força da gravidade, a cor do céu e texturas de objetos. Devido a grande
quantidade de desenvolvedores para este ambiente de simulação atualmente, o Gazebo já possui implementado uma infinidade de modelos tanto de objetos sólidos
como de terrenos, sensores e atuadores disponibilizados por colaboradores.
Um outro detalhe interessante é a possibilidade de chamar um arquivo do tipo *.inc
dentro do arquivo *.world. Este tipo de arquivo contém exatamente o mesmo conteúdo e facilita a replicação de um mesmo código a diversos ambientes. Por exemplo,
quando se usa composições equivalentes de modelos dentro de vários ambientes, caso
seja feita uma mudança na composição, esta não precisa ser replicada a todos os
arquivos.
3.2
Interface de comunicação do Player com o Gazebo
3.2.3
26
Interface de comunicação do Player com o Gazebo
Esta subseção diz respeito à maneira como o Player se comunica com o Gazebo. O
Player é um programa à parte que funciona como um servidor e deve rodar separadamente, porém deve apontar para uma instância do Gazebo. O Player possui já
implementados um grande número de interfaces e controladores que podem ser usados para comunicação com os modelos do Gazebo. É importante que o Player saiba
quais sensores e atuadores o Gazebo está usando e isto é feito através da indicação
por um arquivo *.cfg ao Player quando este for inicializado. Este arquivo corresponde ao arquivo *.world do Gazebo para o Player e estão ligados como apresentado
na Figura 3.6.
Figura 3.6: Ligação entre um arquivo do Gazebo com a configuração do Player.
Feita esta ligação implementada entre o Player e o Gazebo, torna se possível rodar um programa cliente desenvolvido que enviará comandos ao Player através de
interfaces para que estes sejam enviados ao robô simulado. O programa cliente é
responsável por fazer o controle dos dados lidos e enviados ao robô. O fato de utilizar comunicação via protocolo TCP dá ao usuário uma grande liberdade na hora
de escolher a linguagem na qual deseja desenvolver seu programa cliente uma vez
que praticamente todas as linguagens fornecem suporte a este tipo de comunicação.
Programas em geral desenvolvidos para comunicação com o Player possuem a estrutura apresentada pela Figura 3.7. Com a leitura de dados provenientes de sensores
é possível desenvolver algoritmos de controle para enviar os comandos desejados a
atuadores. Com isto torna se possível no caso de um veículo, aplicar algoritmos de
controle de posição, velocidade, detecção de obstáculos, dentre outros.
Para isto, estes programas devem instanciar um certo modelo de robô e sensores e
atuadores ligados à este. Através dos métodos fornecidos pelas interfaces dos senso-
3.2
Interface de comunicação do Player com o robô real
27
Figura 3.7: Estrutura de um programa cliente.
res e atuadores realizar o controle da maneira desejada. Estas interfaces presentes
são exatamente as que foram citadas na seção 3.2.1 no que diz respeito à designação
de controladores a um certo modelo.
3.2.4
Interface de comunicação do Player com o robô real
Esta seção trata aquele que talvez seja o maior motivo de sucesso da plataforma
P/S/G que consiste no fato de um programa cliente ter a possibilidade de comunicar
com o servidor Player e este tratar da comunicação com o robô real ou com o
Gazebo. Deste modo, o programa cliente que for testado sobre o Gazebo, poderá
ser diretamente replicado para rodar no veículo.
A comunicação do servidor Player com dispositivos de hardware deve ser feita através de um driver, que fará o link e a comunicação entre a interface chamada pelo
programa cliente e o robô real. Alguns dispositivos comuns já possuem drivers
implementados, o que não é o caso do veículo autônomo em questão. Logo, foi necessária a construção de um programa como esse para fazer a ponte entre o Player
e o veículo. A Figura 3.8 demonstra com mais clareza a necessidade deste driver.
Como pode ser visto, acima de tudo existe um programa cliente que possui uma
lógica desenvolvida para controle do robô. Logo abaixo, chamada de proxy, está
a interface que receberá os comandos do programa cliente e enviá-los da maneira
correta ao servidor Player ou receberá requisições de dados que deverão ser buscados
para ser retornados. O Player será o responsável pela comunicação ou com o Gazebo
ou com o robô real, como no caso desta figura. Entre ele e o robô deverá ainda
3.2
Interface de comunicação do Player com o robô real
28
Figura 3.8: Níveis de abstração desde um programa cliente até o robô em si.
existir um driver que fará a comunicação entre a interface e os dispositivos. Isto
é,corresponde a tradução de uma linguagem simples na interface para uma que os
dispositivos entendam.
CAPÍTULO
4
Desenvolvimento e Implementação
Este capítulo irá tratar o desenvolvimento das etapas já citadas para correto funcionamento do simulador. Nele serão apontados maiores detalhes de como foram feitas
algumas coisas e algumas das dificuldades encontradas durante o desenvolvimento.
4.1
Modelo Físico do Veículo
O primeiro passo durante o desenvolvimento do projeto foi desenvolver um modelo
físico do veículo para o Gazebo que correspondesse com as características físicas do
veículo real. Para isto foi necessário uma grande quantidade de detalhes do veículo
que incluem comprimento, largura, peso, diâmetro das rodas, distância entre eixos,
dentre outros.
Estes dados foram replicados a um código XML como apresentado na Seção 3.2.1
para dar uma forma ao veículo condizente com sua representação real. Obviamente o
Gazebo possui algumas limitações e é impossível fazer isto com perfeição por detalhes
como a presença unicamente das formas esféricas, cilíndricas e retangulares.
Duas imagens do veículo projetado podem ser vistas nas Figuras 4.1 e 4.2. Como
citado anteriormente, não há uma riqueza grande de formas no Gazebo e o veículo
tem uma aparência quadrada. Um detalhe importante que também se encontra no
29
4.1
Modelo Físico do Veículo
30
código XML do veículo é a descrição da interface a ser utilizada para comunicação
com o Player que corresponde a uma interface de controle de posição em duas dimensões. Ainda no código XML está a descrição do controlador que fará a atuação sobre
o robô, que corresponde a um controlador para um veículo não holonômico. Juntamente com esta descrição, se encontram valores importantes para construção desta
interface como o ângulo máximo de giro das rodas, quais as rodas que tracionam,
quais rodas podem girar e o torque de cada uma delas.
Figura 4.1: Imagem do veículo projetado
para simulação.
Figura 4.2: Uso de um dispositivo laser no
veículo.
Como pode ser visto na figura, de acordo com os padrões possíveis pela biblioteca que
faz toda a simulação da dinâmica física, o carro é composto de partes retangulares
juntamente com rodas no formato de cilindro. Para as rodas dianteiras, a junção
com o chassi é feita por uma junta do tipo Hinge2 disponibilizada pela biblioteca.
Esta junta é a mais aconselhável para casos como o da roda de um carro aonde
devem haver dois eixos sendo um possibilitando a roda girar para a frente e outro
possibilitando movimento da roda para esquerda e para a direita. A Figura 4.3
retirada de [4] apresenta a estrutura física simulada pela biblioteca. Já as rodas
traseiras, podem ser ligadas ao chassi fazendo o uso de uma junta comum do tipo
Hinge que é mais simples e não permite que as rodas se movam lateralmente.
Para utilização das juntas citada, existem diversos parâmetros para os quais deve se
atentar. Estes parâmetros são também incluídos no arquivo XML e podem afetar
toda a dinâmica da simulação. Dentre eles existem dois que são bastante importantes
e geraram alguns problemas durante a simulação. Eles dizem respeito a interação
de um corpo com outro, algo como uma constante de rigidez e no caso do veículo
seria algo como a constante de mola da suspensão. Inicialmente o veículo estava
balançando demais mesmo que em movimento retilíneo durante a simulação. Porém,
com alguns ajustes nestes parâmetros se tornou possível a estabilização do veículo.
4.2
Ambiente para Simulação
31
Figura 4.3: Imagem ilustrativa da física que envolve a junção entre chassi e rodas
dianteiras [4].
4.2
Ambiente para Simulação
O ambiente desenvolvido para a simulação buscou simular uma região urbana. Nada
impede que diversos outros possíveis ambientes possam ser criados posteriormente
se surgir a necessidade, porém o ambiente desenvolvido já abre possibilidade para
simulação de uma diversidade de coisas como cruzamento de veículos, cálculo de
curvas, detecção e desvio de obstáculos como o meio fio ou objetos que podem ser
colocados.
Com a adição do veículo ao programa cliente, se torna possível a construção de programas clientes que comandem os movimentos do carro e o teste de algoritmos com
diferentes funções. Com o driver rodando sobre o veículo, estes mesmos algoritmos
testados sobre o ambiente de simulação poderão posteriormente rodar no veículo
com segurança.
O arquivo XML de descrição do ambiente descreve juntamente com a inclusão do
veículo, a inclusão de dois dispositivos muito interessantes. Um deles é um laser,
que consiste em um dispositivo muito usado em veículos autônomos e que facilita
bastante o desenvolvimento de algoritmos de detecção de obstáculos e tomada de
decisão. O outro dispositivo é um rastreador que retorna a posição do veículo no
ambiente de simulação similar a um odômetro real. Estes dois dispositivos fazem
o uso de duas diferentes interfaces do Player para disponibilizarem seus comandos
específicos para programas clientes.
O laser posicionado sobre o veículo possui diversas configurações quanto ao seu posicionamento, logo a realização de testes para diversas posições permite que se possa
encontrar a posição ideal para instalação deste dispositivo no carro. Através da configuração no arquivo XML, podemos posicioná-lo sobre o capô do veículo ou acima
do parabrisa e ainda regular o seu ângulo no que diz respeito ao direcionamento ao
4.3
Desenvolvimento do Driver para o Veículo
32
chão.
As Figuras 4.4 e 4.5 apresentam um trecho deste ambiente aonde podemos ver as
ruas com cruzamentos, os meio-fios e também alguns objetos.
Figura 4.4: Imagem ilustrativa do ambiente urbano desenvolvido para simulação.
Figura 4.5: Visualização de uma outra posição.
Para efeito de testes, foi desenvolvido um programa cliente simples para movimento
do veículo dentro deste ambiente urbano. Este programa se mostra interessante para
que futuros usuários do simulador tenham uma noção de como usar os comandos
mais básicos permitidos pelas interfaces do Player sendo utilizadas. Este programa
cliente apresenta o uso dos comandos de velocidade e direção do veículo, o uso de
comandos do laser e também o uso de comandos do tracker que retornam ao usuário
posições de objetos dentro do ambiente e funciona como um odômetro simulado para
o veículo. O arquivo de configuração do Player desenvolvido para este ambiente faz
a especificação de todas as interfaces sendo usadas para a simulação.
4.3
Desenvolvimento do Driver para o Veículo
Para que se possa aproveitar por completo tudo aquilo que foi desenvolvido para
simulação no Gazebo, se torna muito interessante o desenvolvimento de um driver
para o veículo autônomo. Deste modo, aqueles códigos de programas clientes já
desenvolvidos e devidamente testados sobre o carro simulado poderão comandar
diretamente o veículo sem modificações. A hierarquia das diferentes ferramentas do
projeto Player foram explicadas na Seção 3.8 e nos facilitam entender a necessidade
do desenvolvimento de um driver.
A primeira dificuldade nesta etapa se deu pelo fato de o programa que faz todo
o controle do veículo ter sido desenvolvido em ambiente Windows. Os ambientes
4.3
Desenvolvimento do Driver para o Veículo
33
de simulação que rodam como plugins para o Player não funcionam am ambiente
Windows, mas felizmente, recentemente foi lançada uma versão do Player que roda
neste ambiente. A dificuldade, porém, ocorre devido a pouquíssima documentação
detalhando o uso do Player em ambiente Windows, como compilar um driver desenvolvido ou como rodar um programa cliente. Alguns erros surgiram e tomaram
grande tempo de desenvolvimento e teriam sido de simples resolução caso houvesse
melhor documentação ou pessoas com maior experiência no desenvolvimento para
este ambiente. Além disso, deve se atentar bastante para a instalação de algumas
bibliotecas e como incluir seus caminhos às variáveis de ambiente do Windows.
O ambiente escolhido para desenvolvimento do driver dentro do Windows foi o
Microsoft Visual Studio 9. Utilizando um programa chamado CMAKE GUI, desenvolvido exclusivamente para Windows, a partir de um programa base para desenvolvimento de um driver disponibilizado pelo próprio projeto Player é gerado um
projeto no Visual Studio fazendo grande parte das ligações necessárias com outras
bibliotecas. Este projeto quando compilado corretamente gera uma biblioteca do
tipo .dll que corresponderá ao driver desenvolvido e que poderá ser chamado pelo
Player.
Todo driver desenvolvido para o Player deve ser uma classe filha da classe Driver
e com isso implementar obrigatoriamente algumas funções. Este modelo acaba por
padronizar os drivers desenvolvidos e garante que eles sigam uma mesma estrutura
básica. A Figura 4.6 retirada de [8] nos dá uma visão global do funcionamento
padrão de um driver.
Figura 4.6: Estrutura de funcionamento de um driver para o Player.[8]
Como pode ser visto na figura, ao ser instaciado pelo Player através do arquivo
de configuração, o driver entra em seu método de construção e logo em seguida
no método de configuração. O método de construção é onde são instaciadas as
interfaces a serem usadas, já no método de configuração deve-se iniciar qualquer
4.3
Desenvolvimento do Driver para o Veículo
34
tipo de conexão a ser feita com o robô real antes que o programa atinja o loop
principal de troca de mensagens e comunicação.
Devido ao atual estágio de desenvolvimento do veículo e o curto tempo para desenvolvimento, o driver desenvolvido é ainda um pouco limitado mas constitui uma
excelente base para ser complementado posteriormente. A única interface utilizada
é a de controle de posição em duas dimensões e possibilita ao programa cliente fornecer comandos de velocidade e direção. Posteriormente, poderão ser incluídos no
driver também requisições de posição pelo programa cliente, uma vez que o programa do carro já possui medições de odometria. Um detalhe interessante é que o
laser a ser utilizado sobre o veículo em um futuro próximo no carro já possui um
driver desenvolvido que poderá ser utilizado quando este estiver instalado.
Na função Setup(), como citado acima, é aonde deve-se estabelecer comunicação
com os dispositivos do veículo. No caso do driver desenvolvido, é estabelecida uma
conexão via socket local com o programa que faz todo o controle do veículo. Neste
programa, foi incluída uma classe que executa uma thread em paralelo recebendo
comandos do driver e enviando-os ao veículo.
Seguindo o que apresenta a Figura 4.6, após as configurações o driver executa o seu
loop principal. Dentro desta função Main, é executado um loop infinito uma vez
que é aonde o robô, no caso o carro, irá receber comandos e enviar dados ao driver.
Dentro deste loop infinito, inicialmente é verificado se o driver não foi encerrado.
Em seguida, é acessada uma função que fará a verificação de mensagens, ou seja, ela
irá verificar se o programa cliente está enviando alguma mensagem e identificará o
seu tipo, seja de comando ou requisição. Com a mensagem identificada, é possível
realizar as ações necessárias e no caso de uma requisição, verificar e publicar dados
ao programa cliente. No caso do veículo, o driver desenvolvido trata as mensagens de
comando de direção e de velocidade e futuros trabalhos devem envolver o tratamento
de outras. Ao final de cada execução do loop, é interessante que haja um tempo
de retardo para que a thread não fique sobrecarregada e para que o veículo execute
suas devidas ações antes da chegada de uma nova mensagem.
Ao receber uma mensagem de comando de velocidade ou direção, o driver faz o tratamento com a identificação dos valores do comando e codificação desta mensagem
para envio via socket para o programa que faz os comandos do veículo. O programa,
ao recebê-la, fará a decodificação identificando o tipo de comando recebido e em seguida lendo os valores. Para estas mensagens foi criado um simples protocolo aonde
o tipo de comando e os valores são separados por um símbolo do tipo @. O driver
fica então responsável por montar a mensagem respeitando o protocolo e o programa
4.3
Programa Cliente para Comunicação com o Driver
35
do carro por desfragmentar a mensagem pelo caractere símbolo, identificar o tipo
de mensagem, para em seguida ler possíveis valores de acordo com o comando ou
requisição recebida.
Como já citado, tem-se implementado neste sistema os comandos de direção e velocidade. O modo como é acionado o comando de direção foi explicado na seção
3.4. Logo, caso o programa do carro identifique um comando que corresponda uma
mudança na direção do veículo, é chamada uma função que enviará comandos ao
motor que fará o giro da direção para a posição desejada. Entretanto, para tratar
comandos de velocidade a lógica é um tanto mais complicada.
Em um trabalho anterior sobre o veículo, Freitas[12] implementou fazendo o uso dos
sistemas automáticos presentes, um controle longitudinal de velocidade. O controle
é baseado em lógica fuzzy e em malha fechada fazendo o uso dos dados de odometria
e da IMU como sensores e utilizando os sistemas de aceleração e frenagem como atuadores. No programa que controla o veículo há uma thread responsável unicamente
por este controle, bastando que o usuário envie um valor de setpoint. Portanto, ao
identificar um comando de velocidade recebido pelo programa cliente via driver, o
que é feito internamente dentro do programa cliente é uma atualização do valor de
setpoint.
Um detalhe importante é um tratamento que é feito para que não haja trancos
gerados por acelerações bruscas. Para isto, foi tomado o cuidado para que ao enviar
um comando de setpoint de velocidade, anteriormente seja verificado o valor anterior
de setpoint. No caso de a variação ser maior que 7 Km/h, a alteração do setpoint
é feita de maneira gradativa com pequenos intervalos até que se chegue ao valor
desejado.
No caso de o driver receber um comando para finalizar, ele encerrará automaticamente a execução de seu loop principal e partirá para sua finalização. Neste momento sua conexão via socket com o programa que comanda o veículo é encerrada
e a execução chega ao fim.
4.3.1
Programa Cliente para Comunicação com o Driver
Para construção de um programa cliente para comunicar com um driver em ambiente
Windows, o procedimento foi bem similar ao de desenvolvimento de um driver como
citado na seção 4.3. Usando o programa CMAKE GUI, foi gerado um projeto para
o Microsoft Visual Studio 9 contendo ligações com as bibliotecas necessárias. A
4.3
Programa Cliente para Comunicação com o Driver
36
elaboração de um programa cliente em si é bem simples e basta fazer o uso dos
comandos da interface sendo utilizada. No caso do programa para se comunicar
com o driver, algo bem simples foi desenvolvido com alguns comandos dentre aqueles
implementados para efeito de testes. A maior dificuldade e algo que gerou grande
perda de tempo foi um problema de conexão do programa cliente com o driver. Para
correto funcionamento, o programa cliente deve rodar em modo release no Microsoft
Visual Studio. A falta de documentação a respeito gerou atraso tentando resolver
este problema de conexão por um detalhe tão simples, uma vez que os erros gerados
não levavam a uma conclusão.
CAPÍTULO
5
Testes e Análise de Resultados
Este capítulo irá tratar os testes realizados sobre o simulador e também sobre o
driver no veículo real. Serão apresentadas as dificuldades encontradas e os resultados
obtidos.
5.1
Testes sobre o Simulador
Os testes do simulador em geral são bem mais simples do que os testes sobre o carro.
Isto porque não dependem do uso do veículo, não há riscos e mudanças podem ser
feitas o tempo todo com bastante facilidade. Deste modo, à medida que os códigos
foram sendo desenvolvidos, testes eram realizados simultaneamente.
Assim que o primeiro esboço do veículo sobre o Gazebo ficou pronto, pequenos
programas cliente já foram feitos para realizar comandos sobre o carro e avaliar seu
movimento. Inicialmente, o veículo desenvolvido foi mais como um aprendizado de
como se fazer uso das juntas disponibilizadas para integrar partes do carro, como
ajustar os parâmetros de tamanho e rotação e como integrar um modelo a um
outro modelo, ou seja, fazer o uso de modelos aninhados. Deste modo, o primeiro
veículo foi desenvolvido com valores que não representavam as dimensões reais do
carro, apenas davam um formato próximo ao esperado. Os primeiros testes foram
realizados em um ambiente simples do Gazebo com apenas uma região plana e
37
5.1
Testes sobre o Simulador
38
comandos simples de movimento.
Com o funcionamento próximo ao esperado deste primeiro esboço, o próximo passo
foi a fidelização do veículo com medidas reais. Medições foram feitas sobre o veículo
e os dados obtidos aplicados ao veículo para simulação. Assim como para o primeiro
esboço, testes simples de movimento foram feitos para esta versão fidelizada com
sucesso.
O próximo passo então foi o desenvolvimento do ambiente que se assemelhasse a
uma região urbana para finalizar os testes do veículo simulado. Desenvolvido este
ambiente como apresentado na Seção 4.2, uma gama maior de testes pode ser feito.
Neste momento, foi detectado um balanço não esperado para o veículo que se mostrava mexendo demais para os lados quando em movimento. Isto foi solucionado
com o ajuste de constantes como citado na Seção 4.1.
O Gazebo oferece ainda uma ferramenta interessante que permite visualizar os eixos
de rotação presentes na simulação para ver se isto condiz com o resultado esperado
para os códigos desenvolvidos. Este tipo de visualização está presente nas Figuras
5.1 e 5.2.
Figura 5.1: Visualização dos eixos de movimento.
Figura 5.2: Visualização física do ambiente incluindo o laser.
A figura explicita todos aqueles eixos que podem ter movimento físico, ou seja,
na simulação, os objetos marcados com os eixos podem girar sobre os mesmos. É
importante citar que alguns movimentos podem ter também limitações como o giro
das rodas para esquerda e direita.
O fato de o driver desenvolvido não contemplar a leitura de dados impossibilita
uma validação deste simulador através da comparação de trajetórias. Deste modo,
a avaliação feita sobre a qualidade do simulador tende a ser muito mais visual e por
sentimento do que pela comparação de valores. Inicialmente, há um detalhe que impossibilita que o movimento do veículo no simulador seja totalmente equivalente ao
5.2
Testes no Veículo Autônomo
39
do veículo real que é a ausência de equações dinâmicas no controlador utilizado no
Gazebo. Essas equações são difíceis de se obter e se encontram ainda em desenvolvimento e por isto não foram incluídas. Estes detalhes são tratados como sugestões
de melhoria na Seção 6.2.
Salvas essas considerações, o movimento do veículo simulado se assemelha bastante
ao movimento do veículo real. Quando se trata por exemplo do movimento do
carro partindo de velocidade zero até atingir certa velocidade, o fato de parâmetros
de torque e massa do veículo estarem sendo usados torna o tempo até atingir a
velocidade realístico. Outro detalhe é o fato de a altura da suspensão variar quando
alterados seus parâmetros no modelo para o Gazebo. Caso se ajuste o valor da
constante de mola para um número muito baixo, observa-se esta suspensão ficando
rebaixada. Além disso, quando realizada uma curva, o movimento do carro simulado
se assemelha muito ao do veículo real graças a valores corretos de comprimento e
distância entre-eixos. O fato destes movimentos serem todos simulados por uma
biblioteca de dinâmica física consagrada como a ODE gera grande confiabilidade.
Portanto, como foram usados parâmetros e dimensões equivalentes às do veículo
real, a simulação mostrou ter boa qualidade.
5.2
Testes no Veículo Autônomo
Com a parte de simulação pronta e devidamente testada no Gazebo, o próximo passo
foi o desenvolvimento do driver para rodar no veículo. A construção do código e as
dificuldades nesta fase foram apresentadas no capítulo anterior de desenvolvimento.
Com o driver já construído, a primeira fase de testes foi realizada de maneira remota,
ou seja, foi feita sem o uso do carro apenas com a avaliação das conexões e do envio de
mensagens. Isso torna os testes mais seguros e garante ao menos que o funcionamento
do driver esteja correto e que este esteja enviando os devidos comandos ao carro.
Dentre as conferências feitas durante estes testes iniciais, a primeira delas foi a
verificação se o driver está recebendo corretamente os comandos vindos do programa
cliente e processando-os de maneira correta. Quanto a esta comunicação não houve
maiores problemas e o driver mostrou receber os comandos corretamente.
A segunda conferência foi verificar se tanto o driver quanto o programa que comando o veículo estavam iniciando seus sockets corretamente e se conectando. Os
primeiros testes mostraram uma dificuldade pois o driver não inicializava o socket
enquanto o programa cliente não se conectava a ele, ou seja, ele só rodava o método
5.2
Testes no Veículo Autônomo
40
de configuração após a conexão do programa cliente. Porém, após alguma pesquisa
verificou-se que é possível que este método seja acionado antes desta conexão. Para
isto, basta que se altere um parâmetro no arquivo de configuração *.cfg chamado
ao rodar o driver. Esta opção se mostrou interessante pelo fato de que se este método só fosse acionado quando o programa cliente se conectasse corretamente à ele,
seria necessário algum modo de interrupção no programa cliente para que o socket
do driver inicialize e se conectasse ao programa do carro antes mesmo de receber
comandos. Após esta alteração, as conexão entre os sockets ocorreu da maneira
esperada.
Com o funcionamento correto desta conexão, tornou se possível realizar um teste
completo da solução. A rotina deste teste consistiu na inicialização do Player rodando o driver, em seguida a inicialização do programa do carro e a conexão entre os
sockets e posteriormente a inicialização do programa cliente com alguns comandos
básicos. A Figura 5.3 apresenta a sequência lógica do teste.
Figura 5.3: Sequência lógica de teste realizado.
Os testes seguindo esta rotina apresentaram o resultado esperado e toda a comunicação funcionou corretamente. Com mais esta etapa concluída, o próximo passo
foi testar este conjunto no veículo. Com as conexões devidamente testadas e funcionando, havia bastante segurança para este teste final. O único problema que
5.2
Testes no Veículo Autônomo
41
poderia ocorrer seria a falha na conexão de algum sistema do carro e com isto não
ser possível o teste de algum comando.
Para testes sobre o veículo, foi desenvolvido um programa cliente bem simples. Neste
programa, inicialmente era enviado um comando para giro das rodas para a esquerda
e em seguida para a direita, tudo isto com velocidade zero. Testado o conjunto de
direção, era enviado um comando de velocidade.
A sequência lógica é a mesma apresentada pela Figura 5.3, porém com alguns passos
extras. Dentro da rotina apresentada, após a conexão entre os sockets haviam
dois passos extras. O primeiro deles é a conexão do programa do carro com seus
respectivos sistemas de controle e o segundo é a inicialização da thread responsável
por realizar o controle de velocidade do veículo.
Tomado os devidos cuidados foram então realizados testes sobre o carro. A primeira
parte, que diz respeito aos comando de direção, funcionou corretamente e a direção
recebeu os comandos com sucesso. A parte do comando de velocidade apresentou
maior dificuldade, porém não por algum problema nos programas, mas sim pela
limitação de espaço para testes. A velocidade utilizada para este controle foi bem
baixa, em torno de sete quilômetros por hora. No entanto, ao receber o comando e
iniciar o controle, o carro demora um pouco a conseguir controlar. Isto ocorre pelo
fato de o veículo ser automático e quando o câmbio está em posição de movimento,
quando se solta o freio, o motor já gera um impulso a frente que resulta em velocidade. Devido a este impulso, o carro leva um tempo maior para conseguir chegar à
uma velocidade mais baixa. Como a reta aonde o veículo pode ser testado não era
muito longa, logo ao seu final, quando a velocidade estava se estabilizando perto da
velocidade comandada, era necessário realizar a frenagem do veículo. Porém, por
um curto espaço de tempo foi verificado o controle de velocidade sendo realizado.
CAPÍTULO
6
Conclusão
Este capítulo tem por objetivo realizar as considerações finais quanto ao trabalho
realizado avaliando os resultados obtidos. Além disso, são apresentadas algumas
sugestões de continuidade para aperfeiçoamento do trabalho desenvolvido.
6.1
Dos Resultados Obtidos
Este trabalho apresentou o desenvolvimento de um simulador para um veículo autônomo fazendo o uso de ferramentas do projeto Player. Os resultados obtidos foram
satisfatórios de maneira que ao final do trabalho obteve-se um simulador capaz de
utilizar as diversas funcionalidades oferecidas pelos softwares do projeto Player.
O veículo desenvolvido para ser simulado dentro do ambiente Gazebo tem características físicas bem semelhantes ao veículo real e os resultados de simulações feitas
utilizando a biblioteca ODE podem trazer resultados que transmitam segurança para
a realização de testes reais. Um dos próximos passos no desenvolvimento do veículo
real é a inclusão do laser para auxílio na navegação. Testes sobre o simulador podem
facilitar no que diz respeito ao posicionamento deste dispositivo. A simulação pode
ainda ser extremamente benéfica para testes de algoritmos de detecção e desvio de
obstáculos se utilizando destes lasers ou câmeras assim como para testes de outros
tipos de sensores.
42
6.2
Propostas de Continuidade
43
O desenvolvimento de um driver para o veículo torna o uso do simulador algo ainda
mais útil de modo que os algoritmos testados sobre o simulador podem ser transferidos diretamente para o carro sem que haja qualquer modificação. Apesar de o
seu desenvolvimento estar ainda em estágio inicial, já forma uma base para futuros
complementos.
Do ponto de vista do aprendizado, o trabalho foi extremamente enriquecedor no
que diz respeito a saber gerenciar o tempo de desenvolvimento de um projeto e a
manter a motivação mesmo diante de dificuldades no desenvolvimento, além de ter
contribuído para novos aprendizados e amadurecimento de conhecimentos.
6.2
Propostas de Continuidade
Como sugestão de continuidade, o driver desenvolvido para o veículo deve ser aprofundado a partir da base já desenvolvida de modo que este seja capaz de retornar
ao programa cliente dados de odometria e incluir o uso do laser. Além disso, fazer
toda a configuração inicial do veículo de maneira automática antes que esse possa
se mover, como conexão aos sistemas, mudança de câmbio e liberação gradativa do
freio.
Com um driver mais completo, se torna interessante também a validação deste simulador. Esta validação poderia ser feita através da comparação entre trajetórias
do veículo simulado e trajetórias do veículo real. Com a leitura de dados de odometria em ambos os casos, uma comparação através de gráficos juntamente com uma
análise das diferenças de posição poderia ser feita.
Outra proposta interessante é a implementação das equações de modelagem dinâmica do veículo quando elas já estiverem sido desenvolvidas por completo. Esta
implementação deve ser feita internamente no código do controlador de posição em
duas dimensões e acabará por gerar fidelidade ainda maior do modelo simulado com
o modelo real.
APÊNDICE
A
Códigos Fonte XML para o Simulador
Este apêndice tem por objetivo apresentar os códigos desenvolvidos tanto para o
modelo do carro quanto para o ambiente de simulação desenvolvido para o Gazebo.
Dentro do código do ambiente de simulação é feita a inclusão de um novo arquivo
chamado ambiente.model que é um complemento da descrição. Nele são descritos
as ruas e meio fios e por ser um arquivo muito extenso não será incluído aqui.
A.1
Código XML do Modelo Físico
<?xml version=" 1 . 0 " ?>
< !−− Car Model −−>
<m o d e l : p h y s i c a l name=" default_car_model "
xmlns:model=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#model "
x m l n s : s e n s o r=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#s e n s o r "
xmlns:body=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#body "
xmlns:geom=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#geom"
x m l n s : j o i n t=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/# j o i n t "
x m l n s : c o n t r o l l e r=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/# c o n t r o l l e r "
x m l n s : i n t e r f a c e=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/# i n t e r f a c e "
x m l n s : v i s u a l=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/# v i s u a l "
>
44
A.1
Código XML do Modelo Físico
<xyz>0 0 0 . 0</ xyz>
<rpy>0 . 0 0 . 0 0 . 0</ rpy>
<c a n o n i c a l B o d y>c h a s s i s _ b o d y</ c a n o n i c a l B o d y>
< !−−t o r q u e e q u i v a l e n t e a 200N.m é um v a l o r aproximado e n c o n t r a d o
para motores s e m e l h a n t e s na i n t e r n e t−−>
<c o n t r o l l e r : s t e e r i n g _ p o s i t i o n 2 d name=" a ␣ c a r ">
<wheel>
< j o i n t>l e f t _ f r o n t _ w h e e l _ h i n g e</ j o i n t>
<type>s t e e r</ type>
<t o r q u e>200</ t o r q u e>
<s t e e r T o r q u e>100</ s t e e r T o r q u e>
</ wheel>
<wheel>
< j o i n t>r i g h t _ f r o n t _ w h e e l _ h i n g e</ j o i n t>
<type>s t e e r</ type>
<t o r q u e>200</ t o r q u e>
<s t e e r T o r q u e>100</ s t e e r T o r q u e>
</ wheel>
<wheel>
< j o i n t>l e f t _ r e a r _ w h e e l _ h i n g e</ j o i n t>
<type>d r i v e</ type>
<t o r q u e>200</ t o r q u e>
</ wheel>
<wheel>
< j o i n t>right_rear_wheel_hinge</ j o i n t>
<type>d r i v e</ type>
<t o r q u e>200</ t o r q u e>
</ wheel>
<steerPD>10 0</ steerPD>
<steerMaxAngle>29</ steerMaxAngle>
< !−−<w h e e l S e p a r a t i o n>2 . 0</ w h e e l S e p a r a t i o n>−−>
<wheelDiameter>0 . 6 4</ wheelDiameter>
<damping>0 . 9</ damping>
<s p r i n g>100000</ s p r i n g>
<stepTime>0 . 0 3</ stepTime>
<l e f t O d o m J o i n t>l e f t _ f r o n t _ w h e e l _ h i n g e</ l e f t O d o m J o i n t>
<rightOdomJoint>r i g h t _ f r o n t _ w h e e l _ h i n g e</ rightOdomJoint>
< i n t e r f a c e : p o s i t i o n name=" p o s i t i o n _ i f a c e _ 0 " />
</ c o n t r o l l e r : s t e e r i n g _ p o s i t i o n 2 d>
<body:box name=" c h a s s i s _ b o d y ">
< s t a t i c>t r u e</ s t a t i c>
45
A.1
Código XML do Modelo Físico
<geom:box name=" chassis_geom ">
< s i z e>4 . 0 1 . 1 7 0 . 1</ s i z e>
<mass>200</ mass>
<v i s u a l>
<s c a l e>4 . 0 1 . 1 7 0 . 1</ s c a l e>
<mesh>unit_box</mesh>
<m a t e r i a l>Gazebo /Red</ m a t e r i a l>
<castShadows>0</ castShadows>
</ v i s u a l>
</ geom:box>
<geom:box name=" r e t a n g u l o _ a p o i o ">
<xyz>0 0 . 0 0 . 3 5</ xyz>
< s i z e>1 . 6 1 . 5 7 0 . 6</ s i z e>
<mass>200</ mass>
<v i s u a l>
<s c a l e>1 . 6 1 . 5 7 0 . 6</ s c a l e>
<mesh>unit_box</mesh>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
<castShadows>0</ castShadows>
</ v i s u a l>
</ geom:box>
<geom:box name=" r e t a n g u l o _ d i a n t e i r o ">
<xyz>1 . 4 0 . 0 0 . 3 5</ xyz>
< s i z e>1 . 2 1 . 1 7 0 . 6</ s i z e>
<mass>150</ mass>
<v i s u a l>
<s c a l e>1 . 2 1 . 1 7 0 . 6</ s c a l e>
<mesh>unit_box</mesh>
<m a t e r i a l>Gazebo / White</ m a t e r i a l>
<castShadows>0</ castShadows>
</ v i s u a l>
</ geom:box>
<geom:box name=" r e t a n g u l o _ t r a s e i r o ">
<xyz>−1.4 0 . 0 0 . 3 5</ xyz>
< s i z e>1 . 2 1 . 1 7 0 . 6</ s i z e>
<mass>150</ mass>
<v i s u a l>
<s c a l e>1 . 2 1 . 1 7 0 . 6</ s c a l e>
<mesh>unit_box</mesh>
<m a t e r i a l>Gazebo / White</ m a t e r i a l>
<castShadows>0</ castShadows>
</ v i s u a l>
46
A.1
Código XML do Modelo Físico
</ geom:box>
<geom:box name=" r e t a n g u l o _ s u p e r i o r ">
<xyz>0 . 0 0 . 0 0 . 7</ xyz>
< s i z e>4 . 0 1 . 5 7 0 . 1 8</ s i z e>
<mass>100</ mass>
<v i s u a l>
<s c a l e>4 . 0 1 . 5 7 0 . 1 8</ s c a l e>
<mesh>unit_box</mesh>
<m a t e r i a l>Gazebo /Red</ m a t e r i a l>
<castShadows>0</ castShadows>
</ v i s u a l>
</ geom:box>
<geom:box name=" t e t o ">
<xyz>−0.15 0 . 0 1 . 0 4</ xyz>
< s i z e>2 . 5 1 . 5 7 0 . 5</ s i z e>
<mass>200</ mass>
<v i s u a l>
<s c a l e>2 . 5 1 . 5 7 0 . 5</ s c a l e>
<mesh>unit_box</mesh>
<m a t e r i a l>Gazebo / Yellow</ m a t e r i a l>
<castShadows>0</ castShadows>
</ v i s u a l>
</ geom:box>
<geom:box name=" p a r a c h o q u e _ t r a s e i r o ">
<xyz>−2.05 0 . 0 0 . 3 5</ xyz>
< s i z e>0 . 1 1 . 5 7 0 . 6</ s i z e>
<mass>30</ mass>
<v i s u a l>
<s c a l e>0 . 1 1 . 5 7 0 . 6</ s c a l e>
<mesh>unit_box</mesh>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
<castShadows>0</ castShadows>
</ v i s u a l>
</ geom:box>
<geom:box name=" p a r a c h o q u e _ d i a n t e i r o ">
<xyz>2 . 0 5 0 . 0 0 . 3 5</ xyz>
< s i z e>0 . 1 1 . 5 7 0 . 6</ s i z e>
<mass>30</ mass>
<v i s u a l>
<s c a l e>0 . 1 1 . 5 7 0 . 6</ s c a l e>
<mesh>unit_box</mesh>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
47
A.1
Código XML do Modelo Físico
<castShadows>0</ castShadows>
</ v i s u a l>
</ geom:box>
</ body:box>
<b o d y : c y l i n d e r name=" l e f t _ r e a r _ w h e e l ">
<xyz>−1.31 0 . 6 8 5 0 . 1</ xyz>
<rpy>0 90 90</ rpy>
<g e o m : c y l i n d e r name=" left_rear_wheel_geom ">
< s i z e>0 . 3 2 0 . 2</ s i z e>
<mass>50</ mass>
<v i s u a l>
<mesh>P i o n e e r 2 a t / t i r e . mesh</mesh>
<rpy>−90 0 0</ rpy>
< s i z e>0 . 6 4 0 . 2 0 . 6 4</ s i z e>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
</ v i s u a l>
<v i s u a l>
<mesh>P i o n e e r 2 a t / wheel . mesh</mesh>
<rpy>−90 0 0</ rpy>
< s i z e>0 . 3 2 0 . 2 0 . 3 2</ s i z e>
<m a t e r i a l>Gazebo / Gold</ m a t e r i a l>
</ v i s u a l>
<v i s u a l>
<xyz>0 0 −0.015</ xyz>
< s i z e>0 . 6 4 0 . 6 4 0 . 1</ s i z e>
<mesh>u n i t _ c y l i n d e r</mesh>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
</ v i s u a l>
</ g e o m : c y l i n d e r>
</ b o d y : c y l i n d e r>
<b o d y : c y l i n d e r name=" r i g h t _ r e a r _ w h e e l ">
<xyz>−1.31 −0.685 0 . 1</ xyz>
<rpy>0 90 90</ rpy>
<g e o m : c y l i n d e r name=" right_rear_wheel_geom ">
< s i z e>0 . 3 2 0 . 2</ s i z e>
<mass>50</ mass>
<v i s u a l>
<mesh>P i o n e e r 2 a t / t i r e . mesh</mesh>
<rpy>−90 0 0</ rpy>
< s i z e>0 . 6 4 0 . 2 0 . 6 4</ s i z e>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
</ v i s u a l>
48
A.1
Código XML do Modelo Físico
<v i s u a l>
<mesh>P i o n e e r 2 a t / wheel . mesh</mesh>
<rpy>−90 0 0</ rpy>
< s i z e>0 . 3 2 0 . 2 0 . 3 2</ s i z e>
<m a t e r i a l>Gazebo / Gold</ m a t e r i a l>
</ v i s u a l>
<v i s u a l>
<xyz>0 0 −0.015</ xyz>
< s i z e>0 . 6 4 0 . 6 4 0 . 1</ s i z e>
<mesh>u n i t _ c y l i n d e r</mesh>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
</ v i s u a l>
</ g e o m : c y l i n d e r>
</ b o d y : c y l i n d e r>
<b o d y : c y l i n d e r name=" l e f t _ f r o n t _ w h e e l ">
<xyz>1 . 3 1 0 . 6 8 5 0 . 1</ xyz>
<rpy>0 90 90</ rpy>
<g e o m : c y l i n d e r name=" left_front_wheel_geom ">
< s i z e>0 . 3 2 0 . 2</ s i z e>
<mass>50</ mass>
<v i s u a l>
<mesh>P i o n e e r 2 a t / t i r e . mesh</mesh>
<rpy>−90 0 0</ rpy>
< s i z e>0 . 6 4 0 . 2 0 . 6 4</ s i z e>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
</ v i s u a l>
<v i s u a l>
<mesh>P i o n e e r 2 a t / wheel . mesh</mesh>
<rpy>−90 0 0</ rpy>
< s i z e>0 . 3 2 0 . 2 0 . 3 2</ s i z e>
<m a t e r i a l>Gazebo / Gold</ m a t e r i a l>
</ v i s u a l>
<v i s u a l>
<xyz>0 0 −0.015</ xyz>
< s i z e>0 . 6 4 0 . 6 4 0 . 1</ s i z e>
<mesh>u n i t _ c y l i n d e r</mesh>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
</ v i s u a l>
</ g e o m : c y l i n d e r>
</ b o d y : c y l i n d e r>
<b o d y : c y l i n d e r name=" r i g h t _ f r o n t _ w h e e l ">
<xyz>1 . 3 1 −0.685 0 . 1</ xyz>
49
A.1
Código XML do Modelo Físico
<rpy>0 90 90</ rpy>
<g e o m : c y l i n d e r name=" right_front_wheel_geom ">
< s i z e>0 . 3 2 0 . 2</ s i z e>
<mass>50</ mass>
<v i s u a l>
<mesh>P i o n e e r 2 a t / t i r e . mesh</mesh>
<rpy>−90 0 0</ rpy>
< s i z e>0 . 6 4 0 . 2 0 . 6 4</ s i z e>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
</ v i s u a l>
<v i s u a l>
<mesh>P i o n e e r 2 a t / wheel . mesh</mesh>
<rpy>−90 0 0</ rpy>
< s i z e>0 . 3 2 0 . 2 0 . 3 2</ s i z e>
<m a t e r i a l>Gazebo / Gold</ m a t e r i a l>
</ v i s u a l>
<v i s u a l>
<xyz>0 0 −0.015</ xyz>
< s i z e>0 . 6 4 0 . 6 4 0 . 1</ s i z e>
<mesh>u n i t _ c y l i n d e r</mesh>
<m a t e r i a l>Gazebo / Black</ m a t e r i a l>
</ v i s u a l>
</ g e o m : c y l i n d e r>
</ b o d y : c y l i n d e r>
<j o i n t : h i n g e 2 name=" l e f t _ f r o n t _ w h e e l _ h i n g e ">
<body1>c h a s s i s _ b o d y</ body1>
<body2>l e f t _ f r o n t _ w h e e l</ body2>
<anchor>l e f t _ f r o n t _ w h e e l</ anchor>
<a n c h o r O f f s e t>0 0 . 0 0</ a n c h o r O f f s e t>
<a x i s 1>0 0 1</ a x i s 1>
<a x i s 2>0 1 0</ a x i s 2>
<e r p>0 . 8</ e r p>
<cfm>10 e−5</ cfm>
< !−−<suspensionCfm>10 e−5</ suspensionCfm>−−>
</ j o i n t : h i n g e 2>
< j o i n t : h i n g e name=" l e f t _ r e a r _ w h e e l _ h i n g e ">
<body2>c h a s s i s _ b o d y</ body2>
<body1>l e f t _ r e a r _ w h e e l</ body1>
<anchor>l e f t _ r e a r _ w h e e l</ anchor>
<a n c h o r O f f s e t>0 0 . 0 0</ a n c h o r O f f s e t>
<a x i s>0 1 0</ a x i s>
<e r p>0 . 8</ e r p>
<cfm>10 e−5</ cfm>
50
A.2
Código XML do Ambiente de Simulação
51
</ j o i n t : h i n g e>
<j o i n t : h i n g e 2 name=" r i g h t _ f r o n t _ w h e e l _ h i n g e ">
<body1>c h a s s i s _ b o d y</ body1>
<body2>r i g h t _ f r o n t _ w h e e l</ body2>
<anchor>r i g h t _ f r o n t _ w h e e l</ anchor>
<a n c h o r O f f s e t>0 −0.0 0</ a n c h o r O f f s e t>
<a x i s 1>0 0 1</ a x i s 1>
<a x i s 2>0 1 0</ a x i s 2>
<e r p>0 . 8</ e r p>
<cfm>10 e−5</ cfm>
< !−−<suspensionCfm>10 e−5</ suspensionCfm>−−>
</ j o i n t : h i n g e 2>
< j o i n t : h i n g e name=" right_rear_wheel_hinge ">
<body2>c h a s s i s _ b o d y</ body2>
<body1>r i g h t _ r e a r _ w h e e l</ body1>
<anchor>r i g h t _ r e a r _ w h e e l</ anchor>
<a n c h o r O f f s e t>0 −0.0 0</ a n c h o r O f f s e t>
<a x i s>0 1 0</ a x i s>
<e r p>0 . 8</ e r p>
<cfm>10 e−5</ cfm>
</ j o i n t : h i n g e>
</ m o d e l : p h y s i c a l>
A.2
Código XML do Ambiente de Simulação
<?xml version=" 1 . 0 " ?>
<g a z e b o : w o r l d
x m l n s : x i=" h t t p : //www. w3 . o r g /2001/ XInclude "
x m l n s : g a z e b o=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#gz "
xmlns:model=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#model "
x m l n s : s e n s o r=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#s e n s o r "
xmlns:window=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#window"
xmlns:param=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#param"
xmlns:body=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#body "
xmlns:geom=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#geom"
x m l n s : j o i n t=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/# j o i n t "
x m l n s : i n t e r f a c e=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/# i n t e r f a c e "
x m l n s : u i=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#u i "
x m l n s : r e n d e r i n g=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#r e n d e r i n g "
x m l n s : c o n t r o l l e r=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/# c o n t r o l l e r "
A.2
Código XML do Ambiente de Simulação
52
x m l n s : p h y s i c s=" h t t p : // p l a y e r s t a g e . s o u r c e f o r g e . n e t / gazebo / xmlschema/#p h y s i c s " >
<v e r b o s i t y>5</ v e r b o s i t y>
<p h y s i c s : o d e>
<stepTime>0 . 0 3</ stepTime>
<g r a v i t y>0 0 −9.8</ g r a v i t y>
<cfm>10 e−5</ cfm>
<e r p>0 . 8</ e r p>
<updateRate>−1</ updateRate>
</ p h y s i c s : o d e>
<r e n d e r i n g : g u i>
<type> f l t k</ type>
< s i z e>640 480</ s i z e>
<pos>0 0</ pos>
</ r e n d e r i n g : g u i>
<r e n d e r i n g : o g r e>
<ambient>0 . 4 0 . 4 0 . 4 1 . 0</ ambient>
<sky>
<m a t e r i a l>Gazebo / CloudySky</ m a t e r i a l>
</ sky>
</ r e n d e r i n g : o g r e>
< !−− Ground Plane −−>
<m o d e l : p h y s i c a l name=" plane1_model ">
<xyz>0 0 0</ xyz>
<rpy>0 0 0</ rpy>
< s t a t i c>t r u e</ s t a t i c>
<b o d y : p l a n e name=" plane1_body ">
<g e o m : p l a n e name=" plane1_geom ">
<normal>0 0 1</ normal>
< s i z e>2000 2000</ s i z e>
<segments>10 10</ segments>
<u v T i l e>100 100</ u v T i l e>
<m a t e r i a l>Gazebo / G r a s s F l o o r</ m a t e r i a l>
</ g e o m : p l a n e>
</ b o d y : p l a n e>
</ m o d e l : p h y s i c a l>
< !−− A random camera −−>
< !−−<m o d e l : p h y s i c a l name="cam1_model">
<xyz>−3 −4.5 2</ xyz>
A.2
Código XML do Ambiente de Simulação
53
<rpy>0 14 50</ rpy>
< s t a t i c>t r u e</ s t a t i c>
<body:empty name="cam1_body">
<s e n s o r : c a m e r a name=" cam1_sensor ">
<i m a g e S i z e>640 480</ i m a g e S i z e>
<h f o v>60</ h f o v>
<n e a r C l i p>0 . 1</ n e a r C l i p>
<f a r C l i p>100</ f a r C l i p>
<c o n t r o l l e r : g e n e r i c _ c a m e r a name=" c a m 1 _ c o n t r o l l e r ">
<i n t e r f a c e : c a m e r a name=" cam1_iface " />
</ c o n t r o l l e r : g e n e r i c _ c a m e r a>
</ s e n s o r : c a m e r a>
</ body:empty>
</ m o d e l : p h y s i c a l>−−>
< !−−Modelo c o r r e s p o n d e n t e ao ambiente c r i a d o−−>
<m o d e l : p h y s i c a l name="random_road">
<i n c l u d e embedded=" t r u e ">
< x i : i n c l u d e h r e f=" models / ambiente . model " />
</ i n c l u d e>
</ m o d e l : p h y s i c a l>
<m o d e l : p h y s i c a l name=" cadu_model ">
<xyz>0 −3 0 . 2 8</ xyz>
<rpy>0 0 . 0 0 . 0</ rpy>
< !−−
The i n c l u d e s h o u l d be l a s t w i t h i n a model . A l l p r e v i o u s s t a t e m e n t s
w i l l override those in the included f i l e
−−>
< !−−I n c l u s a o do modelo do v e i c u l o j u n t a m e n t e com l a s e r e câmera −−>
<i n c l u d e embedded=" t r u e ">
< x i : i n c l u d e h r e f=" models /cadu_PFC . model " />
</ i n c l u d e>
< !−− Embedded l a s e r model −−>
<m o d e l : p h y s i c a l name=" sick200lms_model ">
<xyz>2 . 0 0 0 . 8 9</ xyz>
<rpy>0 . 0 1 0 . 0 0 . 0</ rpy>
<i n c l u d e embedded=" t r u e ">
< x i : i n c l u d e h r e f=" models / s i c k l m s 2 0 0 . model " />
</ i n c l u d e>
</ m o d e l : p h y s i c a l>
< !−− Embedded s t e r e o camera −−>
< !−−
<m o d e l : p h y s i c a l name="cam1_model">
<xyz>0 . 9 0 1 . 4</ xyz>
A.2
Código XML do Ambiente de Simulação
<rpy>0 6 . 0 0</ rpy>
< s t a t i c>t r u e</ s t a t i c>
<body:empty name="cam1_body">
<s e n s o r : s t e r e o c a m e r a name=" cam1_sensor ">
<i m a g e S i z e>320 240</ i m a g e S i z e>
<h f o v>60</ h f o v>
<n e a r C l i p>0 . 1</ n e a r C l i p>
<f a r C l i p>10</ f a r C l i p>
<saveFrames> f a l s e</ saveFrames>
<saveFramePath>frames</ saveFramePath>
<b a s e l i n e>0 . 2</ b a s e l i n e>
<c o n t r o l l e r : s t e r e o c a m e r a name=" s t e r e o _ c a m e r a _ c o n t r o l l e r ">
<i n t e r f a c e : s t e r e o c a m e r a name=" s t e r e o _ i f a c e _ 0 " />
<i n t e r f a c e : c a m e r a name=" camera_iface_0 " />
<i n t e r f a c e : c a m e r a name=" camera_iface_1 " />
<l e f t c a m e r a>camera_iface_0</ l e f t c a m e r a>
<r i g h t c a m e r a>camera_iface_1</ r i g h t c a m e r a>
</ c o n t r o l l e r : s t e r e o c a m e r a>
</ s e n s o r : s t e r e o c a m e r a>
</ body:empty>
</ m o d e l : p h y s i c a l> −−>
<m o d e l : p h y s i c a l name=" stereo_camera_model ">
<xyz>0 . 9 8 0 1 . 2 8</ xyz>
<rpy>0 . 0 0 . 0 0 . 0</ rpy>
<i n c l u d e embedded=" t r u e ">
< x i : i n c l u d e h r e f=" models / stereo_camera . model " />
</ i n c l u d e>
</ m o d e l : p h y s i c a l>
</ m o d e l : p h y s i c a l>
< !−− I n c l u s a o do r a s t r e a d o r de p o s i c a o −−>
<m o d e l : p h y s i c a l name=" t r a c k e r ">
<xyz>0 . 0 0 . 0 0 . 0</ xyz>
< s t a t i c>t r u e</ s t a t i c>
< c o n t r o l l e r : t r a c k e r name=" f i d u c i a l ">
<models>
<t r a c k name=" cadu_model " i d=" 0 " />
</ models>
<n o i s e
l i n e a r=" 0 . 0 1 ␣ 0 . 0 1 ␣ 0 . 0 2 "
a n g u l a r=" 0 . 0 0 0 1 ␣ 0 . 0 0 0 1 ␣ 0 . 0 0 0 1 "
54
A.2
Código XML do Ambiente de Simulação
/>
<updateRate>15</ updateRate>
< i n t e r f a c e : f i d u c i a l name=" i f a c e "/>
</ c o n t r o l l e r : t r a c k e r>
</ m o d e l : p h y s i c a l>
< !−− White P o i n t l i g h t −−>
<m o d e l : r e n d e r a b l e name=" point_white ">
<xyz>0 0 500</ xyz>
< s t a t i c>t r u e</ s t a t i c>
< l i g h t>
<type> d i r e c t i o n a l</ type>
<r a n g e>100</ r a n g e>
< !−− Constant (0 −1) L i n e a r (0 −1) Q u a d r a t i c −−>
<a t t e n u a t i o n>0 . 5 0 . 0 1 0</ a t t e n u a t i o n>
</ l i g h t>
</ m o d e l : r e n d e r a b l e>
< !−−O b s t a c u l o−−>
<m o d e l : p h y s i c a l name=" u s e r _ c y l i n d e r 0 ">
<xyz>3 0 . 0 3 0 . 5</ xyz>
<rpy>0 0 0</ rpy>
<e n a b l e G r a v i t y>1</ e n a b l e G r a v i t y>
<e n a b l e F r i c t i o n>1</ e n a b l e F r i c t i o n>
< c o l l i d e> a l l</ c o l l i d e>
< s t a t i c>0</ s t a t i c>
<body name=" body ">
<xyz>0 0 0</ xyz>
<rpy>0 0 0</ rpy>
<g e o m : c y l i n d e r name="geom">
<xyz>0 0 0</ xyz>
<rpy>0 −0 0</ rpy>
< s i z e>1 . 0 0 . 7 5</ s i z e>
<mass>0 . 5</ mass>
<v i s u a l>
<xyz>0 0 0</ xyz>
<rpy>0 −0 0</ rpy>
<mesh>u n i t _ c y l i n d e r</mesh>
<m a t e r i a l>Gazebo / Grey</ m a t e r i a l>
<castShadows>1</ castShadows>
<s c a l e>2 2 0 . 7 5</ s c a l e>
</ v i s u a l>
</ g e o m : c y l i n d e r>
</ body>
</ m o d e l : p h y s i c a l>
55
Referências Bibliográficas
[1] Darpa grand challenge official website. http://www.darpa.mil/grandchallenge/
index.asp, April 2010.
[2] Microsoft robotics developer studio. http://www.microsoft.com/robotics/, May
2010.
[3] Nvidia physx for developers. http://developer.nvidia.com/object/physx.html,
May 2010.
[4] Open dynamics engine website. http://opende.sourceforge.net/, April 2010.
[5] Opengl utility toolkit website.
http://www.opengl.org/resources/libraries/
glut/, April 2010.
[6] The player project.
http://playerstage.sourceforge.net/index.php?src=
gazebo, 2010.
[7] Princeton autonomous vehicle engineering.
http://pave.princeton.edu/about/
projects/urban-challenge, May 2010.
[8] Psu robotics - player/stage drivers. http://www.psurobotics.org/wiki/index.php?
title=Player/Stage_Drivers, November 2010.
[9] Webots - commercial mobile robot simulation software. http://www.cyberbotics.
com, May 2010.
[10] Maurício Ferreira Baleeiro. Sistema de Acionamento Elétrico para Frenagem de um
Veículo Autônomo. Trabalho de Conclusão de Curso (Engenharia Elétrica) - Universidade Federal de Minas Gerais, 2009.
56
REFERÊNCIAS BIBLIOGRÁFICAS
57
[11] Tiago Mendonça da Silva. Controle automático do mecanismo de frenagem de um
veículo não tripulado. Projeto Final de Curso - Universidade Federal de Minas Gerais,
2009.
[12] Elias José de Rezende Freitas. Controle Longitudinal de um Veículo Autônomo. Trabalho de Conclusão de Curso (Engenharia Elétrica) - Universidade Federal de Minas
Gerais, 2010.
[13] V. Ganapathy and W.L.D. Lui. Design and implementation of a simulated robot using
webots software. Proceedings of the International Conference on Control, Instrumentation and Mechatronics Engineering, 28-29 May 2007, Johor Bahru, Malaysia,, pages
850–856.
[14] R. T.; Gerkey, B.; Vaughan and A Howard. The player/stage project: Tools for multirobot and distributed sensor systems. Proceedings of the International Conference on
Advanced Robotics, pages 317–323, 2003.
[15] Nate Koenig. Stage and gazebo - the instant expert’s guide. http://robotics.usc.
edu/~nkoenig/stage_gazebo_tutorial.ppt, April 2010.
[16] Nathan Koenig and Andrew Howard. Design and use paradigms for gazebo, an opensource multi-robot simulator. In IEEE/RSJ International Conference on Intelligent
Robots and Systems, pages 2149–2154. Sendai, Japan, Sep 2004. URL http://cres.
usc.edu/cgi-bin/print_pub_details.pl?pubid=394.
[17] Alexis Maldonado Michael Beetz Matthias Kranz, Radu Bogdan Rusu and Albrecht
Schmidt. A player/stage system for context-aware intelligent environments. Proceedings of the System Support for Ubiquitous Computing Workshop (UbiSys 2006), pages
1–7, September 2006.
[18] J. R. McBride, J. C. Ivan, D. S. Rhode, J. D. Rupp, M. Y. Rupp, J. D. Higgins, D. D.
Turner, and R. M. Eustice. A perspective on emerging automotive safety applications,
derived from lessons learned through participation in the darpa grand challenges. J.
Field Robot., 25(10):808–840, 2008. ISSN 1556-4959.
[19] Umit Ozguner. The ohio state university - autonomous city transport - developed for
the 2007 darpa urban challenge, June 2007.
[20] Vitor Brandão Sabbagh. Desenvolvimento de um Sistema de Controle para um Veículo Autônomo. Projeto Final de Curso (Engenharia de Controle e Automação) Universidade Federal de Minas Gerais, 2009.
[21] Michelle Mendes Santos. Desenvolvimento de um Sistema de Localização para um
Veículo Terrestre. Dissertação (Mestrado em Engenharia de Elétrica) - Universidade
Federal de Minas Gerais, 2009.
REFERÊNCIAS BIBLIOGRÁFICAS
58
[22] Sebastian Thrun, Michael Montemerlo, Hendrik Dahlkamp, David Stavens, Andrei
Aron, James Diebel, Philip Fong, John Gale, Morgan Halpenny, Gabriel Hoffmann,
Kenny Lau, Celia Oakley, Mark Palatucci, Vaughan Pratt, Pascal Stang, Sven Strohband, Cedric Dupont, Lars-Erik Jendrossek, Christian Koelen, Charles Markey, Carlo
Rummel, Joe van Niekerk, Eric Jensen, Philippe Alessandrini, Gary Bradski, Bob Davies, Scott Ettinger, Adrian Kaehler, Ara Nefian, and Pamela Mahoney. Stanley: The
robot that won the darpa grand challenge. Journal of Field Robotics, 23(1):661–692,
June 2006.
[23] M. M. Santos; E. J. R. Freitas; M. N. W. Vinti; P. Iscold; L. A. B. Tôrres; and G. A. S.
Pereira. Automation and localization of a robotic car. Proceedings of the 3rd Applied
Robotics and Collaborative Systems Enginnering (Robocontrol-08), pages 1–7, 2008.

Documentos relacionados