sexta-feira, 13 de maio de 2011

Bike Me - XNA



Continuando com a minha senda com o XNA, decidi criar um jogo que me parece ter potencial, embora necessite de muito trabalho. Seguindo o conceito do Little Big Planet, o utilizador cria os níveis do jogo e tem a possibilidade de os partilhar e de fazer download de níveis criados por outros utilizadores.

Iphone Bricker Game



Desenvolver aplicações para o Iphone está na moda :), sendo assim isto é a minha primeira aplicação, desenvolvida no Xcode programando em ObjectiveC. Para quem está habituado a Java e C# é um pouco diferente, mas penso que seja uma questão de hábito, já que o paradigma é o mesmo.

quarta-feira, 13 de outubro de 2010

Hierarchical Reinforcement Learning: Learning Sub-goals and State-Abstraction

Ao fim de 1 ano de trabalho este é o resultado final da minha dissertação de Mestrado. Coloquei-a  no SlideShare para que seja possível a sua pré-visualização. Foi escrita em LateX utilizando o TeXShop.


Podem efectuar o download da versão PDF aqui (Dissertação). De seguida um excerto do Resumo.
Neste trabalho, apresentamos um novo método que permite a um agente descobrir e criar abstracções temporais de forma autónoma. Essas abstracções são baseadas na framework das Options. O nosso método é baseado no conceito de que para alcançar o objectivo, o agente deve passar por determinados estados. Ao longo do tempo estes estados vão começar a diferenciar-se dos restantes, e serão identificados como sub-objectivos úteis. Poderão ser utilizados pelo agente para criar novas abstracções temporais, cujo objectivo é ajudar a atingir esses objectivos secundários. Para detectar sub-objectivos, o nosso método cria intersecções entre os vários caminhos que levam ao objectivo principal.

segunda-feira, 20 de setembro de 2010

Math4Kids - Apresentação SAPO Codebits



Esta foi a nossa apresentação do Math4Kids no concurso de programação decorrido no SAPO Codebits. Para quem não conhece o formato do concurso, em 24 horas cada equipa tinha que desenvolver um projecto, e apresenta-lo em 90 segundos. No fim desse curto prazo, os restantes concorrentes podiam efectuar votações positivas ou negativas de modo a escolher os vencedores do concurso.

Os restantes projectos podem ser visualizados no site do Codebits.

sexta-feira, 2 de julho de 2010

Radial Colorz



O meu último projecto é um widget para testar a memória e a velocidade de reacção. O objectivo é memorizar a sequência de esferas coloridas que surge no ínicio de cada nível e recriá-la.

Para fazer isso basta clicar numa das esferas que é enviada para a caixa ao centro do ecrã. Ao enviares as esferas para o centro tenta apanhar os power-ups que vão surgindo, alinha a esfera que vais colocar na caixa com o power-up que pretendes apanhar rodando o círculo das esferas.

Foi desenvolvido para a plataforma Nokia WRT utilizando JavaScript, HTML e CSS. Está disponível para download gratuito na plataforma de Widgets da Sapo. Os ícones Orbz são da autoria do designer Miloš Mirković que amavelmente os disponibilizou.

quinta-feira, 3 de junho de 2010

Realidade Aumentada - Shake Menus



Aplicação desenvolvida em C++ utilizando OpenGL e um algoritmo de seguimento de uma marca, onde um gesto de agitar é utilizado para despoletar eventos como activar um menu e selecionar um item. Um trabalho desenvolvido na área de Realidade Aumentada.

sexta-feira, 14 de maio de 2010

Lego MindStorms with Q-Learning



Projecto desenvolvido na cadeira de Robótica em que o objectivo é fazer com que o robô aprenda de uma forma autónoma como chegar ao rectângulo cor-de-rosa.

Foi utilizado o algoritmo de Aprendizagem por Reforço, Q-Learning.

Inicialmente programado num Simulador (Simbad) para simplificar a fase de testes e mais tarde transferimos o código desenvolvido em Java e a aprendizagem obtida off-line para o robô.

Verificamos que realmente aprendeu ;)

O robô possui os seguintes sensores:

  • 2 Sensores para detectar a cor do chão.
  • 1 Bússola para saber a orientação do robô.
  • 1 Sensor ultra-sónico para detectar a existência de obstáculos.  
E dois motores, um para cada roda.


Foi um desafio muito interessante lidar com os vários problemas que advém da imprecisão de alguns sensores e das condições de teste do cenário.

segunda-feira, 12 de abril de 2010

Math4Kids

Neste projecto iremos descrever uma abordagem ao conceito de aprender a brincar, mais especificamente, facultar simples conceitos matemáticos para crianças numa faixa etária dos 5 aos 7 anos através da interacção com um jogo de computador. Pretende-se fundir o factor de divertimento com a aprendizagem de uma forma inovadora de modo a ilustrar o potencial pedagógico dos jogos ao desenvolver uma aplicação que funcione como uma ferramenta auxiliar no ensino e na aprendizagem da matemática durante a Educação Pré-Escolar de forma interactiva estimulando na criança múltiplas competências.

Ficam aqui algumas imagens do jogo:




Podemos afirmar que os jogos possuem um potencial de educação tremendo, já que permitem às crianças explorarem ideias em mundos virtuais, acumularem experiência e ficarem absorvidas por disciplinas que no contexto normal das aulas, no ensino como o conhecemos, não representam uma área de interesse nem de lazer.

Podem efectuar o download do jogo em Math4Kids depois basta extrair o ficheiro e iniciar a instalação apenas para o sistema operativo Windows.
No seguimento deste projecto foi criado um artigo  disponível em (Aprender Conceitos de Matemática Brincando) submetido na conferência Artech 2010 na qual vou fazer uma pequena apresentação no dia 23 de Abril.

sábado, 20 de março de 2010

Lego MindStorms



Versão inicial do robô utilizado na cadeira de robótica que vai ter o objectivo de procurar um objecto, após encontrar o objecto deve pegar no mesmo e leva-lo a uma localização específica.

Utiliza sensores ultra-sónicos e sensores de cores.

Deve aprender a fazer isto tudo de forma autónoma através de aprendizagem por reforço.

terça-feira, 9 de fevereiro de 2010

terça-feira, 15 de dezembro de 2009

Sapo Codebits 2009

Parabéns à organização pelo excelente evento, recomendo vivamente, já que existiram palestras muito interessantes.

Nesta edição de 2009, participei com o meu colega Ricardo Carvalho, e sem estarmos à espera conseguimos ficar no 2º lugar do concurso de programação.

Tinhamos um jogo em XNA que comunicava com um sistema da Lego, e que de uma forma muito simples, possuia duas alavancas cada uma com uma bandeira.



Consoante a acção do jogador no jogo, ocorria uma comunicação atráves de sockets entre o jogo e uma aplicação chamada Scratch que servia de middleware na nossa aplicação e que mandava o sistema Lego levantar a bandeira adequada.

Quando a apresentação for colocada online, venho cá e actualizo o post. 

sexta-feira, 9 de outubro de 2009

HeadBanger Slug



Este projecto foi desenvolvido utilizando o excelente programa de modelação e animação 3D Blender que ainda por cima é FREE!!!

Foi para a cadeira de Animação por Computador.

quinta-feira, 8 de outubro de 2009

QLearning Robot Java



Simular um robô móvel que:

Actue como um agente que possua aprendizagem.
Desloque-se num ambiente desconhecido, efectuando a detecção de obstáculos.
Obtenha informação sobre o ambiente, através de um sistema sensorial.
Defina estados consoante a informação obtida.

O agente tenta obter uma política que maximize a recompensa obtida ao longo do tempo, isso é feito através da seguinte equação.


Podemos verificar um cenário possível onde o robô vai aprender o caminho para chegar ao farol de forma automática.




Ao longo do tempo verifica-se que o robô efectua cada vez menos passos para atingir o seu objectivo.



E que a qualidade das acções também aumenta ao longo do tempo.




Os resultados obtidos demonstraram a capacidade do agente de navegar pelo cenário efectuando uma aprendizagem contínua ao longo das acções efectuadas.
Verificou-se que quanto mais complexo o cenário, mais iterações eram necessárias para o robô obter a solução óptima para alcançar o farol.

Rastreabilidade com Programação Orientada por Aspectos - AspectJ

Neste projecto, desenvolveu-se a base de uma aplicação com base em aspectos (AspectJ) que tem como objectivo facilitar a depuração e a rastreabilidade de qualquer aplicação Java.

A programação orientada por aspectos tem como principal objectivo resolver as limitação dos métodos de programação actuais, como o espalhamento de código (scattering) ou o emaranhamento (tangling) ou ambos, que tornam o código cada vez mais confuso e de difícil evolução e manutenção.

De seguida temos o Ecrã Principal do Programa (Vista Hierárquica):



E podemos observar a execução de um constructor-call, isto é, da chamada de um construtor da classe Test(), na execução da instrução Test lolx = new Test();




Nesta imagem podemos observar o segundo ecrã do programa, com uma funcionalidade interessante. No painel inferior do ecrã do programa, à qual demos o nome de “Object View”, estão disponíveis duas listas. A lista do lado esquerdo ilustra todas as instâncias de classes (objectos) diferentes capturados pela nossa aplicação.

Foi desenvolvido em conjunto com 2 colegas meus :

Jairo Avelar
Ricardo Carvalho

Simulating SARS - NetLogo

Este projecto visa a implementação de um modelo small-world network que conjuga cellular automata com o conceito de mirror identities sociais simulando o contacto diário entre os cidadãos, com o propósito de efectuar simulações epidemiológicas.

Utilizando o seguinte modelo:

Cellular Automata with Social Mirror Identities Model (CASMIM)



Os estados dos agentes da camada superior são alterados simultaneamente com os estados da mirror identity da camada inferior em cada iteração.
Através de um conjunto de regras de interacção os atributos de um agente são alterados, desde o estado epidemiológico até o estado da sua mobilidade social.



Este é o mundo do nosso simulador, como já foi referido cada quadrado corresponde a uma mirror identity de um agente, onde cada agente tem uma ou mais. Através da cor é possível identificar o estado epidemiológico dos agentes.

Programação 3D - CaveH Flight - C++

Este projecto foi desenvolvido na cadeira de programação 3D para a criação de uma aplicação interactiva virtual, tendo em vista o ambiente imersivo do tipo C.A.V.E. (Cave Automatic Virtual Environment).




Inicialmente o desenvolvimento foi efectuado como uma aplicação stand-alone de forma a simplificar a aprendizagem, ou seja foi criado um projecto OSG de raiz em C++, e implementou-se o projecto, mas não era uma aplicação distribuída.
A classe AirplaneControllerGadget é responsável por controlar o gadget correspondente ao avião, que por si é manipulado pela classe HandleMotion, ao aplicar as rotações e translações necessárias ao modelo



Obteve-se uma aplicação que permite ao utilizador controlar um avião utilizando o Wiimote de forma satisfatória e podemos verificar pela imagem o resultado final.

Projecto Som e Vídeo para Multimédia

Time



Com o desenvolvimento deste projecto adquiri as bases de edição e montagem de vídeo e som, utilizando o Adobe Prémiere, After Effects e o Audition.

Foi muito interessante.

sábado, 29 de novembro de 2008

QLearning Java

O objectivo deste trabalho é implementar uma técnica de aprendizagem por reforço denominada por QLearning, que consiste num tipo de aprendizagem não supervisionada, onde o "robô" anda a explorar o cenário, evitando os obstáculos até conseguir chegar à saída.

De cada vez que consegue sair, atribui uma recompensa à casa anterior à saída, e assim sucessivamente, até obter um caminho com várias recompensas.


Inicialmente o cenário é composto por células pretas(obstáculos) e brancas (caminho livre).



Posteriormente as casas que possuem uma recompensa, são marcadas com a cor azul, onde a tonalidade da cor é relevante, quanto mais escura, maior é a recompensa, logo está mais próximo da saída.



Neste exemplo já foi encontrado o caminho, ou seja a solução já convergiu.
A casa representada a vermelho consiste na posição actual do robô.

Q-Learning

Finalmente um pequeno vídeo para demonstrar, espero que gostem.

sexta-feira, 28 de novembro de 2008

Aprendizagem Competitiva Java

Após ter processado um ficheiro de texto com o Text Processor, verificou-se a existência de duas classes, então os representantes dessas classes convergem para a média das distribuições dos dados.



Representantes: Pontos Brancos.
Classe: Nuvem azul (2).