Guia Inicial
Após realizado as configurações necessárias para inicializar o simulador, será possível programar o seu próprio carro autônomo. Abra a pasta descompactada da AVL:
Clique duas vezes no caminho da pasta, apague as informações, digite cmd e aperte enter. Isso abrirá um prompt de comando na pasta AVL:
Copie o seguinte código para o Prompt e aperte Enter:
conda activate avl
Agora, copie e cole o seguinte código para executar o AVSim
python AVSim.py
Com isso, o AVSim estará ativado. Toda vez que for rodar o simulador, lembre-se de executar esses passos anteriores.
1. AVSim
O AVSim é um simulador para veículos autônomos, sendo possível escolher tanto o ambiente de simulação desejado quanto o algoritmo a ser executado. Ainda em fase de desenvolvimento, o AVSim permitirá controle de variáveis climáticas e observação de parâmetros de interesse como posição do veículo no mapa e perfis de velocidade e direção do volante. Alguns códigos de exemplos encontram-se na pasta /AVL/Teams/, como o Team1.py e o Team2.py. Para testá-los, selecione o mapa City e clique em LAUNCH.
Com o ambiente de simulação aberto, selecione o código Team1.py, ou Team2.py. As explicações e detalhes dos códigos se encontram na Seção ?.?.?. LEIA A SEÇÃO INDICADA PARA COMPREENDER A EXECUÇÃO DO CÓDIGO
1.1 Estrutura de Arquivos
O AVSim é dividido em diversos arquivos que realizam a comunicação com o simulador e executam o controle do carro. O arquivo que gerencia esse controle é o Tournament.py, localizado na pasta /AVL/files/.
1.1.1 Tournament.py
Tournament.py possui todas as variáveis para permitir a comunicação da Unreal com o python, através do AirSim da Microsoft. Ele possui duas classes principais, a Tournament e a CarMethods.
1.1.1.1 Classe Tournament
A classe Tournament controla os parâmetros para lançar o ambiente de simulação, como por exemplo:
-
Modo de Controle: Manual ou Automático;
No início de todo o código, o programa pergunta qual modo de controle deve ser executado, esperando do usuário uma resposta.
-
Configurações de Clima e Tempo;
Descomente o código e faça a alteração do dia (AAAA-MM-DD) e horário (HH:MM:SS):
## Setting Day and Hour of the Environment self.getClient().simSetTimeOfDay(True,'2020-07-10 14:00:00')
-
Posição Inicial de Objetos ou Veículos;
A posição inicial de veículos é controlada pela Pose do objeto, sendo necessário passar um array de Posição (x,y,z) e um array de Orientação (row, pitch, yaw) em radianos.
position = airsim.Vector3r(-214.6370086669922,207.1434326171875,-0.440409541130066) orientation = airsim.utils.to_quaternion(0,0,(90*3.1415)/180) initialPose = airsim.Pose(position,orientation) self.__setVehiclePose(initialPose)
-
Controle de Colisão com Objetos do Cenário;
Toda vez que o veículo colide com algum objeto em cena, o programa executado para de rodar, finalizando todos os processos. Além disso, mostra as propriedades do objeto colidido:
- Controle de Threads;
- Atualização e Armazenamento de Parâmetros de Interesse:
- Mapa de Posição;
- Perfil de Velocidade do Veículo;
- Perfil do Acelerador do Veículo;
- Perfil de Direção do Volante;
- Perfil do Freio do Veículo.
1.1.1.2 Classe CarMethods
1.1.2 TeamsMethods.py
1.1.3 Pasta Teams
1.1.3.1 Team1.py
Team1.py é um código que executa três processos em paralelo para o controle do carro. Esses processos são dividos em Controle Lateral
1.1.3.2 Team2.py
1.1.3.3 TeamDefault.py
1.1.3.4 Crie Seu Próprio Time
Para criar e executar seu código personalizado, faça uma cópia do arquivo TeamDefault.py na pasta /AVL/Teams/. Coloque o nome do seu Time no nome do arquivo, substituindo TeamDefault.py por SeuNome.py
Abra o arquivo SeuNome.py e init.py com qualquer editor de texto. Recomendamos que utilize o Spyder, já instalado no ambiente AVL do conda. Altere o seguinte código, substituindo TeamDefault por SeuNome
class SeuNome(TeamsMethods,object):
Acrescente SeuNome no arquivo init.py:
__all__ = ['Team1','Team2', 'TeamDefault', 'SeuNome']