LusoRobótica - Robótica em Português

Robótica => Tutoriais => Tópico iniciado por: AcidDagger em 18 de Setembro de 2010, 00:13

Título: Controlar um robot entre dois computadores em rede
Enviado por: AcidDagger em 18 de Setembro de 2010, 00:13
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fmakebits.net%2Fwp-content%2Fuploads%2F2010%2F09%2FNetworkScheme.png&hash=1ded4630aca03001da04e4b04ea05f487df7aec5)

Para controlares um Robot por ligação serial com um computador a partir de outro em rede é relativamente simples. Apenas precisas de dois computadores ligados numa rede ad hoc, umas aplicações em processing e um arduino ou um picaxe.

http://makebits.net/controlar-um-robot-com-dois-computadores-numa-rede-ad-hoc/ (http://makebits.net/controlar-um-robot-com-dois-computadores-numa-rede-ad-hoc/)

Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: andre_f_carvalho em 18 de Setembro de 2010, 00:36
isto abre as portas na programação a muita gente, neste caso a mim no picaxe

um avé ao XicoMBD ;D

quando vier o meu programador de usb para o picaxe, começo logo a fazer coisas destas :D

Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: AcidDagger em 18 de Setembro de 2010, 01:23
já vi por aqui alguns membros a quererem transmitir entre duas aplicações em processing.  :)
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: andre_f_carvalho em 18 de Setembro de 2010, 15:10
já vi por aqui alguns membros a quererem transmitir entre duas aplicações em processing.  :)

por acaso post sobre duvidas disso é o que não falta
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: GnGz em 18 de Setembro de 2010, 17:24
Em vb nao e dificil....
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: AcidDagger em 18 de Setembro de 2010, 20:15
mas o que está na berra é o processing  8)
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: VascoP em 19 de Setembro de 2010, 00:17
Eu não gosto nada de processing... Pode-se dizer que é mais fácil, mas se é para ser fácil há outras linguagens que também não são nada complicadas e facilitam imenso o desenvolvimento como se falou aqui de vb e c# por exemplo. Se não é por ser fácil mas por ter controlo então c/c++.

Não percebo a moda do processing mesmo...
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: senso em 19 de Setembro de 2010, 12:34
E vão dois, é java simplificado, mas para fazer um botão é um atrofio, um slider a mesma coisa, visual c é gratutio e é bem mais facil de montar um gui e ter estabilidade com c/c++ que com java, só para meter o processing a trabalhar no ubuntu é preciso dar um monte de voltas para mais que é muito instavel.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: GnGz em 19 de Setembro de 2010, 12:39
E vão dois, é java simplificado, mas para fazer um botão é um atrofio, um slider a mesma coisa, visual c é gratutio e é bem mais facil de montar um gui e ter estabilidade com c/c++ que com java, só para meter o processing a trabalhar no ubuntu é preciso dar um monte de voltas para mais que é muito instavel.

Com o netbeans e dificil?

P.s: tou sem acentos
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: senso em 19 de Setembro de 2010, 12:44
Para que inventar se é só ires ao site da microsoft e sacar o visual studio express e está feito, para que inventar a montar um ide e depois ir buscar o compilador mais não sei onde, é que visual c tem milhões de exemplos na internet e uma documentação brutal.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: GnGz em 19 de Setembro de 2010, 12:59
Para que inventar se é só ires ao site da microsoft e sacar o visual studio express e está feito, para que inventar a montar um ide e depois ir buscar o compilador mais não sei onde, é que visual c tem milhões de exemplos na internet e uma documentação brutal.

Sim ... mas nao e multiplantaforma... se for algo multiplantaforma ganha o java.... Eu gosto muito de VB.net
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: senso em 19 de Setembro de 2010, 13:39
Ganha o java, mais ou menos...
Corre lá sketchs complexos de processing em liniux(ubuntu no meu caso), crash o pc todo, java não é 100% compatível com tudo nem é open-source, é uma linguagem interpretada, logo é sempre mais lenta que uma linguagem compilada, é basicamente um c castrado sem ponteiros e mais lento, já tive cadeiras de java e não vejo vantagens sobre o c.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: AcidDagger em 19 de Setembro de 2010, 16:30
E vão dois, é java simplificado, mas para fazer um botão é um atrofio, um slider a mesma coisa, visual c é gratutio e é bem mais facil de montar um gui e ter estabilidade com c/c++ que com java, só para meter o processing a trabalhar no ubuntu é preciso dar um monte de voltas para mais que é muito instavel.

É  facil de se fazer um botão em processing ;)

é só usar a função MousePressed
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: GnGz em 19 de Setembro de 2010, 18:29
Ganha o java, mais ou menos...
Corre lá sketchs complexos de processing em liniux(ubuntu no meu caso), crash o pc todo, java não é 100% compatível com tudo nem é open-source, é uma linguagem interpretada, logo é sempre mais lenta que uma linguagem compilada, é basicamente um c castrado sem ponteiros e mais lento, já tive cadeiras de java e não vejo vantagens sobre o c.

O netbeans nao aceita c.... o problema e se o ide deixa fazer os guis de forma como o visual studio... tipo em java da' mas nao sei se da' em C/c++.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: VascoP em 19 de Setembro de 2010, 22:39
Para que inventar se é só ires ao site da microsoft e sacar o visual studio express e está feito, para que inventar a montar um ide e depois ir buscar o compilador mais não sei onde, é que visual c tem milhões de exemplos na internet e uma documentação brutal.

Sim ... mas nao e multiplantaforma... se for algo multiplantaforma ganha o java.... Eu gosto muito de VB.net

A conversa do não ser multiplataforma já oiço à muito tempo e sinceramente não me diz nada. E principalmente do ponto de vista desta robótica e programação "caseira" dos hacks e brincadeiras, em que muitas vezes programo para mim, faço o que quero como quero e bem entendo, eu sei à partida em que SO vou trabalhar e portanto tou-me a borrifar se vai correr noutro, porque nem vou usar!

Multiplataforma acho importante na indústria, e mesmo aí muitas vezes se vê que o software não só é todo proprietário como muitas vezes também não é multiplataforma...
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: msr em 19 de Setembro de 2010, 22:43
Citar
já tive cadeiras de java e não vejo vantagens sobre o c
:o Really?! Então e o conceito de OOP? E o garbage collector? São duas linguagens bastante diferentes que competem em campeonatos completamente diferentes. Ambas têm vantagens e desvantagens, depende do tipo de aplicação.

Acho Processing uma ferramenta brutal. As comparações que aqui fizeram até ao momento não me parecem válidas. Processing não é uma linguagem portanto não faz sentido comparar a outras. Processing não foi feito com o objectivo de tornar fácil a concepção de "GUIs clássicos" tal como faz o Visual Studio.

Há muitas coisas que em Processing se fazem em 2 ou 3 linhas e que noutro tipo de aplicação envolveria muito mais código e conhecimento. É isso que está em causa. Basta ver os exemplos que o Processing traz. Não me apetece aprender OpenGL só para desenhar meia duzia de quadrados, por exemplo. Se o Processing permite coisas fantásticas com poucas linhas de código, porque não usa-lo?

Já testaram Processing com "olhos de ver", ou estão só a mandar bitaites para o ar do que vos parece ser?
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: senso em 19 de Setembro de 2010, 22:59
Já brinquei um bocadinho com ele, e não só para mandar bitaites.
É assim, para o que eu faço e para o que uso, para mim venha o c inves do java.
Mesmo a história do multi-plataforma não é assim, no nosso caso em que queremos usar por exemplo uma porta serial, no windows é uma com e em linux é um/dev/tty* logo só nisso apesar de o código correr nos dois lados serial nunca funciona.
Nunca tirei partido dos objectos nem nunca percebi realmente o conceito de objecto, sim as cadeiras exploram assim tanto o potencial do java, o java é usado como ferramenta de introdução á programação e como tal não é explorado a fundo, no primeiro semestre usamos Java doctor e a sua linha de comandos para interagir com os programas que pouco passam de manipular umas strings e diferenças na eficiencia de algoritmos de ordenação, no segundo semestre passamos para ubuntu e usar a consola e é um semestre inteiro a martelar em sistemas de ficheiros e métodos de armazenamento, arvores binárias e companhia, hash tables, coisas assim meio random lol.
Sim, usar o moussePressed numa zona da janela dá-te um botão, mas eu gosto de ter o visual bonito dos botões feitos por exemplo em visual c.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: VascoP em 20 de Setembro de 2010, 00:33
Os conceitos de OOP tens em c++, e quanto ao garbage collector o único contacto que tive foi em C# e aquilo simplesmente dá jeito mas como fui ensinado em C eu tou sempre a pensar em libertar a memória que aloco, e por isso o garbage collector não me tira grande peso da consciência  :P

No entanto concordo com msr num ponto, o Processing é óptimo para quem quer fazer coisas semi complicadas sem saber nada do que se passa por baixo. No entanto, desvalorizo um pouco, porque chega a um ponto em que estaremos a fazer coisas tipo:

robot_autonomo(start);

E sem saber nada de nada do que lá anda por baixo!
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: msr em 20 de Setembro de 2010, 21:55
Bem eu continuo a achar que ainda não tiveram foi oportunidade de dar bom uso ao Processing ;D

Na minha opinião, não é uma questão de "fazer sem saber o que está por baixo". Isso é verdade, mas o que interessa, pelo menos a mim, são os resultados. E o Processing é uma ferramenta extremamente util nesse sentido. Em todas as vezes que o usei foi para fazer interfaces "não clássicas". Dois exemplos: desenhar uma breadboard virtual 3D que se move consoante uma breadboard real com um acelerómetro a ela ligado; dar aspecto visual a um projecto que fiz sobre programação evolutiva. Nestes dois exemplos, o que menos me interressou foi perceber como o OpenGL funciona ao pormenor, ou como o Processing funciona "por trás", até porque não era esse o objectivo de nenhum dos trabalhos.

Quanto ao não precisar de Garbage Collector. Isso é muito bonito de se dizer mas, se para sistemas com poucos recursos é verdade (e mesmo assim...), não é tanto para aplicações para computadores modernos. Uma aplicação "decente" feita em C++ em geral tem dezenas de milhares de linhas de código, e como o ser humano não é imune a falhas, por mais bom que sejas, elas aparecem. O garbage collector é uma vantagem porque trata disso automaticamente, e consequentemente, dá-te mais produtividade enquanto programador. Dá-te mais espaço para te preocupares apenas com o essencial. É milhões de vezes mais fácil arranjares "memory leaks" em C++ do que em Java.

Resumindo: acho que não é justo dizer que qualquer uma destas ferramentas "não vale a pena"; seja o Processing ou qualquer uma destas linguagens, a meu ver, são todas excelentes; dependendo do uso e aplicação que se lhe dá.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: VascoP em 21 de Setembro de 2010, 07:37
Em milhares de linhas de código é tão normal tratares de leaks de memória como de outro problema qualquer. Existem debuggers para leaks de memória que facilitam muito o projecto (valgrind por exemplo).

No entanto aceito que para a parte gráfica o Processing poderá ter as suas vantagens.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: msr em 21 de Setembro de 2010, 11:25
Em milhares de linhas de código é tão normal tratares de leaks de memória como de outro problema qualquer.

Se assim fosse, porque teriam inventado o garbage collector?
Eu consigo-te perceber, até porque vimos do mesmo sitio (MEEC-IST), onde as "fundações" são todas em C (e bem, a meu ver).
Mas na verdade, para aplicações complexas e críticas, e em que não seja tão importante a rapidez do código, Java ou linguagens com garbage collector são mais seguras.



Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: Tayeb em 21 de Setembro de 2010, 11:40
Citar
já tive cadeiras de java e não vejo vantagens sobre o c
:o Really?! Então e o conceito de OOP? E o garbage collector? São duas linguagens bastante diferentes que competem em campeonatos completamente diferentes. Ambas têm vantagens e desvantagens, depende do tipo de aplicação.

Acho Processing uma ferramenta brutal. As comparações que aqui fizeram até ao momento não me parecem válidas. Processing não é uma linguagem portanto não faz sentido comparar a outras. Processing não foi feito com o objectivo de tornar fácil a concepção de "GUIs clássicos" tal como faz o Visual Studio.

Há muitas coisas que em Processing se fazem em 2 ou 3 linhas e que noutro tipo de aplicação envolveria muito mais código e conhecimento. É isso que está em causa. Basta ver os exemplos que o Processing traz. Não me apetece aprender OpenGL só para desenhar meia duzia de quadrados, por exemplo. Se o Processing permite coisas fantásticas com poucas linhas de código, porque não usa-lo?

Já testaram Processing com "olhos de ver", ou estão só a mandar bitaites para o ar do que vos parece ser?

Quero só aqui apoiar msr sobre a questão do uso de Processing.

Recentemente publiquei informação de dois  projectos que seriam muito mais trabalhosos se não fossem Processing e Mobile Processing (o segundo derivado do primeiro). Como termo de comparação pareceu-me imenso puzzle, de como é que de repente a câmara Webcam na minha aplicação de Picaxe na Internet começou a funcionar em ambiente Java. Ontem com JMF parecia que a câmara não ia arrancar. Hoje com a cabeça fresca arrancou. Só quero dizer que se temos ferramentas que nos possam poupar tempo, essas devem ser utilizadas e devemos concentrar-nos no que importa. Sempre podemos regressar ao básico noutras oportunidades.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: metRo_ em 21 de Setembro de 2010, 12:39
msr, poderias criar um topico sobre o projecto da criação da breadboard em 3d e o seu controlo através de um acelerometro externo na breadboard real?
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: XicoMBD em 21 de Setembro de 2010, 14:35
O processing até pode ser "fraquinho", mas para alguém como eu que nunca teve programação na sua vida é muito útil. É fácil de aprender e de utilizar e tem montes de bibliotecas contribuídas disponíveis.
Para desenvolver as duas aplicações do meu tutorial que o AcidDagger aqui traduziu não tive problemas nenhuns, apenas tive de juntar e adaptar uns quantos exemplos.
Aliás, quantos aos GUI, o primeiro projecto que fiz assim que recebi o meu arduino foi este http://lusorobotica.com/index.php?topic=2703.msg27022#msg27022 (http://lusorobotica.com/index.php?topic=2703.msg27022#msg27022) que embora não tenha o aspecto tradicional de um programa, para o ter bastava pôr umas imagenzitas bonitas no fundo e por cima dos botões.
Portanto, como até agora não tenho razões de queixa do processing e como por agora não me interessa saber o que esta por detrás, até porque muito provavelmente não o entenderia, para mim, desde que dê resultados o processing serve perfeitamente.  ::)
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: VascoP em 21 de Setembro de 2010, 15:26
Em milhares de linhas de código é tão normal tratares de leaks de memória como de outro problema qualquer.

Se assim fosse, porque teriam inventado o garbage collector?
Eu consigo-te perceber, até porque vimos do mesmo sitio (MEEC-IST), onde as "fundações" são todas em C (e bem, a meu ver).
Mas na verdade, para aplicações complexas e críticas, e em que não seja tão importante a rapidez do código, Java ou linguagens com garbage collector são mais seguras.

Bom, a razão pela qual foi inventado é óbvia: para teres menos trabalho. No entanto não quer dizer que não usar este recurso seja errado ou um desperdício.

Mas a questão principal sobre o Processing prende-se com o objectivo que cada um tem com estes projectos que fazemos por aqui. Há quem queira um produto final, que funcione, e há quem queira aprender como funciona. Claro que não preciso exagerar e ir construir um computador só porque quero programar (mas há quem o faça: link (http://hackaday.com/2010/09/05/self-playing-bayan-built-nearly-22-years-ago/)) mas pessoalmente dá-me gosto saber que o que faço, sei como funciona...

Claro que as duas formas de encarar a questão são válidas na medida em que um hobby é um hobby e cada um tira prazer disto como quer!
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: Tayeb em 21 de Setembro de 2010, 16:50
Caro Vasco,

Há muito a aprender em criar bibliotecas para o Processing. E pode ligar Prcoessing com Eclipse e outras plataformas de desenvolvimento em JAVA, e mais.

Leu o tópico que coloquei aqui sobre o Conhecimento? Aqui está o link:

http://lusorobotica.com/index.php?topic=2813.0 (http://lusorobotica.com/index.php?topic=2813.0)

Tayeb

Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: VascoP em 21 de Setembro de 2010, 19:27
Tayeb, penso que o que se discute aqui é a utilização do Processing como meio para programar sem saber de onde aparecem as funções. Dizer que há muito a aprender em criar bibliotecas tem a sua validade mas para o utilizador comum de que falo, que vai aos exemplos, copia código e quanto muito retalha umas coisinhas é um pouco rebuscado.

Quanto à filosofia, já tive a minha dose, mas obrigado pelo sentimento  :P
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: Tayeb em 21 de Setembro de 2010, 20:20
Concordo plenamente consigo. Mas como dizem os chineses a jornada de mil milhas começa com o primeiro passo.

Sei lá! Piscar LEDs, a seguir um pouco de controle com botões de pressão, depois porque não sensores, etc.

Cedo estamos a mexer com coisas que não funcionam, ou como queremos que funcionem e aí em diante.

O conhecimento é assim mesmo, vamos investigando, aprendendo e fazendo coisas novas.

Uns são guiados e aprendem por meios científicos, outros bate, bate, tenta, tenta e lá conseguem. É assim! Cada um com sua história!

Hoje em dia ninguém pode dizer que não sabe porque não aprendeu. Quer aprender? Tem aí, mil e uma maneiras de aprender!
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: msr em 21 de Setembro de 2010, 23:55
Citar
penso que o que se discute aqui é a utilização do Processing como meio para programar sem saber de onde aparecem as funções

Se não for indiscrição, estás a pensar fazer POO? Acho que ias achar interessante.

Processing é uma ferramenta! Se queres aprender a programar, aprendes uma linguagem. O Processing usa Java. Basta programares em Java (puro) para não saberes o que está por baixo. Chama-se a isso abstracção, e é uma vantagem em muitas situações. A propria programação orientada a objectos baseia-se nisso: não precisas saber ao pormenor como funcionam os objectos, precisas apenas de conhecer os métodos que tem disponíveis.

Se quiseres levar o "não saber de onde aparecem as funções" ao extremo, vais parar ao assembly, o que, em grandes aplicações não deve ser nada agradável, nem muito legível. O próprio C ou C++ têm "standard libraries" que creio que não te passará pela cabeça analisar a "pente fino" para perceber em concreto o que é feito.



Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: VascoP em 22 de Setembro de 2010, 07:23
Não, não estou a pensar fazer POO simplesmente porque já trabalhei com classes, e não me parece que valha a pena "gastar" uma disciplina com isso, quando há montes de outras mais interessantes, em que o conteúdo é mais difícil de aprender sozinho...

E msr, eu não estou a dizer que a abstracção não é óptima, o que estou a dizer é que, e dando um exemplo concreto, acho importante se ter uma noção de sockets, quando se faz um servidor TCP para comunicar entre dois PC's, ao invés de "create_server()". Óbvio que é excelente poder fazer "create_server()" se não tivermos paciência ou mesmo tempo para ir aprender, mas pronto, é uma implicação minha.

Já nem digo mais nada que parece que o pessoal está a ficar ofendido  :(
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: msr em 22 de Setembro de 2010, 11:40
Ofendido? Nada disso. Cada um tem direito à sua opinião. Seja qual for, respeita-se. Estamos aqui com uma discussão geek que nada tem a ver com questões pessoais.

Mas mais uma vez apetece-me argumentar ;D

Depende do tipo de aplicação. Se estiveres a fazer algo baseado num servidor TCP embebido num microcontrolador (por exemplo) convém saberes pormenores de baixo nível. Se estiveres a fazer uma aplicação de "alto nivel", por exemplo em C#, podes simplesmente usar um TcpListener. E confiar nele, pois faz parte da base library (ou lá como se chama) e está mais que testada e acreditada. Tal como o printf(), o fork(), etc que usas em C e que não colocas em causa.

Não é uma questão de paciência. Tu até podes saber como se faz em C, e isso é excelente, mas se estás a fazer em algo em C#, de alto nível, só se fores mazoquista (acho eu) é que vais querer fazer um "TcpListener" teu (até porque, muito provavelmente não ficará tão bom). Ele já existe, e com garantias de bom funcionamento, é só usá-lo. É uma questão de produtividade.
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: VascoP em 22 de Setembro de 2010, 17:57
Ofendido? Nada disso. Cada um tem direito à sua opinião. Seja qual for, respeita-se. Estamos aqui com uma discussão geek que nada tem a ver com questões pessoais.

Mas mais uma vez apetece-me argumentar ;D

Depende do tipo de aplicação. Se estiveres a fazer algo baseado num servidor TCP embebido num microcontrolador (por exemplo) convém saberes pormenores de baixo nível. Se estiveres a fazer uma aplicação de "alto nivel", por exemplo em C#, podes simplesmente usar um TcpListener. E confiar nele, pois faz parte da base library (ou lá como se chama) e está mais que testada e acreditada. Tal como o printf(), o fork(), etc que usas em C e que não colocas em causa.

Não é uma questão de paciência. Tu até podes saber como se faz em C, e isso é excelente, mas se estás a fazer em algo em C#, de alto nível, só se fores mazoquista (acho eu) é que vais querer fazer um "TcpListener" teu (até porque, muito provavelmente não ficará tão bom). Ele já existe, e com garantias de bom funcionamento, é só usá-lo. É uma questão de produtividade.

O ponto fundamental da minha opinião é mesmo achar que não é masoquista! Claro que os motivos serão puramente académicos (aprendizagem)! Aliás, esmiuçar funções e classes já feitas e consideradas como fundamentais pode ser muito bom para aperfeiçoar o conhecimento da linguagem. Volto a repetir, tudo depende da abordagem que se tem destes nossos projectos...
Título: Re: Controlar um robot entre dois computadores em rede
Enviado por: senso em 22 de Setembro de 2010, 23:16
Mas por exemplo num micro-controlador com pouca memória se calhar fazer um printf que te come quase 2Kb de flash custa-te e ai fazer o teu próprio putchar que ocupa 10 bytes.