Controlando carros LEGO com pedais e direção com XAC
Enviado: 17 abr 2024, 15:38
Há relativamente pouco tempo o projecto Pybricks adicionou suporte ao gamepad da Xbox o que levantou algumas ondas já que é muito mais fácil usar um gamepad para conduzir um set LEGO do que um smartphone. Além disso como o gamepad tem um número bastante considerável de botões o controlo de coisas como gruas ou outros modelos mais complexos fica mais facilitado.
Eu tenho há algum tempo um XAC (Xbox Adaptive Controller) que implementa os mesmos controlos do gamepad tradicional mas associados a dispositivos mais orientados para utilizadores com necessidades especiais (por exemplo microswitches que permitem o controlo com o queixo ou sensores de pressão que permitem o controlo com a pressão dos maxilares).
Também tenho interruptores de pedal, microswitches e mais algumas traquitanas de electrónica.
Foi só necessário um update de firmware da Microsoft que implementa BT BLE no XAC para conseguir emparelhá-lo com um hub a correr pybricks e eles já têm no site um script para controlo de carros Technic, inclusive para o Audi RS Q e-tron.
Este script usa os botões "left trigger" e "right trigger" do gamepad para controlar o travão/acelerador (na verdade a velocidade, de um máximo positivo a um mínimo negativo) e o joystick esquerdo para controlar a direção. Na XAC isso corresponde às fichas LT, RT e X1 por isso foi aí que liguei as minhas traquitanas.
A primeira tentativa não correu bem como eu esperava - os "trigger" da Xbox são analógicos e os meus pedais são meros interruptores portanto apenas consegui valores extremos (para a frente ou para trás à máxima velocidade e parado). Mas encontrei na Egitana (uma loja de artigos musicais) pedais analógicos bastante mais baratos que os das lojas de artigos para electrónica (e das lojas de jogos nem se fala).
Estes pedais funcionam mas infelizmente nem dão a gama toda de valores nem são consistentes, cada um deles dando valores um pouco diferentes, mesmo ajustando o botão incluído. Por isso tive de adaptar uma linha de código, mudando:
para
Para a direção já correu melhor, um potenciómetro linear deu a gama completa de valores, colocando-o a meio fica a direção "neutra". Foi só uma questão de usar duas tábuas que tinha praí, algumas ferragens e meia dúzia de peças Technic para fazer uma direção ghetto e algumas peças Technic.
O resultado não é mau, até parece que sei conduzir:
Algumas fotos da traquitana:




A direção está uma bela treta mas funciona, pode ser que a consiga melhorar na próxima semana para a mostrar em Oeiras.
Eu tenho há algum tempo um XAC (Xbox Adaptive Controller) que implementa os mesmos controlos do gamepad tradicional mas associados a dispositivos mais orientados para utilizadores com necessidades especiais (por exemplo microswitches que permitem o controlo com o queixo ou sensores de pressão que permitem o controlo com a pressão dos maxilares).
Também tenho interruptores de pedal, microswitches e mais algumas traquitanas de electrónica.
Foi só necessário um update de firmware da Microsoft que implementa BT BLE no XAC para conseguir emparelhá-lo com um hub a correr pybricks e eles já têm no site um script para controlo de carros Technic, inclusive para o Audi RS Q e-tron.
Este script usa os botões "left trigger" e "right trigger" do gamepad para controlar o travão/acelerador (na verdade a velocidade, de um máximo positivo a um mínimo negativo) e o joystick esquerdo para controlar a direção. Na XAC isso corresponde às fichas LT, RT e X1 por isso foi aí que liguei as minhas traquitanas.
A primeira tentativa não correu bem como eu esperava - os "trigger" da Xbox são analógicos e os meus pedais são meros interruptores portanto apenas consegui valores extremos (para a frente ou para trás à máxima velocidade e parado). Mas encontrei na Egitana (uma loja de artigos musicais) pedais analógicos bastante mais baratos que os das lojas de artigos para electrónica (e das lojas de jogos nem se fala).
Estes pedais funcionam mas infelizmente nem dão a gama toda de valores nem são consistentes, cada um deles dando valores um pouco diferentes, mesmo ajustando o botão incluído. Por isso tive de adaptar uma linha de código, mudando:
Código: Selecionar todos
# Drive using the trigger inputs.
brake, acceleration = controller.triggers()
car.drive_power(acceleration - brake)
Código: Selecionar todos
# Drive using the trigger inputs.
brake, acceleration = controller.triggers()
car.drive_power((100 - acceleration)*(100/31) - (100 - brake)*(100/14))
O resultado não é mau, até parece que sei conduzir:
Algumas fotos da traquitana:




A direção está uma bela treta mas funciona, pode ser que a consiga melhorar na próxima semana para a mostrar em Oeiras.