Projeto

Geral

Perfil

Main » Histórico » Revisão 4

Revisão 3 (Henrique Wanner Antunes Silvério de Sousa, 13/08/2021 21:53 h) → Revisão 4/5 (Ebert Melo, 14/08/2021 23:05 h)

h1. Main 

 EAS_>Significa    “Escrever Algo Sobre” Ou seja explicar 

 *arquivo:* main_INTEL_humanoid_2020 

 É subdividido em três partes: 
	 Bibliotecas: Biblioteca: 
	 Setando configurações iniciais: 
	 Função Main: 

 * Bibliotecas: 
 As seguintes bibliotecas serão utilizadas: 
 >time - usada para fazer com que o script dê pausas 
 >serial - usada para configurar a porta que se comunica com a myrio 
 >math    - usada para fazer algumas contas operações matematicas 
 >RTIMU - biblioteca do sensor giroscopio 
 >get_yaw - biblioteca que contém UMA FUNCAO (quero aglutinar em outra) relacionada ao ângulo 
 >RPi.GPIO -    biblioteca da rasp 
 >classes_funcoes_INTEL_humanoide - contem a representação dos estados e funções auxiliares (checar se nao seria bom elas estarem em outras bibliotecas) 
 >VL53L0X 

 * Setando configurações iniciais 
 ** Relacionadas a Rasp:”Acho eu, verificar depois” 
 *** Porta Utilizada 
 _channel = 18_ 
 “EAS” 
 *** Não é a porta AMA0** “O que diabos é isso” 
 _porta = “/det/ttyAMA0_ 
 “EAS” 
 *** Deve igualar a da myrio 
	 _baudrate = 230400_ 
 “EAS” 
 *** Configurações das rasp 
 _GPIO.setmode(GPIO.BCM)           
 GPIO.setup(channel, GPIO.OUT)_ 
 “EAS” 
 ** Relacionadas ao sensor VL530X 
 *** Criando o objeto associado ao sensor VL53L0X 
 _tof = VL53L0X.VL53L0X()_  
 *** Configurando alcance e precisao do sensor 
 _tof.start_ranging(VL53L0X.VL53L0X_BETTER_ACCURACY_MODE)_ 
 “EAS”  
 ** Relacionadas ao giroscópio 
 *** Iniciando o sensor giroscopio 
 _SETTINGS_FILE = "/home/pi/IMU/RTEllipsoidFit/RTIMULib.ini"                                             
 s = RTIMU.Settings(SETTINGS_FILE)_ 
 _imu = RTIMU.RTIMU(s)_ 
 “EAS” 
 *** Confirgurações giroscopio 
 _imu.IMUInit()                
 imu.setSlerpPower(0.02)      
 imu.setGyroEnable(True)      
 imu.setAccelEnable(True)     
 imu.setCompassEnable(True)_ 
 “EAS”   
 *** Configuraçao de intervalo de giroscopio 
 _poll_interval = imu.IMUGetPollInterval()_ 
 “EAS” 
 ** Variáveis 
 *intervalo* - intervalo entre as leituras de obstaculo (como assim? quer dizer leitura da camera?) e direção 
 *dt* - variável usada nos testes da main (acredito que deva ser retirada na situação real) 
 *Tmed* - tempo equivalente a um deslocamento de 2cm (TEM QUE SER ATUALIZADO PARA O NOVO ROBO) 
 *Dmin* - inteiro que guarda a distancia em cm minima    a um obstáculo para ser iniciado um desvio de obstáculo 
 *yaw_0* - guarda um inteiro equivalente ao ângulo inicial 
 *limDyaw* - diferença aceitável em relação a direção inicial 
 *Yaw* - lista de direções instantâneas 
 *Dist* - lista de menores distâncias instantâneas obtidas 
 *Atual* - armazena em qual estado do diagrama de estados estamos. 

 
 * Função Main (Controla o diagrama de estados) 

 ** Descrição das funções utilizadas: 
 *** Decisao_desvio(): Obtém o lado para o qual o robô deve girar e retorna 1, 2 ou 0 (esquerda, direita ou para frente) 
 *** direcao_desvio(): Função que mantém o robô girando até atingir a direção correta pra realizar o desvio e retorna 3 (parar) 
 *** Walk_Detour(): Função que mantém o robô andando até ultrapassar o obstáculo desviado e retorna 3 (parar) 
 *** giro(): Função que mantém o robô girando até voltar para a direção padrão da pista e retorna 3 (parar) 

 ** Trechos comuns: 
 *** Atual = Estado.estado("x") - Seta o estado atual do robô para 0(andar), 1(girar para a esquerda), 2(girar para a direita) ou 3(parar) e o guarda na variável "Atual" 
 *** Ser.write(Atual.getName()) - Obtém o estado atual e o envia para porta serial, para ser lido depois pela myrio(nossa placa). 
 *** Dist [0] = tof.get_distance()/10 - Converte a distância obtida pelo sensor VL53L0X em centimetros e guarda na posiçao 0 da lista Dist 
 *** Yaw [0] = (Direcao.get_yaw(intervalo)-yaw_0) - Obtém o desvio em radianos com a direção da pista (yaw_0) e guarda na posição 0 da lista Yaw em um intervalo de tempo "intervalo" 
 *** time.sleep(dt) - função que espera passar um intervalo de tempo "dt" e depois continua o código 

 ** Funcionamento em pseudocódigo: 
 >Atual = estado("Parar") 
 >#Depois, possibilita-se o código a ser interrompido com um "Ctrl+C" usando "try" e "except": 
 >try: 
 >>(loop principal) 
 >except KeyboardInterrupt: 
 >>print("CTRL+C detectado. O loop foi interrompido.") 
 >Atual = estado("Parar") #parar os motores por questao de segurança 

 ** Loop principal em pseudocódigo: 
 while True: 
 >Atual = estado("Andar") 
 >ser.write(Atual) 
 > 
 >Dist = get_distance() 
 >yaw = get_yaw() 
 > 
 >if Dist <= Dmin: #obstáculo detectado 
 >>Atual = estado("Parar") 
 >>ser.write(Atual) 
 >> 
 >>Atual = estado(Decisao_desvio()) 
 >>ser.write(Atual) 
 >> 
 >>if Atual == "Girar para a esquerda" || Atual == "Girar para a direita": #Se nao for um ou dois, basta seguir em frente 
 >>>Atual = estado(direcao_desvio(Yaw,Dist)) 
 >>>ser.write(Atual) 
 >>> 
 >>>Atual = estado("Andar") #volta a andar pra ultrapassar o obstáculo 
 >>>ser.write(Atual) 
 >>> 
 >>>Atual = estado(Walk_Detour(Dist,Yaw)) 
 >>>ser.write(Atual) 
 >> 
 >if yaw) < -limDyaw: #direção incorreta: virado para à direita  
 >>Atual = estado("Girar para a direita") 
 >>ser.write(Atual) 
 >> 
 >>Atual = estado(giro(limDyaw)) 
 >>ser.write(Atual) 
 > 
 >if yaw > -limDyaw: #direção incorreta: virado para à esquerda 
 >>Atual = estado("Girar para a direita") 
 >>ser.write(Atual) 
 >> 
 >>Atual = estado(giro(limDyaw)) 
 >>ser.write(Atual)