LusoRobótica - Robótica em Português

Robótica => Discussão geral sobre robótica => Tópico iniciado por: Tayeb em 13 de Dezembro de 2009, 21:21

Título: Simulador RobotBasic
Enviado por: Tayeb em 13 de Dezembro de 2009, 21:21
Olá membros e visitantes,

Hoje quero introduzir-vos ao simulador gratuito de robótica RobotBasic. Entusiasmei-me tanto com este simulador que mandei vir da Amazon livros sobre o mesmo.

O que é afinal RobotBasic?

RobotBasic é uma linguagem de programação poderosa cheia de comandos e funções. Uma boa quantidade desses comandos e funções são específicos para simular o funcionamento de um robô móvel. Existe também a possibilidade de controlar um robô físico com o mesmo programa da simulação.

A linguagem segue a sintaxe da saudosa linguagem BASIC pelo que a curva de aprendizagem é extremamente curta. Com um simulador deste tipo podemos testar ideias e novos algoritmos de uma forma fácil.

O seguinte código implementa a simulação de um robô que segue a parede esquerda da arena do concurso Robô Bombeiro. A maior parte do código é para construir a arena

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Frobobombeiro.ipg.pt%2F_private%2Fimages%2FF%2FRBasic01.jpg&hash=8642a6277d095a9d2b2bd64be6038c4a474e1468)

Código: [Seleccione]
Código: Seleccionar Todos
//Variaveis globais

Ox = 150 //X do canto superior esquerdo da arena
Oy = 50 //Y do canto superior esquerdo da arena



//Cores dos diferentes elementos da arena
colorWall = Green
colorLine = White
colorStart = White
colorFloor = Black
colorCandleArea = White
colorCandle = Red
colorPen = Blue

//===========================================================
MainProgram:
   gosub DisplayInstructions
   gosub Arena
   gosub InitializeRobot
   gosub RobotControl
End
//===========================================================

InitializeRobot:

   rLocate Ox + 200, Oy + 45, 90 //Posição do robô
   rInvisible colorFloor, colorLine, colorStart, colorPen, colorCandleArea //Lista de cores invisiveis
   rPen Down, colorPen
   LineWidth 3
   rSlip 10
Return

//=============================================================

DisplayInstructions:
  data IM;"RB_Base.Bas"
  data IM;"Simulação do Robô Bombeiro."
  n = MsgBox(IM)
Return

//=============================================================

Arena:
  ClearScr Gray

  //Desenha o chão
  Rectangle Ox, Oy, Ox + 496, Oy + 496, colorFloor, colorFloor

  //Desenha as paredes exteriores
  Line Ox, Oy, Ox, Oy + 496, 3, colorWall //Left
  Line Ox, Oy, Ox + 496, Oy, 3, colorWall //Top
  Line Ox + 496, Oy, Ox + 496, Oy + 496, 3, colorWall //Right
  Line Ox, Oy + 496, Ox + 496, Oy + 496, 3, colorWall //Botom

  //Desenha 1º quarto
  Line Ox + 154, Oy, Ox + 154, Oy + 182, 3, colorWall
  Line Ox + 96, Oy + 182, Ox + 154, Oy + 182, 3, colorWall
  Line Ox + 3, Oy + 182, Ox + 93, Oy + 182, 3, colorLine //*** line ***

  //Desenha 2º quarto
  Line Ox, Oy + 274, Ox + 154, Oy + 274, 3, colorWall
  Line Ox + 154, Oy + 274, Ox + 154, Oy + 396, 3, colorWall
  Line Ox + 154, Oy + 399, Ox + 154, Oy + 493, 3, colorLine //*** line ***
 
  //Desenha 3º quarto
  Line Ox + 246, Oy + 314, Ox + 496, Oy + 314, 3, colorWall
  Line Ox + 246, Oy + 406, Ox + 246, Oy + 496, 3, colorWall
  Line Ox + 246, Oy + 317, Ox + 246, Oy + 403, 3, colorLine //*** line ***
   
  //Desenha 4º quarto
  Line Ox + 246, Oy + 92, Ox + 246, Oy + 214, 3, colorWall
  Line Ox + 246, Oy + 92, Ox + 398, Oy + 92, 3, colorWall
  Line Ox + 398, Oy + 92, Ox + 398, Oy + 214, 3, colorWall
  Line Ox + 398, Oy + 214, Ox + 342, Oy + 214, 3, colorWall
  Line Ox + 249, Oy + 214, Ox + 339, Oy + 214, 3, colorLine //*** line ***

  //Desenha círculo da posição de partida standard
  Circle Ox + 170, Oy + 16, Ox + 170 + 60, Oy + 16 + 60, colorStart, colorStart

  //Escolha aleatória da posição da vela
  candleBasePos = Random(9) + 1
 
  if (candleBasePos = 1)
    candleBaseOX = Ox + 3
    candleBaseOY = Oy + 3
    candleBaseDI = 270
    candleBaseDF = 90
    candleX = 1
    candleY = 1

  elseif (candleBasePos = 2)
    candleBaseOX = Ox + 154 - 2
    candleBaseOY = Oy + 3
    candleBaseDI = 180
    candleBaseDF = 90
    candleX = -1
    candleY = 1

  elseif (candleBasePos = 3)
    candleBaseOX = Ox + 246 + 3
    candleBaseOY = Oy + 92 + 3
    candleBaseDI = 270
    candleBaseDF = 90
    candleX = 1
    candleY = 1

  elseif (candleBasePos = 4)
    candleBaseOX = Ox + 398 - 1
    candleBaseOY = Oy + 92 + 3
    candleBaseDI = 180
    candleBaseDF = 90
    candleX = -1
    candleY = 1

  elseif (candleBasePos = 5)
    candleBaseOX = Ox + 496 - 2
    candleBaseOY = Oy + 314 + 3
    candleBaseDI = 180
    candleBaseDF = 90
    candleX = -1
    candleY = 1

  elseif (candleBasePos = 6)
    candleBaseOX = Ox + 496 - 1
    candleBaseOY = Oy + 496 - 1
    candleBaseDI = 90
    candleBaseDF = 90
    candleX = -1
    candleY = -1

  elseif (candleBasePos = 7)
    candleBaseOX = Ox + 3
    candleBaseOY = Oy + 496 - 1
    candleBaseDI = 0
    candleBaseDF = 90
    candleX = 1
    candleY = -1

  elseif (candleBasePos = 8)
    candleBaseOX = Ox + 3
    candleBaseOY = Oy + 274 + 3
    candleBaseDI = 270
    candleBaseDF = 90
    candleX = 1
    candleY = 1

  elseif (candleBasePos = 9)
    candleBaseOX = Ox + 154 - 1
    candleBaseOY = Oy + 274 + 3
    candleBaseDI = 180
    candleBaseDF = 90
    candleX = -1
    candleY = 1
  endif
     
  candleBaseR = 80;  //Raio do semicírculo que forma a zona da vela
  candleR = 5 //Raio da base da vela (corresponde à própria vela)
  candleX = candleX * 30 //Posição X da vela dentro do semicírculo
  candleY = candleY * 30 //Posição X da vela dentro do semicírculo
           
  //Desenha o semicírculo           
  Pie candleBaseOX - candleBaseR, candleBaseOY - candleBaseR, candleBaseOX + candleBaseR, candleBaseOY + candleBaseR, DtoR(candleBaseDI), DtoR(candleBaseDF), colorCandleArea, colorCandleArea
 
  //Desenha a vela (substituir por um beacon)
  Circle candleBaseOX + candleX - candleR, candleBaseOY + candleY - candleR, candleBaseOX + candleX + candleR, candleBaseOY + candleY + candleR, colorCandle, colorCandle
Return

//===========================================================

RobotControl:
  //Subrotina para controlar o robô

  gosub SeguirParedeEsquerda

Return

//===========================================================


SeguirParedeEsquerda:
  dist1 = 40
  dist2 = 50

  rForward 50
  Linhas = 0

  while true
    if(rRange(0) <= 30)
      rTurn 90
    elseif (rRange(-90) >= dist1) and (rRange(-90) <= dist2)
      rForward 1
    elseif (rRange(-90) <= dist1)
        rTurn 1       
        rForward 1
    elseif rRange(-90) >= dist2
        rTurn -1 
        rForward 1     
    endif 

    if(rSense(white) & 2)
      Linhas = Linhas + 1
      rForward 5
      XYstring 10, 10, "Linhas: " + Linhas
    endif   
  wend
return


Experimentem! O programa é gratuito e pode ser puxado do site http://www.robotbasic.org/ (http://www.robotbasic.org/)

Eis um vídeo de uma simulação mais sofisticada em que é simulado um robô bombeiro que detecta e apaga a vela.

Simulação RB 01 (http://www.youtube.com/watch?v=E1x7Gv5Uzqc&feature=player_embedded#)

-----------------------------

Texto cortesia de:

Simulador RobotBasic
por Carreto em Segunda Ago 31, 2009 10:45 pm
fonte do texto: http://robobombeiro.ipg.pt/forum/viewtopic.php?f=10&t=87 (http://robobombeiro.ipg.pt/forum/viewtopic.php?f=10&t=87)
--------------------

Tayeb



Título: Re: Simulador RobotBasic
Enviado por: Fifas em 13 de Dezembro de 2009, 21:37
Muito bom post Tayeb ;)

Vou testar isso :)
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 13 de Dezembro de 2009, 21:46
Acredite Fifas que vai achar o programa muito interessante e com grandes potencialidades.
Título: Re: Simulador RobotBasic
Enviado por: microbyte em 13 de Dezembro de 2009, 22:59
Parece-me muito interessante. ;)
Pergunto-me quando está para vir um RobotArduino.  :D
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 14 de Dezembro de 2009, 01:58
Parece-me muito interessante. ;)
Pergunto-me quando está para vir um RobotArduino.  :D

Acho que microbyte está a querer dizer quando haverá um simulador para Arduino?

Efectivamente RobotBasic pode comunicar com qualquer microcontrolador.

O comando  SerialOut pode ser usado para enviar qualquer sequência de bytes a qualquer báudio (vêr SetCommPort)  e permitir assim o controlo de qualquer microcontrolador. Existem ainda os comandos SerIn e SerOut.

Veja os seguintes dois documentos de RobotBASIC para BasicStamp,:
 
http://www.robotbasic.org/resources/RobotBASIC_Serial_IO.pdf (http://www.robotbasic.org/resources/RobotBASIC_Serial_IO.pdf)

e

http://www.robotbasic.org/resources/RobotBASIC_To_BS2_Comms.pdf (http://www.robotbasic.org/resources/RobotBASIC_To_BS2_Comms.pdf)

Os comandos podem ser facilmente adaptados ao Arduino.

Tayeb

 
Título: Re: Simulador RobotBasic
Enviado por: microbyte em 14 de Dezembro de 2009, 08:29
Hmm... Pensei que não tivesse comm serial.
Pensei que fosse mesmo só simulador.

Isso parece fixe.
Nas férias tenho de testar.  ;)
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 14 de Dezembro de 2009, 12:23
O nooso moderador Fifas, o Ricardo e o nosso Admin Tiago vão adorar o que encontrei:

Trata-se de uma aplicação de um sistema de controlo PID, implementado em RobotBASIC, e utilizado para controlar um modelo de Estação Espacial, assim como a respectiva simulação do processo no écrã do PC:

RobotBASIC Control Application (http://www.youtube.com/watch?v=oxqlTaJy31M#)

Tal como se diz em inglês: awsome!

Tayeb
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 14 de Dezembro de 2009, 12:48
E mais um vídeo de aplicação de Visão Robótica com RobotBASIC, simplesmente de novo "awesome!":

Robot Vision with RobotBASIC (http://www.youtube.com/watch?v=LwvspYFXJMM#)
Título: Re: Simulador RobotBasic
Enviado por: microbyte em 14 de Dezembro de 2009, 13:08
Gostei muito do projecto da estação espacial ;)
Estou a começar a achar piada ao RobotBasic.

Agora vou ter mesmo de testar.
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 14 de Dezembro de 2009, 13:14
Gostei muito do projecto da estação espacial ;)
Estou a começar a achar piada ao RobotBasic.

Agora vou ter mesmo de testar.

Talvez se se tornar um perito, nos juntemos para dar uma formação aos membros deste espaço. Estou a imaginar muitas coisas com RobotBASIC!
Título: Re: Simulador RobotBasic
Enviado por: guibot em 14 de Dezembro de 2009, 15:16
Procuro uma coisa semelhante desde que me iniciei na robótica! Isto é absolutamente fantástico!!
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 14 de Dezembro de 2009, 15:35
Procuro uma coisa semelhante desde que me iniciei na robótica! Isto é absolutamente fantástico!!

Acredite Guilherme que para mim tem sido uma revelação e a também admiro a generosidade dos autores que oferecem gratuitamente o software e que mostram muita dedicação no seu desenvolvimento.

Vale o esforço aprender a usar esta poderosa ferramenta. Quando receber os livros que encomendei, mostrá-los-ei a sí.
Título: Re: Simulador RobotBasic
Enviado por: microbyte em 14 de Dezembro de 2009, 15:47
Era bom uma versão para Mac ;)
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 14 de Dezembro de 2009, 16:15
Talvez se consiga emular para o Mac?
Título: Re: Simulador RobotBasic
Enviado por: microbyte em 14 de Dezembro de 2009, 16:22
Sim, no site diz que dá por Virtual Machine.
Mas isso é batota...  :P
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 14 de Dezembro de 2009, 16:39
A realidade é que o mercado de Mac é inferior. Neste caso ainda é mais difícil para os autores do software que oferecem RobotBASIC gratuitamente. Desenvolvimento envolve esforço adicional e é o que teriam que fazer para o Mac.
Título: Re: Simulador RobotBasic
Enviado por: guibot em 14 de Dezembro de 2009, 17:25
Com o VMware funciona perfeitamente.
Título: Re: Simulador RobotBasic
Enviado por: microbyte em 14 de Dezembro de 2009, 20:26
Com o VMware funciona perfeitamente.
Sim, vou usar esse...
Mas não gosto muito de o fazer... Não gosto muito da ideia de ter Windows num Mac.  :P É estragar...  :D
Título: Re: Simulador RobotBasic
Enviado por: Tayeb em 14 de Dezembro de 2009, 20:41
É o velho problema de SO. Há uns anos atrás quis remover Windows da minha empresa e mudar para Linux. Porém, não havia soluções para todas as aplicações que temos que usar, assim tivemos que engolir com o Windows.

Ainda continuamos com XP. Mas um dia teremos mesmo que dar o salto para SO mais recente porque os aplicativos deixarão de funcionar. É assim a vida!