Índice:
- Etapa 1: Componentes necessários
- Etapa 2: configurar as trilhas
- Etapa 3: Configurando o ambiente
- Etapa 4: Programando o GiggleBot
- Etapa 5: Deixando funcionar
Vídeo: Seguidor de linha GiggleBot usando Python: 5 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Desta vez, estamos programando em MicroPython o Dexter Industries GiggleBot para seguir uma linha preta usando seu sensor de seguidor de linha embutido.
O GiggleBot deve ser emparelhado com um micro: bit BBC para que seja controlado de forma adequada.
Se este tutorial é muito avançado para você e programar o GiggleBot é demais por enquanto, você sempre pode seguir o tutorial inicial que mostra como o robô pode ser programado em MakeCode aqui. O tutorial vinculado o guiará pelos fundamentos básicos.
Etapa 1: Componentes necessários
Os seguintes componentes de hardware são necessários:
- x3 pilhas AA - no meu caso, estou usando pilhas recarregáveis que têm uma voltagem geral mais baixa.
- Um robô GiggleBot da Dexter Industries para o micro: bit.
- Um micro BBC: bit.
Claro, você também precisa de um cabo micro USB para programar o BBC micro: bit - esse cabo geralmente vem com o pacote micro: bit da BBC ou você sempre pode usar um que seja usado para carregar smartphones (Android).
Obtenha o GiggleBot para o micro: um pouco aqui
Etapa 2: configurar as trilhas
Você terá que imprimir alguns ladrilhos e desenhar suas próprias pistas. Você pode usar nossos próprios ladrilhos para ter 100% de certeza de que está reproduzindo nossas condições. Ou se você se sentir aventureiro, você pode usar um pouco de fita preta e fazer o seu próprio. Aqui está o PDF para os tiles que usamos.
A trilha acima é composta pelo seguinte número de blocos diferentes:
- 12 ladrilhos do tipo # 1.
- 5 blocos do tipo # 2.
- 3 modelos de tipo de bloco # 5.
- 3 modelos do tipo de bloco # 6 - aqui, você acabará com um bloco extra.
Em seguida, imprima-os e corte-os. Tente colocá-los como na foto acima e lembre-se de que no lado superior direito da trilha, 2 blocos devem se sobrepor um ao outro - isso é esperado caso você esteja se perguntando se está fazendo algo errado.
Etapa 3: Configurando o ambiente
Para que você seja capaz de programar o BBC micro: bit em MicroPython, você deve configurar um editor para ele (o Editor Mu) e definir o GiggleBot MicroPython Runtime como seu tempo de execução. Para isso, você deve seguir as instruções desta página. A partir deste momento, a versão v0.4.0 do runtime é usada.
Etapa 4: Programando o GiggleBot
Antes de entrar no assunto, o tempo de execução GiggleBot MicroPython contém o tempo de execução clássico para o micro: bit da BBC e outras bibliotecas para oferecer suporte ao GiggleBot e outros sensores Dexter Industries.
Após configurá-lo, abra o seguinte script no editor Mu e clique em Flash. Isso irá mostrar o GiggleBot MicroPython Runtime e o script que você acabou de abrir no seu micro: bit da BBC. O script também é mostrado abaixo.
Assim que o processo de flashing estiver concluído, empilhe o micro BBC: bata no GiggleBot com os neopixels da placa voltados para frente, coloque-o na pista e ligue-o.
Observe que no script, o PID e outras 2 constantes (o ponto de ajuste de velocidade e as constantes de velocidade mínima) já estão configurados.
Observação: o script a seguir pode ter espaços em branco ausentes e isso parece ser devido a algum problema na exibição de Gist Gists do GitHub. Clique na essência para ir para a página do GitHub, onde você pode copiar e colar o código.
Seguidor de linha GiggleBot PID - Ajustado com NeoPixels
da importação de microbit * |
da importação do gigglebot * |
de utime import sleep_ms, ticks_us |
import ustruct |
# inicializar neopixels de GB |
neo = init () |
# cronometragem |
update_rate = 50 |
# ganhos / constantes (assumindo que a tensão da bateria está em torno de 4,0 volts) |
Kp = 25,0 |
Ki = 0,5 |
Kd = 35,0 |
trigger_point = 0,3 |
min_speed_percent = 0.3 |
velocidade_base = 70 |
ponto de ajuste = 0,5 |
last_position = setpoint |
integral = 0,0 |
run_neopixels = True |
center_pixel = 5 # onde o pixel central do sorriso está localizado no GB |
# turquesa = tupla (map (lambda x: int (x / 5), (64, 224, 208))) # cor a ser usada para desenhar o erro com os neopixels |
# turquesa = (12, 44, 41) # que é exatamente o turquesa acima comentado acima deste |
error_width_per_pixel = 0,5 / 3 # erro máximo dividido pelo número de segmentos entre cada neopixel |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, smallest_motor_power, higher_motor_power): |
velocidade_ base global |
if abs_error> = trigger_point: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = upper_bound - trigger_point |
# y1 = 1.0 |
# x = abs_error - trigger_point |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# igual a |
y = (abs_error - trigger_point) / (upper_bound - trigger_point) |
motor_power = base_speed * (smallest_motor_power + (1- y) * (maior_motor_power - menor_motor_power)) |
return motor_power |
outro: |
return base_speed * higher_motor_power |
run = False |
anterior_error = 0 |
whileTrue: |
# se o botão a for pressionado, comece a seguir |
if button_a.is_pressed (): |
run = True |
# mas se o botão b for pressionado, pare o seguidor de linha |
if button_b.is_pressed (): |
run = False |
integral = 0,0 |
anterior_error = 0,0 |
pixels_off () |
Pare() |
sleep_ms (500) |
se executado isTrue: |
# ler os sensores de linha |
start_time = ticks_us () |
direita, esquerda = read_sensor (LINE_SENSOR, AMBOS) |
# linha está à esquerda quando a posição <0,5 |
# linha está à direita quando a posição> 0,5 |
# linha está no meio quando posição = 0,5 |
# é uma média aritmética ponderada |
Experimente: |
posição = direita / flutuante (esquerda + direita) |
exceptZeroDivisionError: |
posição = 0,5 |
# o intervalo deve ser (0, 1) e não [0, 1] |
se posição == 0: posição = 0,001 |
se posição == 1: posição = 0,999 |
# use um controlador PD |
erro = posição - ponto de ajuste |
integral + = erro |
correção = Kp * erro + Ki * integral + Kd * (erro - erro_ anterior) |
anterior_error = erro |
# calcular as velocidades do motor |
motor_speed = upper_bound_linear_speed_reducer (abs (erro), setpoint * trigger_point, setpoint, min_speed_percent, 1.0) |
leftMotorSpeed = motor_speed + correção |
rightMotorSpeed = motor_speed - correção |
# acender os neopixels de acordo com o erro dado |
se run_neopixels isTrueand total_counts% 3 == 0: |
para i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08': |
neo = (0, 0, 0) |
para i inb '\ x00 / x01 / x02 / x03': |
ifabs (erro)> error_width_per_pixel * i: |
se erro <0: |
# neo [center_pixel + i] = turquesa |
neo [center_pixel + i] = (12, 44, 41) |
outro: |
# neo [center_pixel - i] = turquesa |
neo [center_pixel + i] = (12, 44, 41) |
outro: |
percent = 1- (error_width_per_pixel * i -abs (erro)) / error_width_per_pixel |
# ilumina o pixel atual |
se erro <0: |
# neo [center_pixel + i] = tupla (map (lambda x: int (x * porcentagem), turquesa)) |
neo [center_pixel + i] = (int (64 * por cento / 5), int (224 * por cento / 5), int (208 * por cento / 5)) |
outro: |
# neo [center_pixel - i] = tupla (map (lambda x: int (x * porcentagem), turquesa)) |
neo [center_pixel - i] = (int (64 * por cento / 5), int (224 * por cento / 5), int (208 * por cento / 5)) |
pausa |
neo.show () |
Experimente: |
# corte as velocidades do motor |
se leftMotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
se rightMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
se leftMotorSpeed <-100: |
leftMotorSpeed = -100 |
se rightMotorSpeed <-100: |
rightMotorSpeed = -100 |
# acionar os motores |
set_speed (leftMotorSpeed, rightMotorSpeed) |
dirigir() |
# imprimir ((erro, velocidade_motor)) |
exceto: |
# no caso de termos algum problema não corrigível |
passar |
# e manter a frequência do loop |
end_time = ticks_us () |
delay_diff = (end_time - start_time) / 1000 |
if1000.0 / update_rate - delay_diff> 0: |
dormir (1000.0 / update_rate - delay_diff) |
visualizar rawgigglebot_tuned_line_follower.py hospedado com ❤ por GitHub
Etapa 5: Deixando funcionar
Existem 2 botões no micro BBC: bit: botão A e botão B:
- Pressionar o botão A define o GiggleBot para seguir a linha (se houver).
- Pressionar o botão B interrompe o GiggleBot e redefine tudo para que você possa usá-lo novamente.
É altamente recomendável não levantar o GiggleBot enquanto ele está seguindo uma linha e depois colocá-lo de volta porque o erro de cálculo pode se acumular e bagunçar totalmente a rota do robô. Se quiser levantá-lo, pressione o botão B e, ao colocá-lo de volta, pressione A novamente.
Recomendado:
Robô seguidor de linha usando Arduino Uno e L298N: 5 etapas
Robô seguidor de linha usando Arduino Uno e L298N: Line Flower é um robô muito simples ideal para eletrônicos iniciantes
Seguidor de linha simples usando Arduino: 5 etapas
Seguidor de linha simples usando Arduino: Robô seguidor de linha ArduinoNeste tutorial, discutiremos o funcionamento de um robô seguido de linha Arduino que seguirá uma linha preta em fundo branco e fará a curva correta sempre que atingir as curvas em seu caminho. Arduino Line Follower Co
Seguidor de linha usando o Arduino - Projeto DIY Fácil: 6 etapas
Seguidor de linha usando o Arduino | Projeto DIY Fácil: Neste tutorial, estaremos fazendo um seguidor de linha usando ArduinoParts necessários: Chasis: BO Motors and Wheels: https://amzn.to/2Yjh9I7 L298n motor Driver: https://amzn.to/2IWNMWF Sensor IR : https://amzn.to/2FFtFu3 Arduino Uno: https://amzn.to/2FyTrjF J
Ajustando o seguidor de linha GiggleBot - Avançado: 7 etapas
Ajustando o seguidor de linha GiggleBot - Avançado: Neste Instructables muito curto, você vai ajustar seu próprio GiggleBot para seguir uma linha preta. Neste outro tutorial GiggleBot Line Follower, codificamos os valores de ajuste para funcionarem de acordo com esse cenário. Você pode querer fazer com que se comporte
Robô seguidor de linha usando WitBlox: 3 etapas
Robô seguidor de linha usando WitBlox: Construir um robô sempre nos emocionou. Construir um robô inteligente que pode tomar suas próprias decisões é ainda mais emocionante. Vamos construir um robô seguidor de linha hoje usando o WitBlox. O seguidor de linha é um robô autônomo que segue tanto o preto