Página 1 de 5

[Mindstorms EV3] LeJOS

Enviado: 05 abr 2017, 20:35
por CyberX
A parte mais importante:
1. Alguém aqui percebe de Java?
2. Alguém aqui alguma vez usou LeJOS?
Se 1 ou 2:
3. Alguém me sugere um "Java for dummies" sem grandes complicações nem floreados?

Aqui o nosso presidente encarregou-me de uma empreitada para um próximo hackathon: ensaiar a possibilidade de utilizar LeJOS para substituir com vantagem a possibilidade que o EV3-G tem de fazer daisy chainning de múltiplos EV3.

Há uma feature do LeJOS que se chama PAN (Personal Area Network) e em principio permite o que o Fernando quer.

Eu tentei algures no tempo usar um NXT com LeJOS e mandei tudo às urtigas. Para começar porque tenho um ódio de estimação ao Java desde os tempos da faculdade e como administrador de sistemas não melhorou (saem alertas de segurança para Java todas as semanas, já nem leio). Mas o Fernando nunca mais se cala se não experimentarmos portanto vamos lá.

O meu problema com o Java não é a linguagem em si, mais coisa menos coisa é C ou C++ até tem o raio dos ponto-e-virgula.
É para fazer o raio de um Hello World ter de criar um projecto com não sei quantos ficheiros.

Enfim, para usar o LeJOS com o EV3 já consegui o Hello World:
- instalei o Eclipse e adicionei a extensão ou plugin para o EV3 (em Linux mas penso que em Windows os passos sejam os mesmos, bastou seguir a Wiki)
- instalei o firmware do LeJOS num cartão microSD (em Linux é fácil mas em Windows tb não deve ser muito complicado)
- configurei o Eclipse para gerar código JRE 1.7 em vez de 1.8 porque dentro do firmware é 1.7 (isto não vinha na Wiki - antes de o fazer todos os meus programas geravam unhandled exceptions numa letra muito miudinha, á percebi que se queixava de qualquer coisa como "unsupported major.minor version" e pelo Google fui lá.
- gerei um programa como vem na Wiki e depois vou acrescentando linhas para testar funcionalidades. O Eclipse tem uma coisa boa que é contextualizar os erros, como eu não sei que libraries incluir (porcaria de documentação, e diz o Conchas que a do ev3dev é confusa, eles pelo menos admitem que ainda lhes falta arrumar a casa) vou usando os quick fixes do Eclipse e aos poucos vou avançando.

Exemplo para escrever uma mensagem no display, esperar 5 segundos e depois fazer o motor B rodar 360º:

Código: Selecionar todos

package plugin_test;

import lejos.hardware.lcd.LCD;
import lejos.hardware.motor.EV3LargeRegulatedMotor;
import lejos.hardware.port.MotorPort;
import lejos.robotics.RegulatedMotor;
import lejos.utility.Delay;

public class test {

	private static RegulatedMotor m;

	public static void main (String[] args) {
		// TODO Auto-generated method stub
		LCD.drawString("I hate Java", 0, 2);
		LCD.drawString("but", 0, 3);
		LCD.drawString("I am stubborn!!!",0,4);			
		Delay.msDelay(5000);
		
		m = new EV3LargeRegulatedMotor(MotorPort.B);
		m.rotate(360);
	}
Agora tenho de aprender a organizar código Java, rotinas, classes e o raio.

Re: [Mindstorms EV3] LeJOS

Enviado: 05 abr 2017, 20:44
por Conchas
Eu fiz um curso de Java nos primórdios, mas certamente não vai ajudar...
Está bem mais enterrado que o Pascal ou o C que aprendi muito antes. :)

Mas certamente que vamos lá.
Até vou à procura do raio do livro que para aí deve andar. :)

Re: [Mindstorms EV3] LeJOS

Enviado: 05 abr 2017, 20:56
por Conchas
... Java 1.1...  :P
Num curso tirado em Fevereiro de 1999.  ::)

"Java in a Nutshell, David Flanagan, O'Reilly"

Re: [Mindstorms EV3] LeJOS

Enviado: 05 abr 2017, 21:06
por CyberX
Xiii..... tresanda a naftalina :)

Estou no site da Oracle a ver os tutoriais deles... pode ser que aprenda alguma coisa com o Hello World para NetBeans IDE, não é a mesma coisa que Eclipse mas pode ser que os conceitos ajudem.

Esta não foi uma boa semana para cortar a cafeína...

Re: [Mindstorms EV3] LeJOS

Enviado: 05 abr 2017, 21:08
por PocasNuckie
Eu percebo alguma coisa de Java. Ou pelo menos sei entender aquilo que procuro no Google sobre o assunto lol. E posso sempre desenterrar o material que tenho aqui do curso. O problema é que para procurar alguma coisa preciso de saber especificamente o que precisas de saber/fazer.

Posto isto, pega comigo um dia destes e combinamos ai umas tardes/noites para ver qualquer coisa, [member=6806]CyberX[/member]  :fixe:

Re: [Mindstorms EV3] LeJOS

Enviado: 05 abr 2017, 21:35
por CyberX
[member=96]PocasNuckie[/member] Obrigado. Daqui a uns dias vou aceitar. Se calhar crio um projecto no github para partilha de código.

por enquanto estou a desenferrujar o conceito de classes e objectos mas isso é mal geral tb com o python - quando eu aprendi a programar não se ensinava Programação Orientada para Objectos, com procedimentos e funções um tipo fazia tudo o que precisava.

A estrutura de ficheiros de um projecto deixa-me confuso, no tempo do Turbo C e Turbo Pascal um tipo safava-se só com um ficheiro, eventualmente por uma questão de gestão partia-se em vários. Mas nos IDE's de Java parece que é sempre necessário criar pelo menos 2 ou 3, quando experimentei o IDE da Google para Android então assustei-me.

No caso do LeJOS tenho um problema com a documentação - ou ando a navegar pela API para perceber que libraries preciso ou tenho de apalpar o Eclipse para me sugerir libraries para os exemplos do site que sabe-se lá porquê não referem as libraries necessárias (!?). E os próprios exemplos parecem arcaicos, o Eclipse queixa-se da forma como são instanciados e oferece-se para corrigir.

Exemplo:

Para comandar um motor, a Wiki diz para fazer:

Código: Selecionar todos

RegulatedMotor m = new EV3LargeRegulatedMotor(MotorPort.B);
m.rotate(360);
o Eclipse sugere as libraries em falta:

Código: Selecionar todos

import lejos.hardware.motor.EV3LargeRegulatedMotor;
import lejos.hardware.port.MotorPort;
import lejos.robotics.RegulatedMotor;
mas queixa-se do comando e só aceita quando mudo para

Código: Selecionar todos

m = new EV3LargeRegulatedMotor(MotorPort.B);
m.rotate(360);
eu percebo perfeitamente a última linha mas não percebo porque motivo não vem logo assim na Wiki.

Re: [Mindstorms EV3] LeJOS

Enviado: 05 abr 2017, 22:08
por PocasNuckie
A estrutura de ficheiros de um projecto Java é efectivamente complexa face ao normal. Tenho apontamentos sobre isso que te posso passar assim como dar-te algumas explicações.

O problema desse código que tu meteste penso que tem a ver com o upcasting/downcasting das classes e sub-classes que é outro assunto que podemos abordar numa futura conversa.  :fixe:

Re: [Mindstorms EV3] LeJOS

Enviado: 05 abr 2017, 23:42
por AGarcia
[quote="CyberX"]
A estrutura de ficheiros de um projecto deixa-me confuso, no tempo do Turbo C e Turbo Pascal um tipo safava-se só com um ficheiro, eventualmente por uma questão de gestão partia-se em vários.
[/quote]

[mode offtopic on]

Hum... saudades do Turbo Pascal! Ainda tenho o programa original. LOL
Depois veio essa coisa da programação orientada para objectos e estragou tudo.

[mode offtopic off]

Re: [Mindstorms EV3] LeJOS

Enviado: 06 abr 2017, 00:11
por Conchas
Foi por bem!
O pessoal é que parou no tempo... :P

Re: [Mindstorms EV3] LeJOS

Enviado: 06 abr 2017, 09:49
por agadoijo
Java não é a minha praia... programei em Java na universidade e num dos primeiros projectos em que tive quando comecei a trabalhar e depois nunca mais! Já lá vai algum tempo.
Mas programação orientada a objectos não é exclusivo de nenhuma linguagem, pode fazer-te confusão no início mas depois vais ver que não queres outra coisa... alias nem faz sentido de outra forma! :P

Este LeJOS parece ter algumas especificidades... não faz qualquer sentido no teu exemplo não funcionar quando estás a declarar a variável "m" localmente e aparentemente funciona quando a tens definida como uma private static.

Relembrem-me lá, sff, porque é que estão a tentar usar o LeJOS? O objectivo é ter vários EV3 a comunicar entre si... mas para quê?
Encontrei este .NET API for the LEGO MINDSTORMS EV3 brick - https://github.com/BrianPeek/legoev3 que parece ter bom aspecto e sendo .NET para mim seria muito mais simples, no entanto segundo a documentação: "The library can only be used with a single brick at a time. Multiple brick communication is not supported." que pode invalidar por completo o uso desta library.

Re: [Mindstorms EV3] LeJOS

Enviado: 06 abr 2017, 10:08
por Conchas
A questão é mesmo essa, necessitamos de "multi brick communication" para fazer um robot que exige bastantes motores.
E necessitamos de uma linguagem de programação textual, minimamente documentada. :P

Este LeJOS nesta fase, parece prometer entregar tudo o que se pretende.
O ev3dev era terrivel em termos de documentação e exemplos disponíveis.
E a comunicação entre vários EV3 tenho ideia que também requeria skills muito específicos...

Re: [Mindstorms EV3] LeJOS

Enviado: 06 abr 2017, 10:30
por CyberX
A razão do LeJOS é obscura... o Conchas é assim como que um Senador Palpatine :)

Explicação muito longa:

O Conchas tem um robot para separar plates 2x2 por cores parado desde que cheguei à PLUG. No setup dele precisa de usar vários EV3 para comandar vários motores e penso que também para ler vários sensores (cada EV3 tem um limite de 4 entradas e 4 saídas).

O firmware nativo do EV3 permite daisy chainning através da porta USB (não sei se tb por Bluetooth e menos ainda por Wi-Fi). Não conheço bem a forma como é implementada (se há o conceito de mestre / escravos ou se é tudo distribuído) mas o resultado prático é que o "IDE" para EV3-G no PC vê os vários motores e sensores da cadeia de EV3 e gera código que tira partido de todos.

O problema é que o EV3-G (blocos visuais que encaixam uns nos outros, no conceito semelhante ao Scratch e ao App Inventor, não por coincidência já que tudo isso passou pelo Media Lab do MIT) não foi pensado para programas muito longos e complexos.

O senhor presidente anda a melgar-me há uns bons meses quanto a outros ambientes de desenvolvimento para EV3 que permitam daisy chaining. Ele é adepto do RobotC mas não há forma do RobotC incluir suporte para tal coisa.

Eu não faço segredo de usar o ev3dev que é um sistema operativ e não um ambiente de desenvolvimento. No ev3dev uso o que vem à mão, sobretudo shell scripts e python (sem entrar pelos objectos, mas um dia vou ter de pegar o touro pelos ditos).
O ev3dev implementa um conjunto de drivers e uma API mais ou menos genérica que permite a várias linguagens tirarem partido do hardware. Mas a documentação é fraca (por falta de tempo e porque tanto os drivers como a API têm estado regularmente a sofrer alterações radicais) e nesta coisa do daisy chaining tb não há nada em concreto.

Com o ev3dev podemos usar MQTT (falámos disso na garagem) e distribuir tarefas pelos vários EV3 mas é preciso re-inventar a roda já que a API não tem conhecimento do MQTT nem de outros EV3 - tanto quanto sei fui o primeiro a usar MQTT com o ev3dev).

O Conchas não quer nada disso, não quer ter de desenvolver os seus próprios métodos de comunicação entre EV3. Eu percebo-o, já não tem idade para estas andanças por isso vem chagar os outros :)

Daquio que tenho andado a ver (confesso que o .Net API já não vejo há algum tempo) o único que pode fazer o que o Conchas quer é o LeJOS, através do conceito de mesh sobre uma Personal Area Network.
O LeJOS é essencialmente um servidor de Java sobre linux. Os responsáveis pelo projecto decidiram tirar partido de em linux ser fácil fazer uma PAN sobre vários "canais" TCP/IP (Wi-Fi, Bluetooth e USB) e incluíram na API uma forma de tirar partido de vários EV3 numa PAN. Eles chamam-lhe mesh em vez de daisy chaining mas é irrelevante desde que a API consiga "agregar" os motores e sensores de vários EV3.

Problema #1: eu mexi em LeJOS uma vez há uns 12 ou 13 anos, tanto eu como aquilo eramos muito imaturos na altura.

Problema #2: detesto Java que não seja mais que meia dúzia de linhas num ficheiro único invocado da linha de comando.

Esta história dos IDE's é muito gira mas é uma confusão danada quando mudamos de IDE e muda tudo, já quando vi pela primeira vez o Delphi isso me assustou um bocado, os primeiros Visual Basics e Visual C também eram uma confusão. É muito devido a isso que prefiro o python, basta um editor de texto básico e pronto.

Já consigo correr uns programas da treta num EV3. Tenho agora de meter LeJOS noutro EV3 e criar uma PAN. E depois experimentar o conceito global, à custa de google + copy&paste.

Mas os meus programas são basicamente acrescentar linhas à rotina main. Quando for necessário funções ou procedimentos, classes e objectos, não me sinto nada à vontade.

Re: [Mindstorms EV3] LeJOS

Enviado: 06 abr 2017, 10:38
por Conchas
A tua contribuição é inestimável!!  :fixe: :clapping:

Quanto aos ojetos e classes cá me hei-de desenrrascar. Os conceitos básicos são-me familiares, a sintaxe é que ainda nem por isso... :P

Re: [Mindstorms EV3] LeJOS

Enviado: 06 abr 2017, 10:51
por CyberX
[quote="Conchas"]
A tua contribuição é inestimável!!  :fixe: :clapping:
[/quote]

É perfeitamente estimável: 1 mini por cada 3 horas a queimar pestanas, arranja lá uma ventoínha Technic para as arrefeceres ;)

E tás com sorte, um sysadmin à hora custa muito mais (não que me paguem sequer 1/10 do que cobram pelos meus serviços).

Re: [Mindstorms EV3] LeJOS

Enviado: 06 abr 2017, 10:58
por Conchas
LOL :fixe: