Modular Pythonic Python
Modular Pythonic Python
Este é um projecto que comecei fisicamente no início do Grande Confinamento mas que esteve parado vários anos.
A ideia era fazer um robot modular que se deslocasse de forma semelhante a uma cobra. Com as peças que tinha à mão consegui fazer 3 módulos o que já era suficiente para um comportamento "ziguezagueante" mas a ideia seria depois de estabilizar uma primeira prova de conceito fazer crescer o robot juntando mais módulos.
Infelizmente na altura não havia forma fácil de controlar este robot, precisei de um computador com linux e uma configuração complexa que executava vários scripts de python em simultâneo para controlar cada módulo do robot de forma independente, o que nem era prático nem me permitia crescer o robot no futuro [o meu computador da altura já estava perto do limite com tantos scripts e conexões Bluetooth Low Energy simultâneas].
Mas agora que o Projecto Pybricks já suporta a comunicação entre hubs LEGO de uma forma simples limpei o pó ao robot e pu-lo finalmente a funcionar de forma totalmente autónoma, juntando apenas uma "cabeça" à cobra para controlar os módulos no lugar do computador.
O robot tem assim uma "cabeça" (um hub do tipo City como o usado nos comboios) e um corpo constituído por n "módulos" (por agora apenas 3, assentes no hub do tipo Move como o usado no BOOST):
cada módulo liga-se ao seguinte por intermédio de uma "junta" que tira partido dos dois motores internos do Move Hub para poder fazer movimentos com dois graus de liberdade, embora até agora não tenha sabido dar uso a mais do que um (ou seja, como podem ver no vídeo, apenas faço o robot ziguezaguear segundo um eixo).
A junta em si é neste momento o ponto fraco deste robot, tenho de lhe dedicar mais atenção de modo a ter algo sólido que suporte os movimentos de torção sem se desmontar. Quando/se conseguir esse objectivo então aumento o comprimento do robot adicionando mais módulos já que a forma como o robot está programado permite um número indefenido de módulos, limitado apenas pelas especificidades da norma Bluetooth. Provavelmente algumas dezenas mas para mim ter uma cobra com 6 módulos já seria razoável sem estourar demasiado as finanças (escolhi justamente o Move Hub por ser de longe o mais barato de todos no Bricklink e como já tem dois motores internos ainda me reduzir mais os custos).
A programação é relativamente simples:
- a "cabeça" faz uso da nova funcionalidade de "broadcasting" do Pybricks para enviar constantemente uma sequência de números ("3", "2", "1", "3"...) num canal Bluetooth
- todos os módulos estão à escuta nesse mesmo canal à espera do número que lhes corresponde; quando ele ocorre, acionam os motores de modo a arquear a junta com o módulo seguinte (ou, no caso do primeiro módulo, a junta com a cabeça)
O programa da cabeça:
O programa de cada módulo (neste caso o módulo que reaje ao número "1"):
A ideia era fazer um robot modular que se deslocasse de forma semelhante a uma cobra. Com as peças que tinha à mão consegui fazer 3 módulos o que já era suficiente para um comportamento "ziguezagueante" mas a ideia seria depois de estabilizar uma primeira prova de conceito fazer crescer o robot juntando mais módulos.
Infelizmente na altura não havia forma fácil de controlar este robot, precisei de um computador com linux e uma configuração complexa que executava vários scripts de python em simultâneo para controlar cada módulo do robot de forma independente, o que nem era prático nem me permitia crescer o robot no futuro [o meu computador da altura já estava perto do limite com tantos scripts e conexões Bluetooth Low Energy simultâneas].
Mas agora que o Projecto Pybricks já suporta a comunicação entre hubs LEGO de uma forma simples limpei o pó ao robot e pu-lo finalmente a funcionar de forma totalmente autónoma, juntando apenas uma "cabeça" à cobra para controlar os módulos no lugar do computador.
O robot tem assim uma "cabeça" (um hub do tipo City como o usado nos comboios) e um corpo constituído por n "módulos" (por agora apenas 3, assentes no hub do tipo Move como o usado no BOOST):
cada módulo liga-se ao seguinte por intermédio de uma "junta" que tira partido dos dois motores internos do Move Hub para poder fazer movimentos com dois graus de liberdade, embora até agora não tenha sabido dar uso a mais do que um (ou seja, como podem ver no vídeo, apenas faço o robot ziguezaguear segundo um eixo).
A junta em si é neste momento o ponto fraco deste robot, tenho de lhe dedicar mais atenção de modo a ter algo sólido que suporte os movimentos de torção sem se desmontar. Quando/se conseguir esse objectivo então aumento o comprimento do robot adicionando mais módulos já que a forma como o robot está programado permite um número indefenido de módulos, limitado apenas pelas especificidades da norma Bluetooth. Provavelmente algumas dezenas mas para mim ter uma cobra com 6 módulos já seria razoável sem estourar demasiado as finanças (escolhi justamente o Move Hub por ser de longe o mais barato de todos no Bricklink e como já tem dois motores internos ainda me reduzir mais os custos).
A programação é relativamente simples:
- a "cabeça" faz uso da nova funcionalidade de "broadcasting" do Pybricks para enviar constantemente uma sequência de números ("3", "2", "1", "3"...) num canal Bluetooth
- todos os módulos estão à escuta nesse mesmo canal à espera do número que lhes corresponde; quando ele ocorre, acionam os motores de modo a arquear a junta com o módulo seguinte (ou, no caso do primeiro módulo, a junta com a cabeça)
O programa da cabeça:
O programa de cada módulo (neste caso o módulo que reaje ao número "1"):
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
«De génio, criança e louco... porquê só 1 pouco?»
- Conchas
- Direcção
- Mensagens: 15918
- Registado: 26 jan 2007, 15:20
- Localização: Feijó (Almada)
- Contacto:
Re: Modular Pythonic Python
Tenho ideia que se move um módulo de cada vez e assim é dificil fazer progredir no terreno.
Talvez com os módulos a moverem-se em simultâneo...
Talvez com os módulos a moverem-se em simultâneo...
FCorreia
#EUusoOmeuLUGBULKnosEVENTOSdaPLUG
We are working to build a better
LEGO Fan, a lifelong experience - Play Well (Leg Godt)
#EUusoOmeuLUGBULKnosEVENTOSdaPLUG
We are working to build a better
LEGO Fan, a lifelong experience - Play Well (Leg Godt)
Re: Modular Pythonic Python
Tb acho isso mas era necessário ter mais módulos para poder ter mais a moverem-se em simultâneo. Com 4 por exemplo podia enviar uma sequência "2", "1", "2"... e metade dos módulos dobravam-se para um lado enquanto a outra metade dobrava-se para o outro.
Este tipo aqui, com Arduino e servos RC comuns, usou 12 módulos e implementou o movimento fazendo percorrer uma onda sinusoidal ao longo do corpo. Mas tb usou um par de rodinhas LEGO em cada módulo para reduzir o atrito:
Este tipo aqui, com Arduino e servos RC comuns, usou 12 módulos e implementou o movimento fazendo percorrer uma onda sinusoidal ao longo do corpo. Mas tb usou um par de rodinhas LEGO em cada módulo para reduzir o atrito:
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
«De génio, criança e louco... porquê só 1 pouco?»
Re: Modular Pythonic Python
A cobra cresceu, tem agora 6 módulos mais a cabeça:
reforcei as juntas e diminuí um pouco a velocidade de rotação dos motores de modo a fazer movimentos menos bruscos e assim esforçar menos as juntas pelo que agora não se desfazem nos primeiros 15 segundos (aguentam pelo menos 2 minutos). Desvantagem: muito mais lento.
também alterei um pouco o movimento de modo que em "modo cobra" não tem já a tendência que tinha antes de curvar para a direita. A alteração não tem impacto quando em "modo lagarta".
Cada módulo tem 26.5L de comprimento, 16L de largura e 9L de altura. A cabeça e a cauda (que é puramente decorativa) têm 9L cada. Com 6 módulos a cobra tem já 177L de comprimento (cerca de 142 cm). Para estar em condições de levar à Oeiras BRInCKa 2024 faltam ainda alguns painéis amarelos no 5º e 6º módulo para o corpo ficar homogéneo e se tiver oportunidade vou tentar embelezar a cabeça.
7 hubs significam 42 pilhas AAA... vai ser tramado recarregar tanta pilha em plena exposição.
reforcei as juntas e diminuí um pouco a velocidade de rotação dos motores de modo a fazer movimentos menos bruscos e assim esforçar menos as juntas pelo que agora não se desfazem nos primeiros 15 segundos (aguentam pelo menos 2 minutos). Desvantagem: muito mais lento.
também alterei um pouco o movimento de modo que em "modo cobra" não tem já a tendência que tinha antes de curvar para a direita. A alteração não tem impacto quando em "modo lagarta".
Cada módulo tem 26.5L de comprimento, 16L de largura e 9L de altura. A cabeça e a cauda (que é puramente decorativa) têm 9L cada. Com 6 módulos a cobra tem já 177L de comprimento (cerca de 142 cm). Para estar em condições de levar à Oeiras BRInCKa 2024 faltam ainda alguns painéis amarelos no 5º e 6º módulo para o corpo ficar homogéneo e se tiver oportunidade vou tentar embelezar a cabeça.
7 hubs significam 42 pilhas AAA... vai ser tramado recarregar tanta pilha em plena exposição.
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
«De génio, criança e louco... porquê só 1 pouco?»
Re: Modular Pythonic Python
A cobra desenvolveu uma pele e ganhou uma nova cabeça e nova cauda:
A menos que arranje alguma ideia para a cabeça não devo mexer mais, agora é tentar melhor o movimento o que vai requer alguma experimentação com a programação e muitas horas a recarregar pilhas.
A menos que arranje alguma ideia para a cabeça não devo mexer mais, agora é tentar melhor o movimento o que vai requer alguma experimentação com a programação e muitas horas a recarregar pilhas.
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
«De génio, criança e louco... porquê só 1 pouco?»
Re: Modular Pythonic Python
Agora só falta fazer a parte mais fácil: sempre que a pitão colide com um objecto que não uma parede ou ela própria, esse objecto desaparece e ela ganha mais um segmento.
Re: Modular Pythonic Python
bora lá - se fizeres um Nokia à escala eu faço essa tal de parte mais fácil
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
«De génio, criança e louco... porquê só 1 pouco?»
Re: Modular Pythonic Python
Não, obrigado: eu só colecciono Siemens.
Re: Modular Pythonic Python
Pequenas alterações:
- aumentei um pouco a cabeça, estava a "chocalhar" violentamente
- segui a sugestão do @AVCampos e mandei vir dois olhos Dreamzz
- acrescentei uma língua
- coloquei 4 "stud boats" em cada módulo para reduzir um pouco o atrito
a pitão tem agora 220.5 unidades de comprimento (cerca de 176 cm)
- aumentei um pouco a cabeça, estava a "chocalhar" violentamente
- segui a sugestão do @AVCampos e mandei vir dois olhos Dreamzz
- acrescentei uma língua
- coloquei 4 "stud boats" em cada módulo para reduzir um pouco o atrito
a pitão tem agora 220.5 unidades de comprimento (cerca de 176 cm)
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
«De génio, criança e louco... porquê só 1 pouco?»