3.2 Glowworm Swarm Optimization
4.1.1 Locomo¸c˜ao
Uma caracter´ıstica importante do Kilobot ´e que este usa dois motores de vibra¸c˜ao em forma de cunha selados com trˆes perna para a locomo¸c˜ao. A locomo¸c˜ao ´e gerada gra¸cas a vibra¸c˜ao dos motores que geram uma for¸ca centr´ıpeta que ´e convertida, em movimento, onde o centro de gravidade do robˆo ´e o centro dos motores e n˜ao o centro do Kilobot. Esta estrat´egia ´e adotada do princ´ıpio da locomo¸c˜ao de stick-slip (Rubenstein et al., 2014).
Os motores de vibra¸c˜ao podem ser controlados com diferentes n´ıveis de intensidade, existindo 256 n´ıveis. Quando o motor de vibra¸c˜ao da direita ´e ativado, na intensidade suficiente para combater a for¸ca gravitacional, e o motor da esquerda permanece
4.1. DESCRIC¸ ˜AO DO ROB ˆO KILOBOT 29
desativo, o robˆo gira no sentido hor´ario. Por outro lado, robˆo gira no sentido anti- hor´ario quando o motor esquerdo ´e ativo, na intensidade suficiente, e o motor da direita permanece desativo. Operando os dois motores com a mesma intensidade, e com intensidade suficiente para combater a for¸ca gravitacional, este move-se para a frente. Neste caso ´e necess´ario que os motores estejam bem calibrados, de modo a que a dire¸c˜ao do robˆo seja a pretendida. Os valores da calibra¸c˜ao espec´ıfica do robˆo s˜ao armazenados na EEPROM.
A estrat´egia de deslocamento convencional, que utiliza uma (ou mais) unidade(s) diferencial de rodas, ´e mais precisa. No entanto, a sua implementa¸c˜ao ´e mais cara, existindo maior complexidade do hardware e tamanho do robˆo, (Tharin,2016;
Rubenstein et al.,2014).
4.1.2
Comunica¸c˜ao e Sensoriamento
A maioria dos algoritmos de robˆos coletivos utiliza a comunica¸c˜ao local e dete¸c˜ao, como a distˆancia, localiza¸c˜ao e informa¸c˜ao necess´aria dos comportamentos dos seus vizinhos. Deste modo, os Kilobot tamb´em s˜ao capazes de comunicar e obter informa- ¸c˜ao sobre a localiza¸c˜ao f´ısica dos mesmos. Embora a dete¸c˜ao seja limitada, em que a distˆancia aos seus vizinhos ´e a ´unica forma de dete¸c˜ao, i.e., s´o deteta os seus robˆos vizinhos e n˜ao deteta outros tipos de objetos no ambiente.
Na comunica¸c˜ao cada Kilobot cont´em um LED transmissor infravermelho e o foto- d´ıodo recetor infravermelho, localizado no centro do PCB do lado inferior do Kilobot. O transmissor e o recetor efectuam uma transmiss˜ao e rece¸c˜ao de forma isotr´opica, o que significa que os Kilobots transmitem e recebem mensagens em todas as dire¸c˜oes. Tanto o transmissor como o recetor s˜ao de ˆangulo amplo, com um ˆangulo de meia potˆencia de 60o em rela¸c˜ao ao eixo vertical apontando para baixo do robˆo. Quando o
transmissor est´a ativo, todos os robˆos vizinhos podem receber o feixe de luz emitida pelo robˆo, sendo o feixe transmitindo, de seguida refletido pela mesa (ver Figura
4.3).
As mensagens s˜ao transmitidas em pulsos, de acordo com a t´ecnica de codifica¸c˜ao padr˜ao. Com este m´etodo de comunica¸c˜ao simples, a comunica¸c˜ao ´e realizada a uma taxa de 32kb/s com robˆos remotos 10cm, ou o equivalente a trˆes robˆos juntos. O Kilobot comunica com os seus vizinhos enviando mensagens com um tamanho de 3bytes. Para enviar mais informa¸c˜ao, deve-se enviar v´arias mensagens. Como todos os Kilobots usam o mesmo canal infravermelho para a comunica¸c˜ao, n˜ao existe a possibilidade de dois ou mais Kilobot possam transmitir ao mesmo tempo. No entanto, ´e poss´ıvel e at´e mesmo comum que dois ou mais Kilobot poderem transmitir ao mesmo tempo. Para ultrapassar este problema o m´etodo usado ´e o acesso m´ultiplo (Carrier sense multiple access with collision avoidance - CSMA/CA) com verifica¸c˜ao de portadora com anula¸c˜ao/preven¸c˜ao de colis˜ao. Mesmo com CSMA/CA, num ambiente com muitos Kilobot, devido as colis˜oes a largura de banda ter´a que ser reduzida.
Na comunica¸c˜ao entre Kilobots, o recetor calcula a distˆancia ao Kilobot transmissor atrav´es da medi¸c˜ao da intensidade do sinal de infravermelhos recebido, s´o podendo ser calculada pelo robˆo recetor. A intensidade do sinal de infravermelhos na entrada do robˆo recetor ´e uma fun¸c˜ao mon´otona decrescente da distˆancia entre o transmissor e o recetor. No entanto, na pr´atica, a intensidade ´e tamb´em dependente na superf´ıcie do solo (se este reflete mais ou menos radia¸c˜ao infravermelha), ru´ıdo, varia¸c˜oes de fabrica¸c˜ao e a luminosidade do ambiente.
4.2. OVERHEAD CONTROLLER 31
Existe um sensor de luminosidade em cada um robˆo, que deteta a intensidade de luz ambiente brilhante em cada Kilobot, pode ser ´util para outras aplica¸c˜oes, mas tamb´em ´e utilizado para aumentar a precis˜ao do c´alculo da distˆancia a uma precis˜ao de ±2mm.
Adicionalmente, o robˆo cont´em um sensor de tens˜ao, que fornece informa¸c˜oes sobre a tens˜ao da sua bateia (Tharin,2016;Rubenstein et al.,2014;Cornejo and Rubenstein,
2013; University).
4.2
Overhead Controller
Na manipula¸c˜ao de grandes grupos de robˆos, pode tornar-se tedioso ou mesmo imposs´ıvel manipular os robˆos, se estes exigirem um operador humano para interagir com cada um dos robˆos e um de cada vez. Algumas dessas intera¸c˜oes individuais podem incluir a¸c˜oes como ligar a energia do robˆo ou desligar, conectar um cabo para programar ou carregar o robˆo e iniciar, pausar ou parar o programa em execu¸c˜ao no robˆo. Esta se¸c˜ao, elucida como um Kilobot n˜ao requer aten¸c˜ao individual para opera¸c˜oes coletivas normais, i.e., ´e um robˆo escal´avel. De modo a permitir que um ´unico utilizador opere o coletivo de forma escal´avel, os Kilobot s˜ao controlados por um dispositivo chamado de controlador a´ereo OHC, ver Figura 4.4), este envia mensagens para todos os Kilobots na ´area de teste de uma s´o vez. O OHC ´e por sua vez controlado por um operador, baseado num software de controlo atrav´es de um computador (Rubenstein et al., 2014).
4.2.1
Descri¸c˜ao OHC
O OHC cont´em duas fun¸c˜oes em rela¸c˜ao aos Kilobots. Em primeiro, interagir com os componentes eletr´onicos de baixo n´ıvel, tal como os motores, comunica¸c˜ao, circuitos de alimenta¸c˜ao e o LED-RGB. Em segundo, controlar a execu¸c˜ao do programa principal do robˆo definido pelo utilizador, programar, atualizar o firmware do robˆo e efetuar o debug do Kilobot.
Figura 4.4 – Overhead Controller, adaptado de Tharin(2016)
O OHC cont´em um microprocessador Atmega328, com rel´ogio de 8MHz e 32KB de mem´oria Flash. Este envia as informa¸c˜oes para os Kilobot, atrav´es dos LED‘s transmissores de infravermelhos, ver Figura 4.4 (8), para todos os Kilobots que se encontrem na sua ´area de transmiss˜ao. O OHC deve ser situado a uma distˆancia de cerca de um metro acima dos Kilobot, assim os Kilobot dispostos sob o OHC numa regi˜ao de cerca de um metro de diˆametro recebem a comunica¸c˜ao do OHC.
Uma das funcionalidades do OHC ´e atualizar ou reprogramar o firmware, no Kilobot. Para essa funcionalidade, o OHC cont´em um conector para a programa¸c˜ao do firmware (ver Figura4.4 (4)), e um jumper de programa¸c˜ao de firmware (ver Figura
4.4(5)). Outra funcionalidade ´e a interface para o debug, ver sec¸c˜ao4.2.4do Kilobot, em que cont´em um conector para ligar o cabo de debug (ver Figura4.4(3)), de modo a obter um feedback do robˆo,(Tharin, 2016).
4.2.2
Software do OHC
O utilizador controla o OHC atrav´es de um software desenvolvido pelos criadores dos Kilobot, chamado de KilobotToolkit (ver Figura 4.5), denominado por interface KiloGui. Este software apresenta o KiloGui, interface entre o utilizador e o OHC, de modo a que o utilizador opere os Kilobot, como o envio de arquivos de programas e comandos para os robˆos, sem recorrer a manipula¸c˜ao individual de cada robˆo,
4.2. OVERHEAD CONTROLLER 33
Figura 4.5 – Interface KiloGui
tornando f´acil e r´apida a manipula¸c˜ao de grandes n´umeros de robˆos.
O OHC conecta com o computador do utilizador pela interface USB (ver Figura
4.4 (2)), assim o OHC fica ativo e liga o LED de power (ver Figura 4.4 (7)). O utilizador executa o software KiloGui e quando este aparecer a mensagem de conex˜ao no software (mensagem a verde “connected ”(ver Figura4.5, canto inferior esquerdo, mensaguem connected.), este se encontra pronto para ser utilizado. Sempre que o utilizador desejar, pressionar o bot˜ao LedToggle, para verificar a comunica¸c˜ao, o LED de teste de conex˜ao (ver Figura 4.4 (6)), pisca a cada mensagem de teste (Tharin,
2016; Cornejo and Rubenstein, 2013).
O software (ver Figura4.5), cont´em um painel de bot˜oes, em cada bot˜ao corresponde a um comando com uma determinada funcionalidade, descrito na Tabela 4.1
Tabela 4.1 – Comandos do KiloGui
Comando Fun¸c˜ao
FTDI / Serial Selecionar a interface para conectar o PC ao OHC.
[select file] Bot˜ao de procura do arquivo compilado do programa do Kilobot para ser enviado aos Kilobots, o arquivo no formato [.hex].
Bootload
Envia uma mensagem aos Kilobots para entrarem no modo Bootload. Os Kilobots ficar˜ao prontos para receber um novo upload de um novo programa. ´E necess´ario efetuar este passo antes de iniciar o upload.
Upload Transmite um novo programa para os Kilobot que est˜ao no modo
bootload.
Reset Envia uma mensagem a todos os Kilobots, para reiniciar o programa no Kilobot e entrar no modo pausa, aguardando o pr´oximo comando.
Run Envia uma mensagem a todos os Kilobots, para iniciar o programa do utilizador nos Kilobots.
Pause
Envia uma mensagem a todos os Kilobots, para entrem no modo pausa, este preserva o estado onde parou, e quando o utilizador clicar em executar este retoma o programa onde parou.
Sleep Envia uma mensagem a todos os Kilobots, para estes entrarem no modo de baixo consumo de energia.
Voltage Envia uma mensagem a todos os Kilobots, para que estes indiquem a sua tens˜ao da bateria atrav´es do LED-RGB.
LedToggle Testar a conex˜ao entre o computador e OHC, os LEDs do OHC piscam. Serial Imput Visualiza as mensagens recebidas do Kilobot no debugging.
Calibration Definir um identificador ´unico (“UID ”) para um Kilobot e os valores do motor de calibra¸c˜ao.
4.2.3
Opera¸c˜oes escal´aveis
As opera¸c˜oes de rotina de controlo dos robˆos s˜ao supervisionadas pelo OHC. Este permite controlar o coletivo de forma escal´avel, i.e., realizar opera¸c˜oes em grande escala, ou seja, n˜ao ´e necess´ario recorrer a manipula¸c˜ao individual dos robˆos. Este controlo ´e realizado atrav´es do KiloGui, anteriormente abordado. As opera¸c˜oes escal´aveis poss´ıveis de serem realizadas por este controlador, s˜ao descritas nas seguin- tes subsec¸c˜oes (Tharin, 2016; Rubenstein et al., 2014; Cornejo and Rubenstein,
4.2. OVERHEAD CONTROLLER 35
Programar os Kilobots
De modo a alterar o programa principal em execu¸c˜ao no microcontrolador do Kilobot, este cont´em um recurso de auto-programa¸c˜ao do Atmega328. Este recurso permite que o c´odigo do programa principal, localizado no setor prim´ario da mem´oria, seja substitu´ıdo pelo programa escrito pelo utilizador no sector separado de mem´oria de bootloader. Quando o utilizador deseja colocar um novo programa em todos os Kilobots, transmite uma mensagem para iniciar o bootloader, a partir do OHC. Quando esta mensagem ´e recebida, o c´odigo do programa principal move-se para a se¸c˜ao bootloader, fazendo com que o programa bootloader seja executado. Seguida- mente, efetua o upload do programa, transmitindo a mensagem para iniciar o upload, onde ser´a enviado o programa do utilizador para o setor de mem´oria do bootloader. O Kilobot cont´em o programa que recebe as mensagens de infravermelho do OHC, e o novo c´odigo do programa transferido. Em seguida, substitui o c´odigo para o local apropriado no setor prim´ario da mem´oria. O programa bootloader, cont´em a verifica¸c˜ao de erros para garantir que o programa substitu´ıdo no setor prim´ario esteja completo e sem erros. Uma vez que o programa de substitui¸c˜ao completo tenha sido recebido, o c´odigo do bootloader redefine o c´odigo do programa principal rec´em-carregado e inicia a sua execu¸c˜ao. Este esquema de programa¸c˜ao escal´avel permite que todos os Kilobots presentes na arena de testes carreguem um novo programa em menos de um minuto.
Na programa¸c˜ao de um novo programa desenvolvido para os Kilobots, ´e necess´ario selecionar o bot˜ao [select File] do softwar e e escolher o arquivo no formato [.hex]. Em seguida, enviar o arquivo do programa para o OHC selecionando o bot˜ao Program Flash no software, de modo a que o arquivo se encontre preparado para ser enviado para os Kilobots. Antes de efetuar o bootload, o utilizador dever´a colocar todos os Kilobots no modo pausa, selecionando o pause no software, s´o depois dever´a enviar o programa para os Kilobots selecionando o bootload no software, seguidamente os Kilobots piscam o seu LED-RGB azul, indicando que estes est˜ao a receber a informa¸c˜ao do OHC. Normalmente esta a¸c˜ao demora cerca de trinta segundos. Quando o envio terminar, os Kilobot ir˜ao piscar o LED verde duas vezes por segundo,
o que significa que eles est˜ao prontos para receber novos comandos.
Comandos de controlo do Kilobot
O operador controla a execu¸c˜ao do programa principal em todos os Kilobots simulta- neamente, atrav´es de comandos enviados em mensagens pelo OHC. Para esse fim o software possui bot˜oes como “Run”, “Pause”e “Reset”. De modo a executar o programa principal do Kilobot, o software possui um bot˜ao de Run, que envia uma mensagem para todos os robˆos, atrav´es do OHC.Por outro lado, o software disp˜oe de um bot˜ao de Pause, que envia uma mensagem para todos os robˆos, para que estes parem o contador do programa, preservando esse contador, ou seja, os robˆos param de executar o programa guardando o estado onde se encontram. Quando o utilizador clicar bot˜ao Run o programa ´e retomado a partir da posi¸c˜ao onde se encontra. Adicionalmente, o software cont´em um bot˜ao de Reset, que envia uma mensagem para todos os robˆos, para que estes coloquem o contador de programa no in´ıcio, e aguardarem por um novo comando.
Modo de baixo consumo de energia
De modo a evitar o uso do interruptor f´ısico para ligar ou desligar os robˆos, os Kilobots tˆem o funcionamento de baixo consumo de energia (Sleep). Este modo funciona de forma alternativa ao estado desligado padr˜ao do robˆo, onde a bateria ´e desconectada do robˆo atrav´es do interruptor. Enquanto o modo Sleep, a bateria permanece conectada ao robˆo, mas o robˆo desliga a maior parte de sua eletrˆonica e o microprocessador entra no estado de suspens˜ao durante um minuto.
Para o robˆo entrar no modo Sleep, o software disp˜oe de bot˜ao Sleep, que envia uma mensagem para todos os robˆos, atrav´es do OHC, de forma a que os robˆos entrem no modo Sleep, e o microprocessador dos robˆos entram em suspens˜ao durante um minuto. Durante este tempo, a potˆencia extra´ıda pela bateria do Kilobot ´e aproximadamente 100µW. Ap´os um minuto, o microprocessador acorda, ativa o recetor de infravermelhos, durante 10ms, e verifica se este recebe a mensagem
4.2. OVERHEAD CONTROLLER 37
para sair do modo de baixo consumo de energia (activo), a mensaguem de pause proveniente do OHC. Se a mensagem n˜ao for recebida, o robˆo voltar´a ao modo de Sleep repetindo este ciclo at´e receber uma mensagem de pause. De modo a garantir que uma mensagem seja recebida pelo robˆo, durante os 10ms em que o receptor est´a ativo, o OHC transmite a mensagem de pause a cada 3ms. Se uma mensagem de pause for recebida pelo robˆo, ele muda para o modo ativo, ficando dispon´ıvel para efetuar qualquer opera¸c˜ao.
Ao utilizar este modo de baixo consumo de energia, os robˆos preservam energia e podem permanecer neste modo por mais de trˆes meses sem necessitar de recarregar. Al´em disso, o grupo de Kilobots podem ser comutados do modo Sleep para o modo ativo em cerca de um ou dois minutos, e a comuta¸c˜ao do modo ativo para o modo Sleep ocorre em alguns segundos.
N´ıvel de bateria dos Kilobots
O utilizador pode obter o n´ıvel da bateria de cada Kilobot, ´util quando o utilizador pretende saber a tens˜ao da bateria dos robˆos no coletivo e determinar se eles necessitam ser recarregados. Para esse efeito, o software disp˜oe de bot˜ao voltage, que envia uma mensagem para todos os robˆos, atrav´es do OHC, para que estes exibam a sua tens˜ao da bateria atrav´es do seu LED-RGB. Cada robˆo exibe uma cor no seu LED-RGB com base na tens˜ao medida da bateria, em que o verde (V > 4), a azul (3.75 < V < 4) , a amarelo (3.5 < V < 3.75), e o vermelho (V < 3.5).
Caso a bateria necessite de ser recarregada, o utilizador dever´a colocar os Kilobots no carregador, ver sec¸c˜ao 4.3, (Tharin, 2016; Rubenstein et al., 2014; Cornejo and Rubenstein,2013).
4.2.4
Opera¸c˜oes individuais
As opera¸c˜oes individuais nos robˆos s˜ao controladas pelo OHC. Este controlo apenas pode ser efetuado individualmente, i.e., uma opera¸c˜ao n˜ao escal´avel, sendo necess´ario recorrer a manipula¸c˜ao individual dos robˆos. Este controlo ´e realizado atrav´es do KiloGui. As opera¸c˜oes individuais poss´ıveis de serem realizadas por este controlador, s˜ao descritas nesta sec¸c˜ao (Tharin, 2016; Rubenstein et al., 2014; Cornejo and Rubenstein, 2013).
Calibrar os motores do Kilobot
Figura 4.6 – Calibrar os motores do Kilobot, usando a interface KiloGui
Os Kilobots utilizam os motores de vibra¸c˜ao para se moverem e a potˆencia necess´aria para alcan¸car um bom movimento para a frente, virar `a esquerda ou virar `a direita varia de robˆo para robˆo, e vulgarmente varia com rugosidade da superf´ıcie, sendo necess´ario a calibra¸c˜ao dos motores. O processo de calibra¸c˜ao de um Kilobot ´e como
4.2. OVERHEAD CONTROLLER 39
calibrar os valores manualmente, em que se define os valores de virar `a esquerda, virar `a direita, e seguir em frente, e sendo poss´ıvel tamb´em atribuir um identificador ´
unico (“Unique ID”) para o Kilobot.
Para iniciar o processo de calibra¸c˜ao, o utilizador dever´a selecionar o bot˜ao de Calibration no kiloGui, sendo apresentada a janela de software ilustrada na Figura
4.6.
O submenu do software do OHC (ver Figura4.6), cont´em um painel, em cada bot˜ao corresponde a um comando com uma dada funcionalidade, descrito na seguinte Tabela 4.2.
Tabela 4.2 – Comandos de calibra¸c˜ao do KiloGui
Comando Fun¸c˜ao
Unique ID Atribuir identificador ´unico ao Kilobot.
Turn left Atribuir valor ao motor esquerdo para rodar ´a esquerda. Turn right Atribuir valor ao motor direito para rodar `a direita.
Go Straight Atribuir valor ao motor esquerdo e em motor direito para mover o robˆo em frente.
Test Bot˜ao para testar os valores inseridos, o Kilobot move-se de acordo com o valor inserido e ao tipo de movimenta¸c˜ao.
Save Armazena na EEPROM do Kilobot os valores da calibra¸c˜ao. Close Sair do submenu de calibra¸c˜ao.
O processo de calibra¸c˜ao, inicia-se por calibrar o valor Turn left de PWM (pulse- width-modulation) da velocidade do motor da esquerda, atribuir o valor para motor e clicar em teste para dizer ao robˆo para se mover utilizando esse valor, at´e conseguir um valor de modo a obter uma boa rota¸c˜ao anti-hor´ario. De seguida repetir o mesmo procedimento para a calibra¸c˜ao do motor direito. Ap´os a devida calibra¸c˜ao do motor esquerdo e direito, segue-se a calibra¸c˜ao do motor num movimento para a frente, devendo-se usar os valores que j´a foram utilizados na calibra¸c˜ao do motor esquerdo e direito como uma boa estimativa inicial. O valor deve ser ajustado, de modo a obter um correto movimento para a frente do robˆo. Al´em da calibra¸c˜ao, o utilizador poder´a atribuir um n´umero inteiro positivo na caixa de identifica¸c˜ao ´unica
(Unique ID) e clicar em teste. Para terminar o processo de calibra¸c˜ao ´e necess´ario armazenar os valores da calibra¸c˜ao, pressionando no comando Save. Deste modo o robˆo armazenar´a os valores de calibra¸c˜ao na EEPROM, podendo estes serem usados no programa.
Debugging
O debugging permite obter informa¸c˜oes sobre o estado do robˆo quando executa o programa. Para efetuar o debugging ´e necess´ario conectar o cabo s´erie de dois pinos ao cabe¸calho de sa´ıda s´erie do Kilobot, e no cabe¸calho de entrada do OHC. E atrav´es das fun¸c˜oes “printf ”inseridas pelo utilizador no programa desenvolvido, este pode ser usado para transmitir dados atrav´es da interface serial do robˆo para