O relatório a seguir consolida a evolução do projeto na segunda entrega.
A Fase 2 compreende a correção e parametrização do mundo inclinado, a definição lógica da área da meta (onde o experimento termina), a aquisição do estímulo da aceleração e a aquisição do estímulo da maraca, a implementação inicial da rede plástica de quatro neurônios como uma primeira versão das equações envolvidas e sua integração ao modo LEARNING da simulação (neste ponto para validação de acoplamento à simulação somente), a telemetria experimental e a geração de artefatos a cada execução também fazem parte dessa entrega. A forma final da rede neural plástica e do protocolo de aprendizagem deverá ser assunto central da Fase 3.
No estado atual, a implementação de engenharia e o fluxo experimental estão concluídos mas as execuções realizadas neste ponto ainda têm caráter exploratório: demonstram o funcionamento do sistema mas não constituem um experimento controlado nem evidência suficiente para atribuir o comportamento observado à plasticidade neural.
Está nos planos a implementação na Fase 3 de um modo de disparo não supervisionado de um conjunto de simulações que permita variar determinados parâmetros e comparar o resultado do conjunto de experimentos, isso será um facilitador para estudar impacto de diferentes plasticidades neurais, mais detalhes na seção Sugestão de experimento para a Fase 3.
O experimento e a simulação até este ponto foram criados com reprodutibilidade ampla em mente, mais detalhes na seção Apêndice A - Guia de reprodução. O código integral do projeto está disponível em https://github.com/lnncrs/DomanNeurocomputationalModel
Como o relatório ficou extenso mesmo após repetidas remoções de conteúdo, e uma boa parte dele foi somente modificada do relatório 1, tomei a liberdade de marcar trechos com informação realmente nova ou de especial interesse para a entrega da Fase 2 com MARCADOR DE TEXTO. Uma leitura rápida do relatório pode ser feita apenas com a leitura dos trechos marcados.
Um vídeo com uma rodada de simulação e uma breve introdução as novas funcionalidades está em https://youtu.be/twNaPXXH5lA
Lenin Cristi
CMCC - Universidade Federal do ABC (UFABC) Santo André - SP - Brasil
lenin.cristi@aluno.ufabc.edu.br
Resumo. Este trabalho tem como objetivo a reprodução computacional e robótica do experimento Doman's Inclined Floor Method for Early Motor Organization Simulated with a Four Neurons Robot (2011) de Ropero Peláez e Lucas Santana, no qual um robô controlado por uma rede neural plástica de quatro neurônios aprende a organizar seu comportamento motor em um plano inclinado, inspirado no método de estimulação motora precoce de Glenn Doman.
- Resumo
- Objetivo do Projeto
- Introdução
- O experimento original
- A rede neural utilizada
- Mapeamento motor
- Sensoriamento
- Metodologia
- Estratégia incremental de construção e validação
- Simulação de mundo
- Desenvolvimento
- Estado do projeto ao final da Fase 2
- Execução de uma simulação
- Mapeamento detalhado dos modos de controle
- Funções e equações
- Parâmetros experimentais
- Parâmetros da rede neural
- Parâmetros do protocolo de aprendizagem
- Parâmetros do mundo Webots
- Parâmetros do robô e dos sensores
- Conclusão
- Referências
- Apêndices
- Apêndice A - Guia de reprodução
- Requisitos de software
- Requisitos de hardware
- Instalação de GCC, G++ e make
- Instalação do Git
- Clonagem do repositório
- Instalação do Webots
- Ambiente Python recomendado com uv
- Alternativa com pip
- Alternativa com conda
- Editor e extensões opcionais
- Validação do ambiente
- Lista mínima de verificação
- Apêndice B - Estrutura do repositório
- Arquivos de configuração na raiz
- Código-fonte do modelo
- Estrutura da simulação Webots
- Documentação, exemplos e validação
- Testes automatizados
- Apêndice C - Evolução histórica da simulação
- Simulação de física
- Simulação de colisão do robô
- Simulação de controle
- Apêndice D - Localização e configuração dos parâmetros
- Parâmetros da rede neural
- Parâmetros do protocolo de aprendizagem
- Parâmetros do mundo Webots
- Parâmetros do robô e dos sensores
- Apêndice A - Guia de reprodução
Este trabalho tem como objetivo a reprodução computacional e robótica do experimento Doman's Inclined Floor Method for Early Motor Organization Simulated with a Four Neurons Robot (2011) de Ropero Peláez e Lucas Santana, no qual um robô controlado por uma rede neural plástica de quatro neurônios aprende a organizar seu comportamento motor em um plano inclinado, inspirado no método de estimulação motora precoce de Glenn Doman.
A implementação original foi realizada utilizando LEGO Mindstorms NXT em MATLAB e dependia de sensores e estímulos relacionados à aceleração, à visão e ao som, representados respectivamente por um mecanismo de detecção de aceleração, por um sensor de luz apontado para a rampa listrada para detectar transições e por um microfone captando o som de uma maraca na meta. Este projeto desenvolve uma versão reproduzível do experimento utilizando uma linguagem multiparadigma flexível e uma arquitetura modular de sensoriamento e controle. O código integral do projeto está disponível em https://github.com/lnncrs/DomanNeurocomputationalModel
A reconstrução foi conduzida deliberadamente de forma incremental, separando a modelagem do mundo, a validação da física neste mundo, a construção do robô e sua instrumentação com sensores, a interface de controle do Webots e por fim sua integração com a rede neural.
Essa organização permitiu testar isoladamente cada componente em cada camada antes de integrá-lo ao experimento completo, reduzindo a dificuldade de identificar falhas e aumentando a reprodutibilidade do sistema. Nesta fase no entanto, foram integrados somente os estímulos de aceleração e som, enquanto o canal visual permanece previsto, mas desativado.
Foram criados ambientes de simulação do Webots versionados em `webots\worlds`, sendo o principal deles o `webots\worlds\experiment_inclined_plane.wbt` já integrado a uma primeira tentativa de rede neural recorrente e plástica de quatro neurônios. Este ambiente simula o plano inclinado, a meta, o robô e os estímulos de aceleração e som, permitindo a execução de experimentos controlados:Imagem: Simulador pronto para o experimento
Esta simulação conta também com tela de acompanhamento do experimento com telemetria detalhada dos sensores, experimento, controle e motor, o estímulo de uma maraca sintética que premia deslocamento para a meta inspirada no artigo é visível e o registro detalhado das execuções é salvo:Imagem: Tela de acompanhamento da telemetria do robô
Os objetivos centrais do experimento original são:
-
Simular condições de aprendizado motor infantil;
-
Observar o surgimento de comportamento emergente;
-
Analisar, a partir desse comportamento, possíveis paralelos com processos de neuroplasticidade.
Nota: Neste ponto entendemos que a simulação, o robô e mesmo o aprendizado são tratados como meios e não como objetivos fim.
Antes da construção do projeto, foi imprescindível realizar uma leitura detalhada do artigo que descreve o experimento original Doman's Inclined Floor Method for Early Motor Organization Simulated with a Four Neurons Robot (2011), também disponível no repositório em docs\Testing the inclined plane technique with a four neurons robot.pdf.
Essa leitura revelou um ponto fundamental sobre o experimento: o objetivo do experimento não era simplesmente fazer o robô aprender a se locomover, mas sim utilizar uma arquitetura robótica e neural simples para investigar como estímulos sensoriais e determinados mecanismos de plasticidade poderiam contribuir para a organização inicial do comportamento motor.
O experimento procura reproduzir, de maneira simplificada, alguns elementos presentes no método do plano inclinado de Doman:
-
aceleração produzida durante o movimento sobre o plano inclinado, como analogia ao estímulo vestibular;
-
transições visuais geradas pelas faixas pretas e brancas da rampa;
-
estímulo sonoro produzido por uma maraca após movimentos descendentes em direção a meta;
-
ambiente físico formado pelo plano inclinado;
-
sistema neural simples, composto por quatro neurônios plásticos interconectados.
Inicialmente, o robô não possui uma direção preferencial. Quando uma sequência de comandos motores produz um movimento descendente, a ação da gravidade resulta em maior aceleração e em transições mais rápidas entre as faixas visuais da rampa. Além disso, o movimento descendente é seguido pelo estímulo sonoro da maraca. Esses estímulos influenciam os mecanismos de plasticidade sináptica e intrínseca, favorecendo a formação de sequências neurais associadas ao deslocamento sobre a rampa. No artigo, considera-se que o robô aprendeu quando executa movimentos na mesma direção durante cinco iterações consecutivas.
O modelo não pretende reproduzir integralmente o sistema nervoso infantil ou demonstrar diretamente como uma criança aprende a se locomover. Ele constitui uma analogia computacional controlada, utilizada para observar a relação entre estímulos sensoriais, plasticidade e organização motora e, a partir dela, formular hipóteses sobre processos envolvidos na aquisição inicial do movimento.
Assim, o aprendizado do robô não constitui o objetivo final do experimento, mas um meio para investigar, em um sistema simplificado e controlável, como estímulos sensoriais e mecanismos de plasticidade podem participar da organização do comportamento motor.
O artigo descreve uma rede totalmente interconectada composta por quatro unidades neuronais excitatórias do tipo rate-code. Cada neurônio recebe a soma dos estímulos sensoriais e sinais provenientes da atividade anterior dos demais neurônios e de sua própria conexão recorrente. Um mecanismo de competição mantém ativo apenas o neurônio mais ativado (maior saída sigmoidal) em cada iteração.Nota: A implementação apresentada aqui é uma primeira tentativa de reproduzir a apresentada no artigo, assim como leituras subsequentes do artigo levaram a correção do mecanismo de locomoção de diferencial para por eixos, a rede será revista.
A arquitetura possui quatro conexões recorrentes, cada uma ligando um neurônio a si mesmo, cujos pesos são mantidos fixos em 0,7. As doze conexões entre neurônios diferentes possuem pesos modificáveis ou plásticos.
| Recebe de / Saída de | N1 | N2 | N3 | N4 |
|---|---|---|---|---|
| N1 | 0,7 | w₁₂ | w₁₃ | w₁₄ |
| N2 | w₂₁ | 0,7 | w₂₃ | w₂₄ |
| N3 | w₃₁ | w₃₂ | 0,7 | w₃₄ |
| N4 | w₄₁ | w₄₂ | w₄₃ | 0,7 |
Tabela: Conexões neuronais na rede
Sendo:
-
$w_{12}$ : conexão de N2 para N1 -
$w_{21}$ : conexão de N1 para N2 - Os valores
0,7na diagonal representam as conexões autorrecorrentes fixas.
Esses neurônios continuam sendo modelos artificiais, mas diferem daqueles empregados em muitas redes neurais convencionais: Não há camadas profundas, função de perda, dados rotulados ou retropropagação de erro.
A adaptação ocorre a partir do retorno sensorial produzido pelas consequências das ações do robô, que modula a atividade neuronal e, indiretamente, as alterações sinápticas.
A pequena quantidade de neurônios torna possível acompanhar diretamente os pesos, as ativações, os neurônios vencedores e as sequências motoras produzidas. Essa interpretabilidade é uma propriedade útil da arquitetura, embora o artigo não afirme explicitamente que a escolha de quatro neurônios tenha sido determinada exclusivamente por esse objetivo.
O modelo não pretende reproduzir toda a complexidade de um sistema neural biológico. Ele representa uma estrutura computacional simplificada, utilizada para investigar como plasticidade, competição e feedback sensorial podem contribuir para a organização progressiva do comportamento motor.
No robô virtual, cada roda possui um motor independente. Para preservar a organização funcional do experimento original, o adaptador do modo `LEARNING` agrupa esses motores em conjuntos frontal e traseiro. Cada neurônio corresponde assim a uma primitiva motora e a competição mantém apenas um neurônio ativo por iteração, o modelo neural conhece apenas as ações abstratas e a conversão para os quatro motores do robô é feita por um adaptador.Nota: Numa primeira visita a aula Modelagem de redes bioinspiradas. Prof. Javier Ropero Peláez (UFABC) disponível em https://www.youtube.com/watch?v=j9ElSxpLWzw acredito que este modelo pode ser considerado fenomenológico (porque não modelamos detalhadamente canais ionicos, potenciais, membranas etc) e frequencial pela característica de taxa de disparo usada
| Neurônio | Primitiva motora |
|---|---|
| N1 | conjunto frontal, sentido horário |
| N2 | conjunto frontal, sentido anti-horário |
| N3 | conjunto traseiro, sentido horário |
| N4 | conjunto traseiro, sentido anti-horário |
Tabela: Tradução das ações abstratas em primitivas motoras
Imagem: Closeup no robô onde se vêem os dois eixos frontal / traseiro em perspectiva
Nota sobre a implementação atual: O retorno de aceleração é calculado a partir da variação da aceleração longitudinal medida durante cada janela motora. O retorno do estímulo sonoro da maraca é produzido sinteticamente quando existe redução da distância até a área retangular da meta e ela é suficiente para que o movimento seja classificado como descendente. Portanto, a implementação atual não utiliza um par físico de microfone e alto-falante e o canal visual de detecção de listras permanece não implementado nesta etapa. Esses mecanismos serão detalhados nas seções de funções, equações e protocolo experimental.
O robô usado como base é do tutorial do Webots preservado em `webots\tutorials\4_wheels_robot.wbt`, ele foi adaptado e ganhou 4 sensores de proximidade externos adicionais em cada direção, teve mantido os sensores de proximidade frontais diagonais originais e recebeu os seguintes sensores adicionais não visíveis:Nota histórica: Nas primeiras versões da simulação, o mapeamento
neuronios → movimentofoi interpretado incorretamente como uma configuração diferencial entre os lados esquerdo e direito. A releitura do artigo levou à correção do modoLEARNINGpara a organizaçãoneuronios → movimentopara os eixos frontal/traseiro em sentido horário e anti-horário. Os modos manual de controleMANUALe automático anti colisãoAUTOMATICcontinuam utilizando controle diferencial e não foram afetados por essa mudança.
- Acelerômetro
- Giroscópio
- GPS
- Bússola
Imagem: Closeup no robô onde se vêem os sensores de proximidade originais e adicionais (somente estes são visíveis)
A reconstrução do experimento envolve componentes interdependentes:
- o ambiente inclinado;
- a dinâmica física;
- a estrutura do robô;
- os sensores embarcados;
- os estímulos externos;
- o controle motor;
- a rede neural.
Alterações nestes elementos podem modificar o comportamento observado e, consequentemente, dificultar a identificação da origem de falhas. No experimento original, a estrutura robótica foi construída com LEGO Mindstorms NXT, enquanto a rede neural e os comandos sensório-motores foram implementados em MATLAB por meio da RWTH Mindstorms NXT Toolbox. A reprodução direta dessa estrutura em uma nova plataforma física exigiria que problemas mecânicos, eletrônicos, sensoriais e computacionais fossem tratados simultaneamente.
Para reduzir a chance de falha não identificada ou não rastreável, foi adotada uma estratégia incremental em camadas. Cada componente é construído e validado de forma isolada e, posteriormente, integrado aos demais. Essa abordagem permite distinguir problemas relacionados ao ambiente, à física, ao robô, ao controle e ao modelo neural.
A simulação foi utilizada como ambiente inicial de desenvolvimento porque permite:
- controlar as condições experimentais;
- repetir ensaios sob configurações equivalentes;
- observar diretamente posições, velocidades, acelerações e comandos motores;
- testar componentes isoladamente;
- reduzir o custo de alterações mecânicas;
- registrar de forma sistemática as variáveis de cada execução.
A construção de um robô físico foi mantida como uma etapa posterior à validação do comportamento no ambiente simulado. O núcleo neural e o protocolo experimental foram separados da interface do simulador para favorecer sua reutilização futura.
Para evitar confusão com as fases de entrega e documentação do projeto, os cinco blocos de desenvolvimento são tratados neste relatório como etapas técnicas de implementação.Nota: Por mais que a estrutura em camadas favoreça o reuso de código, uma implementação física ainda exigirá um adaptador específico para os sensores, motores, unidades de medida e restrições temporais da plataforma escolhida.
| Etapa | Escopo | Estado ao final da Fase 2 |
|---|---|---|
| 1 - Ambiente | Construção dos planos inclinado e horizontal e validação de sua geometria | concluída |
| 2 - Física | Testes de gravidade, colisão, contato com a rampa e comportamento de sólidos | concluída |
| 3 - Robô | Modelagem do corpo, das rodas, dos motores, das juntas e dos sensores | concluída |
| 4 - Controle e instrumentação | Implementação dos modos de controle MANUAL e AUTOMATIC, telemetria e aquisição das variáveis experimentais |
concluída |
| 5 - Integração neural | Implementação da rede inicial de quatro neurônios e integração ao modo LEARNING |
integração concluída validação pendente |
Tabela: Completude técnica do projeto
Nota: Na etapa técnica 4, foi necessário implementar dois modos adicionais de controle não previstos:
PASSIVE_FREEePASSIVE_REALISTIC. No primeiro, o torque disponível dos motores é desativado, deixando as rodas livres. No segundo, o torque disponível é limitado a 0,03 N·m por roda, representando uma pequena resistência dos motores. Esses modos foram imprescindíveis para testar o deslizamento e a influência da gravidade sobre o robô nos planos inclinados.
A conclusão de uma etapa técnica indica que seus componentes essenciais estão implementados e funcionalmente integrados.
Para a simulação, foi realizada uma pesquisa na qual foram considerados dois ambientes principais: Webots e PyBullet. O Webots foi escolhido por oferecer maior capacidade de representar motores, atuadores e sensores de maneira próxima a uma implementação física, dentro de um ambiente integrado de simulação. A plataforma também oferece suporte a controladores em Python, C e C++, além de uma biblioteca de mundos e componentes reutilizáveis.
Os principais motivos para a escolha do Webots foram:
- modelagem integrada de sensores, motores e atuadores;
- suporte a controladores em Python, C e C++;
- simulação da interação entre corpos, juntas e superfícies;
- biblioteca de mundos e componentes reutilizáveis;
- proximidade conceitual com uma futura implementação física.
Um ponto importante do Webots é permitir o desenvolvimento inicial dos controladores em Python, oferecendo maior flexibilidade para a implementação e validação do modelo neural. A plataforma também suporta controladores em C e C++, o que amplia as possibilidades de integração com outras plataformas e de futuras adaptações para hardware físico.
A implementação foi organizada de forma que o modelo neural e o protocolo experimental não dependam diretamente dos detalhes internos do robô simulado. Essa separação favorece a reutilização do núcleo do sistema, embora uma implementação física ainda exija um adaptador específico para os sensores, motores, unidades de medida e restrições temporais do hardware escolhido.Imagem: Plano half-size não inclinado utilizado em testes
A biblioteca de mundos, objetos e exemplos disponibilizada pelo Webots parcialmente preservada em webots\tutorials também foi um fator relevante para a escolha, pois forneceu referências para a construção inicial dos ambientes, das juntas, dos sensores e dos controladores utilizados no projeto.
O projeto foi desenvolvido com ferramentas abertas e organizado para favorecer a reprodução dos experimentos.
O Webots é utilizado para a simulação física, enquanto Python implementa a rede neural, a integração com o controlador e a geração dos artefatos de cada execução. As dependências de sistema como o gcc e o make bem como dependências Python estão integralmente mapeadas no apêndice.
Uma listagem preliminar do software utilizado é a que segue:
-
Plataformas Windows e Linux suportadas com instruções disponíveis para ambas pois a reprodução dos experimentos é agnóstica a sistema operacional.
-
Ferramentas Git para clonar e operar o repositório de projeto;
-
O Webots R2025a para rodar as simulações;
-
Compilador gcc com make e sh disponíveis pois é utilizado pelo Webots R2025a quando da criação das bibliotecas de controllers e plugins;
-
Ambiente uv recomendado, mas pode-se usar pip ou conda;
-
Python 3.13 fornecido pelo ambiente de escolha acima;
-
Uma validação da rede com dados sintéticos usa um notebook Jupyter, adicionalmente numpy, pandas e matplotlib são recomendados;
-
Os testes automatizados usam pytest;
O fluxo experimental completo já produz telemetria, registros por iteração, metadados, resumos e relatórios HTML. Os testes automatizados validam os componentes de software, e as execuções exploratórias demonstram que o robô consegue completar o percurso.
Esses resultados confirmam a integração do sistema somente, ainda não é possivel atribuir o comportamento observado (de fato o carrinho desce a rampa) à plasticidade neural, a rampa do artigo é deliberadamente e levemente escorregadia, e isso foi reproduzido fielmente no ambiente simulado. Portanto, é necessário simular diferentes aderências da rampa para excluir o deslizamento como causa chave da descida. Em outras palavras, a ativação da maraca confirma que a ação foi classificada como descendente pelo protocolo, entretanto, ela não constitui evidência de aprendizagem, pois é produzida deterministicamente a partir dessa mesma classificação.
Uma lista com capacidades chave do projeto funcionais nesta fase é a que segue:
- Mapas webots foram criados em separado dos artefatos de robô, que por sua vez tem sensoriamento embarcado independente do mapa, isso pode permitir reutilizacao do robô e da rede gerada em diferentes mapas, e no futuro medição da robustez do treinamento por exemplo, treinando num mapa e testando num outro;
- Area de meta criada em verde para fácil identificacao (essa cor é usada no projeto só na meta), desacoplada e parametrizada para facilitar o reuso em diferentes mapas;
- Robô com suporte a diferentes modos e controle incluindo modo manual por joystick;
- Variaveis de simulacao e experimento identificadas;
- Tela interativa de acompanhamento da simulacao com telemetria e dados de treinamento em tempo real;
- Geração de metadados e logs do experimento em JSONL acompanhados de um relatório HTML com detalhes da rede gerada;
Nota: Existe duplicidade na entrega do parâmetro da meta e do controlador, pois os dois tem de receber a localização da meta, será removida no futuro
Uma sugestão de conjunto de experimentos para a Fase 3 é a que segue:Nota: As variáveis e parâmetros do experimento estão mapeadas mas não centralizadas, elas serão centralizadas e completamente desacopladas (possivelmente em locais distintos) no futuro
| Condição | Plasticidade sináptica | Plasticidade intrínseca | Estímulos |
|---|---|---|---|
| Rede completa | ligada | ligada | aceleração + som |
| Sem plasticidade | desligada | desligada | aceleração + som |
| Apenas sináptica | ligada | desligada | aceleração + som |
| Apenas intrínseca | desligada | ligada | aceleração + som |
| Sem som | ligada | ligada | aceleração |
| Controle motor aleatório | não aplicável | não aplicável | — |
| Deslizamento passivo | motores passivos | não aplicável | — |
- várias seeds;
- mesma posição inicial ou conjunto controlado de posições;
- mesma orientação inicial;
- mesma condição de atrito;
- limite máximo de iterações;
- número de chegadas à meta;
- iterações até critério;
- proporção de descidas;
- tempo até a meta;
- evolução dos pesos;
- evolução dos shifts.
Durante a Fase 2 foram utilizadas ferramentas de inteligência artificial como apoio à implementação, refatoração e documentação.Nota: O conjunto de experimentos e dúvida acima é apenas uma sugestão, a definição final do protocolo experimental será discutida com o orientador na Fase 3.
O nível de participação dessas ferramentas não foi uniforme entre os componentes do projeto, e foi selecionado como critério de uso a natureza do componente e a necessidade de compreensão científica do mesmo. A tabela a seguir resume a participação da IA em cada categoria de componente:
| Categoria | Exemplos | Uso da ferramenta | Validação realizada |
|---|---|---|---|
| Mundo e robô no Webots (Fase 1) | Mapas, artefatos | - | - |
| Mundo e robô no Webots (Fase 2) | Mapas, artefatos | Apoio pontual à edição | Inspeção visual e testes físicos no simulador |
| Texto | Relatório, documentação e README | Revisão linguística e estrutural | Revisão integral pelo autor |
| Núcleo neural inicial (Fase 2) | equações, estímulos, plasticidade, competição e critério de aprendizagem | Apoio à implementação e revisão | Comparação das equações com o artigo, inspeção ou refatoração do código |
| Integração experimental | Webots, sensores, motores, cálculo de deslocamento e runtime | Apoio à implementação e refatoração | Testes de sensores, motores, telemetria, dirigibilidade, física da simulação |
| Plugin de telemetria | Janela de telemetria | Maior apoio na geração inicial | Revisão do código e conferência dos arquivos produzidos |
| Artefatos auxiliares | Log e relatório de experimentos, coleta de telemetria, testes unitários | Maior apoio na geração inicial | Revisão do código e conferência dos arquivos produzidos |
Nota: Não obstante, mesmo os componentes com maior participação assistida podem ser reescritos ou suprimidos, isso será objeto de discussão com o orientador para a Fase 3, quando da implementação do experimento formal em hardware (o que pode exigir reescrita da rede em C ou C++) e o foco passar a ser a análise dos resultados. Ressaltando que as ferramentas não foram utilizadas como fonte científica.
Os mundos iniciais do Webots e os protótipos desenvolvidos durante a Fase 1 tiveram de ser integralmente construídos manualmente, a partir da exploração dos tutoriais, montagem progressiva dos objetos e testes de colisão, física e elasticidade realizados no simulador.
Isso ocorreu porque os modelos de linguagem (LLMs) curiosamente (ou especificamente por serem decoders baseados na arquitetura Transformers) não tinham ou não têm qualquer capacidade de raciocínio espacial, mesmo em tarefas simples como gerar ou unir dois cubos num plano, adicionar uma junta de rotação a um cubo ou mesmo incluir uma superfície com colisão a um plano.
Foram necessárias várias visitas à documentação para sistemas simples como juntas e juntas de rotação. Isso é perceptível na extensa biblioteca legada de mundos preservadas com propósito de referência e histórico.
Os controles iniciais do Webots em C, C++ e Python igualmente tiveram de ser adaptados diretamente dos tutoriais fornecidos com montagem progressiva dos objetos e de testes realizados no simulador.
Já na Fase 2, as mesmas ferramentas assistivas foram capazes de fazer ajustes finos nestes elementos, como por exemplo unir superficies levemente desniveladas, adicionar sensores e alterar parâmetros de física, acredito que o contexto gerado pelos arquivos Webots e Proto válidos no repositório fez com que a assistência de IA fosse capaz de fazer estes ajustes não possíveis para ela na Fase 1.
Imagem: Exemplo de ajuste fino na simulação que antes era impossível para a LLM, deixado deliberadamente incompleto na simulação para ser usado aqui como exemplo
A seguir é descrito como iniciar uma simulação e interagir com o ambiente.Nota: É necessário montar o ambiente de desenvolvimento como descrito no apendice Guia de reprodução antes de iniciar a simulação
Após validar o ambiente de simulação:
-
Conecte o controle compatível.
-
Inicie o Webots a partir do terminal associado ao ambiente Python configurado para a simulação.
Imagem: Icone do webots na bandeja do sistema
-
Abra o mundo
webots/worlds/experiment_inclined_plane.wbt. -
Inicie ou reinicie a simulação no botão "play".
-
Abra a janela de telemetria do experimento clicando com o botão direito do mouse sobre o item "InclinedFourWheelRobot" e depois em "Show Robot Window"
Imagem: Localização do comando de abertura da janela de telemetria
- Observe a abertura de uma janela no browser como esta:
Imagem: Topo da janela de telemetria
Nota: O mundo integrado inicia em
PASSIVE_REALISTIC, conforme seuscontrollerArgsportanto, apenas iniciar a simulação não ativa automaticamente o aprendizado. Na implementação atual, a seleção deLEARNINGé feita pelo controle.
- Pressione o botão do modo desejado no controle (exemplo: A para
AUTOMATIC, B paraMANUAL, Y paraLEARNING).
Imagem: Diagrama do mapeamento dos botões para o joystick modelo Xbox One S
Nota: A matriz de mapeamento é aberta para adaptar outros controles e existe retorno dos botoes pressionados no console do Webots o que facilita portar para outros controles, será adicionado suporte a teclado no futuro
- Acompanhe no console e na telemetria a ação selecionada, estado do experimento, sensores de proximidade, motores e sensores internos.
Imagem: Sessão da telemetria correspondente ao estado do experimento
- Somente no modo
LEARNING: Cada simulação de aprendizagem gera um diretório dentro deexperiments/runs:
experiments/runs/learning_{timestamp_UTC}_{seed}/
Esse diretório contém:
-
metadata.json, com a configuração neural, experimental e de runtime; -
iterations.jsonl, com um registro estruturado para cada iteração; -
summary.json, com o resultado consolidado da execução; -
report.html, com a visualização derivada dos registros.
Os arquivos de uma rodada devem permanecer juntos, pois o relatório HTML e o resumo são derivados dos mesmos metadados e registros por iteração.
Imagem: Topo do relatório HTML gerado numa rodada
Imagem: Sessão do relatório com o esboço da rede gerada
Nota: Assim como a rede o relatório neste ponto do desenvolvimento é fornecido como funcionalidade em beta
| Modo | Acionamento no joystick | Descrição |
|---|---|---|
AUTOMATIC |
botão A, ao completar o ciclo dos modos passivos; ou botão START, ao sair da parada de emergência | Executa o controle automático de desvio de obstáculos. Utiliza os sensores de proximidade e controle diferencial das rodas. Também é o modo inicial quando nenhum modo é informado nos argumentos do controlador. |
MANUAL |
botão B | Permite conduzir o robô manualmente pelo direcional digital (D-pad). Ao soltar o direcional, as rodas recebem velocidade zero. |
PASSIVE_FREE |
botão A, a partir de AUTOMATIC |
Desativa o torque disponível dos quatro motores, deixando as rodas livres para os testes de deslizamento e ação da gravidade. |
PASSIVE_REALISTIC |
botão A, a partir de PASSIVE_FREE |
Mantém as rodas sem comando de movimento, mas limita o torque disponível a 0,03 N·m por roda, representando uma pequena resistência dos motores. |
LEARNING |
botão Y | Ativa o protocolo experimental controlado pela rede neural. Cada neurônio vencedor seleciona uma das quatro primitivas motoras, enquanto sensores, estímulos, plasticidade e telemetria são atualizados a cada janela de ação. |
EMERGENCY_STOP |
botão X | Interrompe imediatamente os comandos motores e mantém todas as velocidades em zero. Enquanto esse modo estiver ativo, os demais botões de seleção são ignorados. |
Tabela: Modos de controle do robô
O botão A percorre ciclicamente os modos:
AUTOMATIC
→ PASSIVE_FREE
→ PASSIVE_REALISTIC
→ AUTOMATIC
| Função ou equação | Finalidade | Origem |
|---|---|---|
| normalização e soma sensorial | transformar e combinar aceleração, visão e som | soma sensorial descrita no artigo; normalização aplicada |
| ativação, saída sigmoidal e competição | calcular a atividade e selecionar o neurônio vencedor | sigmoide correspondente à equação 3 do artigo; ativação e competição adaptadas |
| plasticidade sináptica | atualizar os pesos entre neurônios diferentes | equação 2 do artigo |
| plasticidade intrínseca | atualizar o deslocamento da função sigmoidal | equação 4 do artigo |
| distância, deslocamento e classificação | medir a aproximação à meta e classificar o movimento | não apresentada como equação no artigo, mas imediata |
| aceleração, maraca e critérios | agregar o estímulo, produzir o estímulo e registrar aprendizagem | critério descrito no artigo; agregação e critério adicional adaptados |
As tabelas seguintes registram os valores efetivamente utilizados na configuração atual. Parâmetros classificados como hipótese deverão ser avaliados nos ensaios formais.Nota: Com uma implementação inicial das equações definidas, a complexidade de adaptá-las é consideravelmente menor
Nota: A localização dos campos, constantes e argumentos correspondentes está documentada no Apêndice D - Localização e configuração dos parâmetros.
| Parâmetro | Valor | Origem |
|---|---|---|
| número de neurônios | 4 | artigo |
| peso recorrente | 0,7 | artigo |
| ganho sigmoidal | 25 | artigo |
| pesos não diagonais iniciais | uniforme entre 0,1 e 0,9 | hipótese |
taxa sináptica epsilon |
0,01 | hipótese |
taxa intrínseca xi |
0,01 | faixa publicada |
| deslocamento inicial | 0,5 | hipótese |
| competição | determinística | hipótese operacional |
| escopo da plasticidade | winner_only |
hipótese operacional |
| fonte da plasticidade intrínseca | saída após competição | hipótese operacional |
| desvio do ruído de ativação | 0,0 | desativado |
| limites adicionais dos pesos | nenhum | não publicado |
| seed da configuração integrada | 42 | reprodutibilidade |
Na execução integrada, somente a seed neural é exposta como argumento do controlador. Os demais valores utilizam a configuração padrão da rede.
| Parâmetro | Valor atual |
|---|---|
| duração nominal da ação | 0,5 s |
velocidade das rodas no modo LEARNING |
3,0 rad/s |
| limiar de movimento estacionário | 0,005 m |
| intensidade sonora da maraca | 0,1 |
| escala da aceleração | 1,0 |
| entrada visual | 0,0 |
| movimentos consecutivos para o critério | 5 |
| sinal usado para representar descida | -1 |
Nota: O canal visual permanece desativado. O sinal negativo usado para descida decorre do cálculo
distância final - distância inicial, pois a aproximação da meta (não necessariamente ao centro dela) reduz a distância.
| Parâmetro | Valor atual |
|---|---|
| versão dos arquivos Webots | R2025a |
| passo básico do mundo | 16 ms |
| passo do controlador | 64 ms |
| seed do mundo | 42 |
| inclinação da rampa | 12 graus (0,20943951023932 rad) |
| plataforma de chegada | 1 x 1 m |
| rampa | 2 x 1 m |
| altura dos guardrails | 0,1 m |
| espaçamento das faixas | 0,1 m |
| largura das faixas | 0,01 m |
| largura da linha de chegada | 0,02 m |
| área lógica da meta | 0,96 x 0,96 x 0,30 m |
| permanência configurada na meta | 0,5 s; o modo LEARNING atual conclui na entrada |
Nota: A seed do mundo é independente da seed neural. O ângulo deve permanecer igual no plano e no robô. A área da meta está representada tanto no mundo quanto nos argumentos do controlador e os valores devem permanecer sincronizados. Embora a permanência esteja configurada em
0,5 s, o runtime do modoLEARNINGatualmente encerra a execução na entrada da área.
Gravidade, atrito e alguns parâmetros de contato permanecem herdados dos defaults do Webots.
| Parâmetro | Valor atual |
|---|---|
| dimensões do corpo | 0,20 x 0,10 x 0,05 m |
| rodas e motores | 4 |
| raio da roda | 0,04 m |
| espessura da roda | 0,02 m |
| densidade configurada do corpo | 1000 kg/m3 |
| distância inicial ao longo da rampa | 1,45 m |
| torque do modo passivo realista | 0,03 N.m por roda |
| instrumentação | acelerômetro, giroscópio, GPS e bússola |
| sensores de proximidade disponíveis | frontal diagonal esquerdo, frontal diagonal direito, frontal, traseiro, esquerdo e direito |
| posição usada no protocolo | GPS |
| aceleração usada na rede | componente longitudinal do acelerômetro |
| som usado na rede | estímulo lógico, sem microfone ou alto-falante |
Durante uma simulação, a rede seleciona as ações motoras, o deslocamento do robô é observado e classificado, e os estímulos de aceleração e maraca retornam como entrada para a iteração seguinte. Ao mesmo tempo, a simulação registra os parâmetros utilizados, o estado da rede, os neurônios vencedores, as ações executadas e os critérios de aprendizagem. Esses dados são preservados em artefatos estruturados e em um relatório HTML, tornando possível acompanhar o experimento e posteriormente comparar diferentes execuções.
As execuções exploratórias realizadas também demonstram que o fluxo completo está funcional e que o robô consegue percorrer o plano inclinado e alcançar a meta, no entanto é cedo para afirmar que o comportamento observado foi produzido especificamente pela plasticidade neural. A gravidade, as condições iniciais, a sequência aleatória de ações e os parâmetros da simulação também podem contribuir para o deslocamento.
Permanecem diversos pontos a serem aperfeiçoados, como a calibração dos estímulos, a revisão da referência utilizada para calcular a aceleração, a segunda revisão das equações e outras visitas ao artigo original e a aula sobre "Modelagem de redes bioinspiradas" para entender a aderencia da implementação atual contra em especial os conceitos de plasticidade e metaplasticidade apresentados nas mesmas.Nota: O robô em
MANUALcom o D-PAD para qualquer lateral faz com que ele deslize livremente pela rampa, e isso é pretendido do que foi extraido do artigo original, mas demonstra o ponto do parágrafo anterior, no entanto, girar o robô em qualquer direção no início da simulação e entrar emLEARNINGpermite que ele chegue a meta em todas as simulações feitas até agora.
Assim, o principal resultado da Fase 2 não é demonstrar definitivamente que o robô aprendeu por efeito da plasticidade, mas construir uma plataforma em que essa hipótese possa ser examinada de forma controlada, observável e reproduzível. Na Fase 3, o objetivo sugerido é executar conjuntos de simulações com parâmetros e condições de referência registrados, comparando os efeitos produzidos por diferentes configurações e mecanismos de plasticidade.
Francisco Javier Ropero Peláez, Lucas Galdiano Ribeiro Santana Doman's Inclined Floor Method for Early Motor Organization Simulated with a Four Neurons Robot (2011) https://www.semanticscholar.org/paper/Doman's-Inclined-Floor-Method-for-Early-Motor-with-Peláez-Santana/a1d9815865dcf65b909aeaf985f2f96c99be9dd5
J. R. Peláez, Marcelo Simoes A computational model of synaptic metaplasticity (1999) https://www.semanticscholar.org/paper/A-computational-model-of-synaptic-metaplasticity-Peláez-Simoes/ba93f797064a0035c6fe37836b055f84d85c61f1
J. R. Peláez, J. Piqueira Biological Clues for Up-to-Date Artificial Neurons (2007) https://www.semanticscholar.org/paper/Biological-Clues-for-Up-to-Date-Artificial-Neurons-Peláez-Piqueira/6dc2349c03495f5465df0d6d1ed93c31adde8189
N S Desai, L C Rutherford, G G Turrigiano Plasticity in the intrinsic excitability of cortical pyramidal neurons (1999) https://pubmed.ncbi.nlm.nih.gov/10448215/
Niraj S Desai Homeostatic plasticity in the CNS: synaptic and intrinsic forms (2003) https://pubmed.ncbi.nlm.nih.gov/15242651/
Este apêndice descreve a preparação do ambiente necessário para inspecionar o código, executar os testes automatizados e reproduzir a simulação integrada da Fase 2. Os comandos devem ser executados a partir da raiz do repositório, salvo quando indicado de outra forma.
O procedimento principal utiliza uv, pois pyproject.toml e uv.lock constituem as fontes de configuração e travamento das dependências Python. Os procedimentos com pip e conda são mantidos como alternativas.
A tabela esta em ordem sugerida de instalação
| Software | Versão ou condição | Finalidade |
|---|---|---|
| GCC, G++ e make | toolchain compatível com o sistema | compilação de controladores ou plugins nativos |
| Git | versão recente | obtenção e atualização do repositório |
| Webots | R2025a |
execução dos mundos e do controlador do robô |
| Python | 3.13.x |
rede neural, protocolo, testes e relatórios |
| uv | versão recente | instalação reproduzível |
| conda (não instale o Python antes se usar esta opção) | versão recente | instalação reproduzível |
| Visual Studio Code ou outro editor | opcional | inspeção e desenvolvimento do código |
O experimento integrado utiliza um controlador Python e, por isso, GCC não é necessário para interpretar a rede neural. A toolchain permanece documentada porque o repositório contém controladores e exemplos nativos e porque ela será necessária caso esses componentes sejam recompilados ou modificados.
| Hardware | Versão ou condição | Finalidade |
|---|---|---|
| controle compatível com joystick (modelo Xbox One S mapeado) | opcional para testes gerais; necessário na interface atual para selecionar os modos interativos | acionamento de MANUAL, LEARNING e demais modos |
No Ubuntu Linux:
O pacote build-essential reúne GCC, G++, make e os componentes básicos de compilação:
sudo apt update
sudo apt install build-essential
gcc --version
g++ --version
make --versionNo Windows:
O Webots R2025a distribui uma cópia própria do MinGW para seus controladores C e C++. Para desenvolvimento também fora do ambiente interno do simulador, pode-se instalar a toolchain UCRT64 do MSYS2.
Após instalar o MSYS2, deve-se abrir o terminal MSYS2 UCRT64 e atualizar os pacotes:
pacman -SyuCaso o terminal solicite encerramento após a atualização dos componentes centrais, deve-se abri-lo novamente e repetir pacman -Syu. Em seguida, instala-se a toolchain:
pacman -S --needed \
mingw-w64-ucrt-x86_64-toolchain \
mingw-w64-ucrt-x86_64-make \
makeQuando as ferramentas precisarem ser utilizadas também pelo PowerShell ou pelo Visual Studio Code, os seguintes diretórios da instalação padrão podem ser adicionados ao PATH do usuário:
C:\msys64\ucrt64\bin
C:\msys64\usr\bin
A instalação deve ser validada em um novo terminal:
gcc --version
g++ --version
make --versionNo pacote UCRT64, o executável específico do make também pode aparecer como mingw32-make; o pacote make fornece o comando genérico usado pelos procedimentos do projeto.
No Ubuntu Linux:
sudo apt update
sudo apt install git
git --versionNo Windows:
O Git for Windows pode ser obtido em https://git-scm.com/. Em sistemas com winget, a instalação também pode ser realizada em PowerShell:
winget install --id Git.Git -e --source winget
git --versionDepois da instalação, deve-se abrir um novo terminal para que eventuais alterações no PATH sejam reconhecidas.
Usando HTTPS:
git clone https://github.com/lnncrs/DomanNeurocomputationalModel.git
cd DomanNeurocomputationalModelUsando SSH, quando uma chave já estiver configurada no GitHub:
git clone git@github.com:lnncrs/DomanNeurocomputationalModel.git
cd DomanNeurocomputationalModelApós a clonagem, os arquivos pyproject.toml, uv.lock, requirements.txt e environment.yml devem estar disponíveis na raiz do projeto.
Os mundos do repositório declaram R2025a no cabeçalho e utilizam recursos dessa versão. Para reproduzir a configuração documentada, deve-se instalar Webots R2025a, em vez de substituir automaticamente pela versão mais recente. Os instaladores e as instruções oficiais estão disponíveis em https://cyberbotics.com/doc/guide/installing-webots e nas versões publicadas em https://github.com/cyberbotics/webots/releases.
No Ubuntu Linux:
Deve-se baixar o pacote .deb correspondente ao Webots R2025a e instalá-lo a partir do diretório em que foi salvo:
sudo apt install ./webots_2025a_amd64.deb
webots --versionO nome exato do arquivo pode variar conforme o pacote publicado. Se o executável não for encontrado no PATH, o Webots também pode ser iniciado pelo menu de aplicações ou por seu diretório de instalação.
No Windows:
Deve-se baixar e executar o instalador webots-R2025a_setup.exe. Na instalação padrão, o executável fica sob C:\Program Files\Webots.
Em algumas configurações, o Webots aberto diretamente pelo menu não herda o ambiente Python utilizado pelo projeto. Nesse caso, deve-se primeiro preparar ou ativar o ambiente e abrir o simulador pelo mesmo terminal. Em PowerShell, considerando a instalação padrão:
& "C:\Program Files\Webots\msys64\mingw64\bin\webots.exe" --stdout --stderr --clear-cacheO caminho deve ser ajustado caso o Webots tenha sido instalado em outro diretório. As opções --stdout e --stderr mantêm visíveis as mensagens do controlador; --clear-cache é útil quando alterações em mundos ou arquivos PROTO não aparecem após uma atualização.
O uv pode ser instalado pelos procedimentos oficiais disponíveis em https://docs.astral.sh/uv/getting-started/installation/.
No Ubuntu Linux:
curl -LsSf https://astral.sh/uv/install.sh | shNo Windows PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Depois de abrir um novo terminal, a instalação pode ser verificada e o ambiente completo do projeto sincronizado:
uv --version
uv sync --all-groups --all-extrasO comando cria ou atualiza .venv, instala a versão compatível do Python quando necessário, instala o projeto e inclui os grupos de análise e desenvolvimento empregados nos notebooks e testes.
Esta alternativa exige que Python 3.13.x já esteja instalado. Recomenda-se criar um ambiente virtual isolado.
No Ubuntu Linux:
python3.13 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txtNo Windows PowerShell:
py -3.13 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txtO arquivo requirements.txt instala o projeto com o conjunto de dependências de análise e inclui o pytest. A definição principal das dependências permanece em pyproject.toml.
Pode-se utilizar Miniforge ou Miniconda seguindo a documentação em https://docs.conda.io/projects/conda/en/stable/user-guide/install/. Depois de instalar o gerenciador e abrir um terminal com conda disponível, o arquivo environment.yml cria o ambiente webots com Python 3.13 e as dependências do projeto:
conda env create -f environment.yml
conda activate webotsQuando o ambiente já existir e o arquivo tiver sido alterado, ele pode ser atualizado por:
conda env update -f environment.yml --prune
conda activate webotsO projeto não depende de um editor específico. Para desenvolvimento com Visual Studio Code, são úteis as extensões oficiais Python e Pylance, além de suporte a Jupyter para os notebooks. O editor deve ser iniciado somente depois da criação ou ativação do ambiente, ou configurado para usar o interpretador localizado em .venv ou no ambiente webots do conda.
Com uv, todos os testes podem ser executados por:
uv run pytestCom o ambiente pip ou conda ativado:
python -m pytestOs testes cobrem as equações e a plasticidade da rede, a causalidade do protocolo, o mapeamento motor, a telemetria e a geração dos artefatos. Sua aprovação verifica a instalação do núcleo Python, mas não substitui a validação da física e dos sentidos de rotação dentro do Webots.
git --versionresponde corretamente;- o Webots instalado corresponde à versão
R2025a; uv sync --all-groups --all-extrasou uma alternativa equivalente termina sem erros;webots/worlds/experiment_inclined_plane.wbtabre sem erros de PROTO ou de controlador;- as mensagens do controlador aparecem no terminal;
- o modo
LEARNINGpode ser selecionado; - uma execução produz os arquivos esperados em
experiments/runs.
O repositório separa o modelo neural, o protocolo experimental e a adaptação dos comandos motores dos artefatos específicos do Webots. A árvore a seguir apresenta alguns dos componentes do repositório que serão detalhados a seguir.
DomanNeurocomputationalModel/
|-- assets/ # imagens utilizadas na documentação
|-- docs/ # relatórios e artigo de referência
| |-- fase01-relatorio.md
| `-- fase02-relatorio.md
|-- examples/ # exemplo mínimo de uso
| `-- four_neuron_minimal.py
|-- experiments/ # resultados gerados durante as simulações
| `-- runs/
| `-- learning_{timestamp}_{seed}/
| |-- iterations.jsonl
| |-- metadata.json
| |-- report.html
| `-- summary.json
|-- notebooks/ # execução não conectada da rede
| `-- four_neuron_network_validation.ipynb
|-- src/ # rede e controle
| |-- control/
| | `-- robot_adapter.py
| |-- experiments/
| | |-- experiment_logger.py
| | |-- experiment_report.py
| | `-- experiment_runner.py
| `-- neural/
| `-- four_neuron_network.py
|-- tests/ # testes unitários
| |-- test_experiment_runner.py
| |-- test_four_neuron_network.py
| |-- test_learning_runtime.py
| `-- test_robot_adapter.py
|-- webots/ # mundos, robôs, controladores e interfaces do simulador
| |-- controllers/
| | |-- test_cpp_controller/ # controle mínimo em C++ (Fase 1)
| | |-- test_py_controller/ # controle mínimo em Python (Fase 1)
| | |-- four_wheels_collision_avoidance/ # controle de colisão em C (Fase 1)
| | |-- four_wheels_collision_avoidance_py/ # controle de colisão em Python (Fase 1)
| | |-- four_wheels_manual/ # controle do experimento em Python (Fase 2)
| | | |-- four_wheels_manual.py # controle multimodo
| | | `-- learning_runtime.py # ponte Webots -> aprendizagem
| | `-- [...] # outros controladores usados como referência do Webots
| |-- plugins/ # plugins para funcionamento da janela de telemetria
| | `-- robot_windows/
| | |-- custom_robot_window/ # plugin original Webots
| | `-- four_wheel_robot_window/ # plugin adaptado
| |-- protos/
| | |-- differential/ # testes históricos com controle diferencial
| | |-- physics/ # testes históricos com física ativa
| | |-- CompactInclinedPlane.proto # plano inclinado principal do experimento
| | |-- CompactInclinedPlaneExperiment.proto # plano inclinado + robô instrumentado
| | |-- FourWheelRobot.proto # robô de quatro rodas e instrumentação embarcada
| | |-- GoalArea.proto # meta ajustável
| | |-- InclinedFourWheelRobot.proto # wrapper para que o robô seja inclinado junto com a rampa
| | `-- SimpleRobot.proto # robô derivado/desacoplado de `tutorials/4_wheels_robot.wbt` usado como base
| |-- tutorials/ # tutoriais do Webots usados como base
| | |-- 4_wheels_robot.wbt
| | |-- appearance.wbt
| | |-- collision_avoidance.wbt
| | |-- compound_solid.wbt
| | |-- custom_robot_window.wbt
| | |-- four_wheels.wbt
| | |-- hexapod.wbt
| | |-- my_first_simulation.wbt
| | `-- obstacles.wbt
| `-- worlds/ # mundos criados para o experimento
| |-- empty_world.wbt # mundo vazio usado como ponto de partida
| |-- experiment_inclined_plane.wbt # experimento principal da Fase 2, com rampa, robô, meta e aprendizagem
| |-- inclined_plane_fs.wbt # plano inclinado em escala completa (full scale)
| |-- inclined_plane_fs_balls.wbt # plano inclinado em escala completa com bolas para validar a física
| |-- inclined_plane_fs_robot.wbt # plano inclinado em escala completa com robô
| |-- inclined_plane_hs.wbt # plano inclinado em meia escala (half scale)
| |-- inclined_plane_hs_robot.wbt # plano inclinado em meia escala com robô
| |-- normal_plane_fs.wbt # plano horizontal em escala completa
| |-- normal_plane_fs_boxes.wbt # plano horizontal em escala completa com caixas para validar a física
| |-- normal_plane_fs_robot.wbt # plano horizontal em escala completa com robô
| |-- normal_plane_hs.wbt # plano horizontal em meia escala
| `-- normal_plane_hs_robot.wbt # plano horizontal em meia escala com robô
|-- .gitignore
|-- .python-version
|-- environment.yml
|-- pyproject.toml
|-- README.md
|-- requirements.txt
`-- uv.lock
Nota: Arquivos de cache, ambientes virtuais, resultados temporários e configurações internas de ferramentas foram omitidos.
| Arquivo | Função |
|---|---|
README.md |
apresentação geral e instruções principais do projeto |
pyproject.toml |
metadados, versão do Python e dependências do projeto |
uv.lock |
versões resolvidas para reprodução com uv |
requirements.txt |
alternativa de instalação com pip |
environment.yml |
alternativa de instalação com conda |
.python-version |
versão de Python selecionada para o diretório de trabalho |
.gitignore |
exclusão de ambientes, caches e resultados gerados |
O diretório src contém o núcleo independente do Webots e está dividido em três responsabilidades:
-
src/neuralimplementa o estado da rede de quatro neurônios, a ativação, a competição e as regras de plasticidade; -
src/controltraduz as quatro ações neurais abstratas em comandos para os motores, sem incorporar a lógica do simulador; -
src/experimentsorganiza a execução do protocolo, registra os dados de cada iteração e produz o resumo e o relatório final.
O arquivo src/neural/four_neuron_network.py concentra o modelo neural.
O arquivo src/control/robot_adapter.py contém a fronteira entre as ações neurais e as primitivas motoras.
Em src/experiments, experiment_runner.py, experiment_logger.py e experiment_report.py separam, respectivamente, execução, persistência e apresentação dos resultados.
O diretório webots reúne todos os componentes dependentes do simulador:
-
webots/worldscontém os ambientes executáveis.experiment_inclined_plane.wbté o mundo principal da Fase 2; os demais mundos preservam configurações intermediárias usadas para validar física, planos, bolas, robôs e diferentes escalas; -
webots/protoscontém as definições reutilizáveis do plano, da meta, do robô e dos objetos de teste. Os subdiretóriosdifferentialephysicspreservam, respectivamente, modelos diferenciais e objetos utilizados na validação física; -
webots/controllerscontém o controle executado durante a simulação. O controlador atualmente relevante para o experimento integrado éfour_wheels_manuale apesar do nome histórico, ele reúne os modosAUTOMATIC,MANUAL,PASSIVE_FREE,PASSIVE_REALISTICeLEARNING; -
webots/plugins/robot_windowscontém as interfaces HTML, CSS, JavaScript e C exibidas como janela de telemetria e acompanahmento do robô.four_wheel_robot_windowcorresponde à interface principal de acompanhamento; -
webots/tutorialspreserva mundos usados no aprendizado inicial da plataforma e como referência de implementação. Esses mundos não constituem a configuração experimental da Fase 2.
No controlador principal, four_wheels_manual.py realiza a leitura dos sensores, a seleção do modo de controle e o envio dos comandos às rodas. learning_runtime.py conecta esse ciclo do Webots ao núcleo localizado em src e mantém a janela temporal de cada ação neural.
-
docscontém os relatórios, os documentos de planejamento e o artigo usado como referência. -
assetsarmazena as imagens utilizadas na documentação; -
notebooks/four_neuron_network_validation.ipynbpermite examinar o modelo neural com dados sintéticos fora do Webots; -
examples/four_neuron_minimal.pyapresenta uma execução mínima da rede de quatro neurônios;
O diretório tests reproduz a mesma divisão funcional do código:
| Arquivo | Responsabilidade principal |
|---|---|
test_four_neuron_network.py |
equações, inicialização, competição e plasticidade neural |
test_robot_adapter.py |
tradução das ações abstratas para comandos motores |
test_experiment_runner.py |
causalidade, classificação do movimento, critérios e artefatos experimentais |
test_learning_runtime.py |
integração temporal, telemetria, meta e funcionamento do runtime usado pelo Webots |
Nota: Esses testes validam o comportamento computacional somente.
Foram necessárias diversas simulações para construir o experimento da Fase 2, os principais saltos qualitativos do projeto estão listados abaixo.
O primeiro desafio foi reproduzir física com parâmetros de mundo terrestre com exatidão aproximada(gravidade, atrito, elasticidade, etc), o filme inclined_plane é o plano inclinado com bolas para a simulação de física.
inclined_plane: https://youtu.be/qvbR1wQidVg
Imagem: inclined_plane
Nota: Os planos foram criados especificamente para o projeto.
O segundo desafio foi montar um robô e posicioná-lo neste mundo simulado, o filme inclined_plane_with_robot e inclined_plane_with_robot_1 é o plano inclinado com o robô e controle de batida (nao rede neural) para testar se o robô funcionava na simulação, o último tem um guardrail mais baixo (o que impede a queda do robô).
inclined_plane_with_robot: https://youtu.be/1YhcI6GHoAs
inclined_plane_with_robot_1: https://youtu.be/zjciixsm578
Imagem: inclined_plane_with_robot
Nota: Nos robôs de teste de batida foram usados modelos de exemplo da biblioteca aberta do Webots adaptados.
Por fim era necessário conseguir que uma interface de controle baseada em código conseguisse interagir com a simulação, o filme normal_plane_with_rotation é um primeiro teste com juntas, motores e ativação via interface de controle, esse passo foi decisivo no projeto, pois abriu portas para que fosse possível controlar aspectos da simulação via interface programável primeiro em C e depois em Python.
normal_plane_with_rotation: https://youtu.be/ZKbbiObtkQ8
Imagem: normal_plane_with_rotation
Nota: As peças rotacionando com controle foram criadas do zero porque era necessário entender a fundo como funcionava exatamente a "junção" entre duas peças nesta simulação.
Este apêndice relaciona os parâmetros apresentados no corpo do relatório aos
campos, constantes e argumentos que determinam seus valores na implementação.
A indicação default interno significa que o campo é configurável em código,
mas ainda não é exposto pelo mundo principal. A indicação argumento do
controlador significa que o valor pode ser informado por controllerArgs.
| Parâmetro | Campo ou constante | Arquivo | Configuração integrada |
|---|---|---|---|
| número de neurônios | NEURON_COUNT |
src/neural/four_neuron_network.py |
constante fixada em 4 |
| peso recorrente | NeuralConfig.recurrent_weight |
src/neural/four_neuron_network.py |
default interno |
| ganho sigmoidal | NeuralConfig.sigmoid_gain |
src/neural/four_neuron_network.py |
default interno |
| pesos não diagonais iniciais | initial_weight_min; initial_weight_max |
src/neural/four_neuron_network.py |
defaults internos; sorteio uniforme condicionado pela seed |
taxa sináptica epsilon |
NeuralConfig.synaptic_learning_rate |
src/neural/four_neuron_network.py |
default interno |
taxa intrínseca xi |
NeuralConfig.intrinsic_learning_rate |
src/neural/four_neuron_network.py |
default interno |
| deslocamento inicial | NeuralConfig.initial_shift |
src/neural/four_neuron_network.py |
default interno |
| competição | FourNeuronNetwork._select_winner |
src/neural/four_neuron_network.py |
maior saída; empates são resolvidos pela seed |
| escopo da plasticidade | NeuralConfig.plasticity_scope |
src/neural/four_neuron_network.py |
default PlasticityScope.WINNER_ONLY |
| fonte da plasticidade intrínseca | FourNeuronNetwork._update_intrinsic_shifts |
src/neural/four_neuron_network.py |
saída após competição; hipótese fixa da reconstrução |
| ruído de ativação | não implementado | src/neural/four_neuron_network.py |
nenhum termo de ruído é adicionado |
| limites adicionais dos pesos | não implementados | src/neural/four_neuron_network.py |
a equação é aplicada sem recorte adicional |
| seed neural | LearningRuntimeConfig.random_seed; NeuralConfig.random_seed |
webots/controllers/four_wheels_manual/learning_runtime.py |
argumento --learning-seed, definido no mundo principal |
O LearningRuntime constrói NeuralConfig informando explicitamente a seed e
a normalização da aceleração. Os demais parâmetros neurais utilizam os defaults
centralizados em src/neural/four_neuron_network.py.
| Parâmetro | Campo ou constante | Arquivo | Configuração integrada |
|---|---|---|---|
| duração nominal da ação | LearningRuntimeConfig.action_duration_seconds |
webots/controllers/four_wheels_manual/learning_runtime.py |
argumento --learning-action-duration, definido no mundo principal |
velocidade no modo LEARNING |
LearningRuntimeConfig.wheel_speed |
webots/controllers/four_wheels_manual/learning_runtime.py |
argumento --learning-speed, definido no mundo principal |
| limiar de movimento estacionário | LearningRuntimeConfig.stationary_threshold |
webots/controllers/four_wheels_manual/learning_runtime.py |
default interno |
| intensidade da maraca | LearningRuntimeConfig.sound_intensity |
webots/controllers/four_wheels_manual/learning_runtime.py |
aceita --learning-sound-intensity; o mundo usa o default |
| escala da aceleração | LearningRuntimeConfig.acceleration_scale |
webots/controllers/four_wheels_manual/learning_runtime.py |
argumento --learning-acceleration-scale, definido no mundo principal |
| entrada visual | visual=0.0 |
webots/controllers/four_wheels_manual/learning_runtime.py |
fixada; canal visual desativado |
| movimentos consecutivos | ExperimentConfig.learning_streak |
webots/controllers/four_wheels_manual/learning_runtime.py |
fixado em 5 na criação do protocolo |
| sinal de descida | ExperimentConfig.downhill_sign |
webots/controllers/four_wheels_manual/learning_runtime.py |
fixado em -1 na criação do protocolo |
Os argumentos configurados pelo mundo principal encontram-se em
webots/worlds/experiment_inclined_plane.wbt.
| Parâmetro | Campo ou constante | Arquivo | Configuração integrada |
|---|---|---|---|
| passo básico do mundo | WorldInfo.basicTimeStep |
webots/worlds/experiment_inclined_plane.wbt |
campo do mundo; 16 ms |
| passo do controlador | TIME_STEP |
webots/controllers/four_wheels_manual/four_wheels_manual.py |
constante; 64 ms, equivalente a quatro passos básicos |
| seed do mundo | WorldInfo.randomSeed |
webots/worlds/experiment_inclined_plane.wbt |
campo do mundo; independente de --learning-seed |
| inclinação da rampa | angle |
webots/worlds/experiment_inclined_plane.wbt |
repetida em CompactInclinedPlane e InclinedFourWheelRobot; valores devem coincidir |
| área lógica da meta | GoalArea.size; GoalArea.detectionHeight; --goal |
webots/worlds/experiment_inclined_plane.wbt |
configuração duplicada entre mundo e controlador |
| permanência na meta | GoalArea.dwellTime; último valor de --goal |
webots/worlds/experiment_inclined_plane.wbt |
monitor geral utiliza o valor; LEARNING termina na entrada |
Gravidade, atrito e parâmetros de contato não estão explicitados no mundo principal e permanecem herdados dos defaults do Webots.
| Parâmetro | Campo ou constante | Arquivo | Configuração integrada |
|---|---|---|---|
| torque do modo passivo realista | PASSIVE_REALISTIC_TORQUE |
webots/controllers/four_wheels_manual/four_wheels_manual.py |
constante hardcoded; 0,03 N·m por roda |
CMCC - Universidade Federal do ABC (UFABC) - Santo André - SP - Brasil
















