Página 1 de 2

Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 12:58
por CyberX
Não gosto deste bicho, é lento como um cágado.
Mas com pybricks (saiu agora a versão alpha para Control+) ainda consigo suportá-lo.


Código: Selecionar todos

hub = CPlusHub()
sensor1 =  ColorDistanceSensor(Port.A)
motor1 = Motor(Port.B)
motor2 = Motor(Port.D)

motor1.run_target(200,0,wait=True)

while True:
    if sensor1.reflection() < 30:
        hub.light.on(Color.RED)
        
        motor1.run_target(400,60,wait=True)
        
        motor2.run(700)
        wait(50)
        motor2.stop()
        
        hub.light.off()
    else:
        hub.light.on(Color.GREEN)
        
        motor1.run_target(400,-60,wait=True)

        motor2.run(700)
        wait(50)
        motor2.stop()
        
        hub.light.off()

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 14:10
por Conchas
Mas porque raio é que isso é tão lento!??... :(

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 14:20
por CyberX
Conchas Escreveu: 06 jun 2020, 14:10 Mas porque raio é que isso é tão lento!??... :(
1. Eu sou uma bosta de programador, foi isto que me saiu ao fim de uma hora
2. O carro é mesmo uma bosta
3. Os motores PU são uma bosta
4. Já disse que não gosto deste bicho, que é lento como um cágado?

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 14:41
por Conchas
Ok, o problema tem de ser mesmo o código uma beta muito carunchosa.
Do carro não é certamente... :)

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:00
por CyberX
Conchas Escreveu: 06 jun 2020, 14:41 Ok, o problema tem de ser mesmo o código uma beta muito carunchosa.
Do carro não é certamente... :)
Não é pá, já editei o código para ser mais rápido. Não estou para me meter em PIDs, isto é um two-step basico.
Mas o carro é lento como um cágado gordo.

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:05
por Conchas
Um P é o suficiente para trabalhar muito do que isso na grande maioria dos casos.
É certe que sendo uma drive base com steering, pode introduzir aqui algum efeito indesejado, mas mesmo assim não devia ser nada extraordinariamente difícil de controlar.

Os motores têm de trabalhar em continuo.
Acho que esses "Wait" e "Wait=true" estão a lixar tudo!

Uns comentários no código para saber qual motor é qual e o significado das constantes, tb não ia nada mal... ;)

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:08
por CyberX

Código: Selecionar todos

hub = CPlusHub()
sensor1 =  ColorDistanceSensor(Port.A)
motor1 = Motor(Port.B)
motor2 = Motor(Port.D)

motor1.run_target(200,0,wait=True)

while True:
    if sensor1.reflection() < 30:
        hub.light.on(Color.RED)
        
        motor1.run_target(600,60,wait=True)
        
        motor2.dc(30)
        wait(50)
        motor2.stop()
        
        hub.light.off()
    else:
        hub.light.on(Color.GREEN)
        
        motor1.run_target(600,-60,wait=True)

        motor2.dc(30)
        wait(50)
        motor2.stop()
        
        hub.light.off()

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:11
por CyberX
Conchas Escreveu: 06 jun 2020, 15:05 Uns comentários no código para saber qual motor é qual e o significado das constantes, tb não ia nada mal... ;)
Comentários? 8) 8) 8)
Isto é "agile" à boa maneira tuga, fast release to market, comenta-se depois a menos que pagues

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:23
por CyberX
Pronto, comentários e o carro nunca pára. Não há video, é muito semelhante ao anterior (apenas mais fluido):

Código: Selecionar todos

hub = CPlusHub()
sensor1 =  ColorDistanceSensor(Port.A)
mStear = Motor(Port.B)
mMove = Motor(Port.D)

ReflectionTHRESHOLD=30  # light sensor reflection read, percent
TurnZERO = 0
TurnLEFT = -60                     #angle degrees
TurnRIGHT = -TurnLEFT
MoveDUTY = 30                   # Duty Cycle, percent
MoveTime = 50                     # milliseconds

mStear.run_target(200,TurnZERO,wait=True)

while True:
    if sensor1.reflection() < ReflectionTHRESHOLD:
        hub.light.on(Color.RED)
        mStear.run_target(600,TurnRIGHT)
        mMove.dc(MoveDUTY)
        wait(MoveTime)
        hub.light.off()
    else:
        hub.light.on(Color.GREEN)
        mStear.run_target(600,TurnLEFT)
        mMove.dc(MoveDUTY)
        wait(MoveTime)
        hub.light.off()

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:35
por CyberX
Sim, o mMove.dc() pode sair do Loop ja que o carro não pára.

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:52
por gads
Comecei a ver o video antes de ler os comentários e ainda me questionei "porque raio é que isto está em slow motion?" ;D

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:54
por CyberX
Pronto, versão revista e diminuida
MoveDUTY maiores e TurnLEFT/RIGHT maiores serão possíveis com pistas com curvas menos apertadas - infelizmente a que montei à pressa não é assim.

Código: Selecionar todos

hub = CPlusHub()
sensor1 =  ColorDistanceSensor(Port.A)
mStear = Motor(Port.B)
mMove = Motor(Port.D)

ReflectionTHRESHOLD=30  # light sensor reflection read, percent
TurnZERO = 0
TurnLEFT = -70          # angle, degrees
TurnRIGHT = -TurnLEFT
TurnSpeed = 600        # 
MoveDUTY = 40           # Duty Cycle, percent

mStear.run_target(200,TurnZERO,wait=True)
mMove.dc(MoveDUTY)
        
while True:
    if sensor1.reflection() < ReflectionTHRESHOLD:
        hub.light.on(Color.RED)
        mStear.run_target(TurnSpeed,TurnRIGHT)
    else:
        hub.light.on(Color.GREEN)
        mStear.run_target(TurnSpeed,TurnLEFT)

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:56
por Conchas
Estás a ver!?
Muito melhor assim. ;D

E pelos vistos melhorou a performance.
Agora só mexendo!...

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 15:56
por CyberX
Conchas Escreveu: 06 jun 2020, 15:56 Estás a ver!?
Muito melhor assim. ;D

E pelos vistos melhorou a performance.
Agora só mexendo!...
Nã, o bicho é mesmo mau.

Re: Top Gear Rally Car Line Follower

Enviado: 06 jun 2020, 16:01
por Conchas
Só se for o bicho acima do teclado! ;D >:D