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
-
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: 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
-
Muito bom post Tayeb ;)
Vou testar isso :)
-
Acredite Fifas que vai achar o programa muito interessante e com grandes potencialidades.
-
Parece-me muito interessante. ;)
Pergunto-me quando está para vir um RobotArduino. :D
-
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
-
Hmm... Pensei que não tivesse comm serial.
Pensei que fosse mesmo só simulador.
Isso parece fixe.
Nas férias tenho de testar. ;)
-
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
-
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#)
-
Gostei muito do projecto da estação espacial ;)
Estou a começar a achar piada ao RobotBasic.
Agora vou ter mesmo de testar.
-
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!
-
Procuro uma coisa semelhante desde que me iniciei na robótica! Isto é absolutamente fantástico!!
-
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í.
-
Era bom uma versão para Mac ;)
-
Talvez se consiga emular para o Mac?
-
Sim, no site diz que dá por Virtual Machine.
Mas isso é batota... :P
-
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.
-
Com o VMware funciona perfeitamente.
-
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
-
É 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!