Infra - Linux

Bioloid Control: Robótica virtual em Linux

Como muitas pessoas, acredito que em breve os robôs estarão presentes em nossas vidas como os computadores nos dias atuais. O projeto Bioloid Control disponibiliza um robô virtual permitindo ao usuário estudar alguns conceitos de robótica simulando o Bioloid Comprehensive Kit.

por Alessandro de Oliveira Faria



Introdução

Bioloid Control é um projeto criado para simular e comunicar com o kit didático de robótica Bioloid Comprehensive Kit, fabricado pela robôtis.

Controlar um robô impõe um certo grau de dificuldade relacionado às necessidades básicas como a auto localização, localização de outros elementos, tomada de decisão, equilíbrio e sustento do próprio corpo (no caso de robôs humanóides bípedes). Sem mencionar a necessidade de integração do projeto mecânico, elétrico e de programação.



No Brasil, o número de pesquisadores que utilizam o kit Bioloid é muito pequeno, pois uma das únicas referências a qual se tem notícia é a equipe Itandroids do Instituto Tecnológico de Aeronáutica (ITA) que constituiu a seleção brasileira de robótica no mundial de futebol de robôs de 2007, Atlanta (robôCup).


O Bioloid Comprehensive Kit

Este kit, pouco difundido no Brasil, é um sistema desenvolvido pela companhia coreana robôtis. O principal objetivo desta empresa é criar uma vasta plataforma de estudos e pesquisas que seja capaz de prover a atual necessidade pelo desenvolvimento de robôs e disponibilizar toda a infra-estrutura para a construção do mesmo.

A robôtis vem comercializando a idéia de "Edutainment robôt", unindo robótica com educação e entretenimento. A evolução entre entretenimento e educação remonta desde brinquedos estáticos, passando pelos jogos de vídeo game e finalizando com os atuais robôs. Estes robôs são os que possuem um maior efeito educacional, já que possuem movimento e permitem maior interação e contato com as pessoas. É por este motivo que a robôtis lançou um robô de entretenimento educacional chamado Bioloid.

Este é o primeiro kit educacional baseado em servomotores controlados pela porta serial. Além de executarem funções básicas como mudar de posições ou girar, os robôs também dispõem de sensores que passam informações sobre velocidade, temperatura, corrente e voltagem de cada servo.

Possuem um hardware compacto e um software livre que pode ser instalado em qualquer computador. O kit é ideal para pesquisas, competições e fins educacionais pelo fato de ter interfaces simples e amigáveis.


Sensor Modelo AX-S1

O módulo Dynamixel "AX-S1" é um sensor inteligente que integra as funções de sensor de som, controle remoto infravermelho, sensor de distância infravermelho, sensor de luz, unidade de controle e rede.

A comunicação suporta velocidade até 1 Mbps. Possui capacidade de retorno de valores para distância de sensor infravermelho, sensor de luz e de som.

Além disso, posição, velocidade e torque podem ser determinados com um simples pacote de comandos, possibilitando que o processador controle muitos servomotores e sensores com muito pouco recurso.


Servomotor AX-12+

O AX-12+ Dynamixel é um inteligente atuador modular que incorpora engrenagem de redução, a precisão de um motor de corrente contínua e um controle de circuito com funcionalidade em rede. Apesar do tamanho reduzido, ele produz um elevado torque e é fabricado com materiais de alta qualidade, para prover a força necessária e a resiliência para suportar grandes forças externas.

Também tem a habilidade de detectar e agir de acordo com as condições internas, como temperatura ou voltagem. Posição e velocidade podem ser controladas com resolução de 10 bits (1024 passos). Além disso, retorna valores para posição angular, velocidade angular e torque.


Controlador CM-5

Um módulo designado para armazenar e executar programas para o controle de robôs que utilizam os atuadores e sensores, AX-12+ e AX-S1, respectivamente.

Desenvolvido pela Atmel"s, o microcontrolador Atmega128 possui 16Mhz de processamento, 128kbytes de memória flash, 133 instruções, quatro portas seriais, botões de controle e LEDs de status programáveis. A placa de controle se aloja numa resistente caixa de plástico.

Este pode ser atualizado para ser operado sem fio, instalando o módulo Zig-100 Wireless. Instalando dois destes módulos, robôs podem comunicar-se, compartilhar informações e se controlarem.

O módulo Zig-100 trás consigo a tecnologia ZigBee, que consiste em uma rede sem fios ainda em fase de desenvolvimento que pretende realizar a interligação de pequenas unidades de comunicações de dados em áreas muito limitadas, como por exemplo áreas residenciais. Com os principais diferenciais de consumir menos energia elétrica, oferecer maior simplicidade em configuração (topologia de rede variável) e a possibilidade de integração com aproximadamente 6400 dispositivos, com taxas de transmissão compatíveis com as necessidades de equipamentos variados.

Fonte da informação:
http://www.revistas.unifacs.br/index.php/sepa/article/viewFile/306/254

O projeto Bioloid Control

O projeto Bioloid Control é um pacote open-source desenvolvido na Alemanha, composto de 3 módulos: o controlador do robô, a visualização 3D e o programa principal de comandos.

robot controller:

É o programa responsável pela leitura e gravação dos dados dos servos e sensores. A comunicação é assíncrona com o PC via RS-232, assim permitindo controle total do Ax12s e AxS1s.

OpenGL-Visualisation:

Programa de visualização tridimensional dos movimentos do robô. Os dados são recebidos com o recurso de memória compartilhada.

Programa principal de controle:

Este módulo provê uma interface (com ou sem a biblioteca ncurses) para enviar e receber comando do robô.



Principais recursos:
  • Suporta a plataforma Windows e GNU/Linux;
  • Simulação total do Bioloid (pode ser utilizado sem o robô);
  • Suporta diversas configurações de robôs (humanoid ou hexapod);
  • Visualizações 3D com OpenGL;
  • Checagem de colisão;
  • Controle completo do robô com linguagem de scripts;
  • Entre outros recursos.


Download, instalação e configuração

Em primeiro lugar, efetue o download neste link e logo após efetue o comando unzip para descompactar o arquivo contendo os binários Windows/Linux e o código fonte.

$ unzip bioloidcontrol_v_0_2_1_src_and_win32_binaries.zip
$ cd bioloidcontrol/


Ao entrar na pasta bioloidcontrol, veremos a pasta controller, main, parser e viewer. Para não tornar este documento extenso, mencionarei apenas como utilizar o simulador.

Para compilar o visualizador 3D, entre na pasta viewer e execute os comandos make clean e make all como no exemplo a seguir:

$ make clean

O procedimento de compilação do programa principal de controle é similar ao mencionado acima, exceto que para os usuários que desejam por algum motivo remover a interface ncurses, basta modificar na linha 39 do arquivo src/cmd.cpp o seu conteúdo de _SIMPLECONSOLE para SIMPLECONSOLE.

Agora basta novamente utilizar os comandos make clean e make all:



$ make clean
$ make all


O arquivo XML de configuração do ROBÔ:

O programa principal carrega um arquivo XML de configuração do robô. No arquivo de configuração pode ser selecionado a execução do programa main com o parâmetro -config, logo a seguir um exemplo deste arquivo.
<?xml version="1.0" ?> 
<Configuration> 
   <General> 
      <SaveOnExit>false</SaveOnExit> 
   </General> 
   <Hardware> 
      <WriteTorobôt>true</WriteTorobôt> 
      <Ax12> 
         <CWMargin id="1 2 3 4 5 6 7 8 9 10" >1</CWMargin> 
         <CCWMargin id="1 2 3 4 5 6 7 8 9 10" >1</CCWMargin> 
         <CWSlope id="1 2 3 4 5 6 7 8 9 10" >32</CWSlope> 
         <CCWSlope id="1 2 3 4 5 6 7 8 9 10" >32</CCWSlope> 
         <Punch id="1 2 3 4 5 6 7 8 9 10" >32</Punch> 
         <Status id="1 2 3 4 5 6 7 8 9 10" >4</Status> 
         <Speed id="1 2 3 4 5 6 7 8 9 10" >100</Speed> 
         <Torque id="1 2 3 4 5 6 7 8 9 10" >1023</Torque> 
      </Ax12> 
      <AxS1> 
      </AxS1> 
      <ControlTorque>true</ControlTorque> 
      <ControlSpeed>false</ControlSpeed> 
      <Controller> 
         <Torque id="1 2 3 4 5" time="1" p="10" i="0.5" d="0" offset="100" /> 
         <Speed id="1 2 3 4 5" time="1" p="10" i="0.3" d="0" offset="30" /> 
      </Controller> 
   </Hardware> 
   <Software> 
      <ComPort>/dev/ttyUSB0</ComPort> 
      <ComSpeed>115200</ComSpeed> 
      <StopOnCollisionRead>true</StopOnCollisionRead> 
      <StopOnCollisionWrite>true</StopOnCollisionWrite> 
      <AddMotionsWithCollision>false</addMotionsWithCollision> 
      <Debug>true</Debug> 
      <robôtConfigFile>dh_hexapod.xml</robôtConfigFile> 
      <robôtIsPresent>true</robôtIsPresent> 
      <WriteTorobôt>false</WriteTorobôt> 
      <ReadFromrobôt>true</ReadFromrobôt> 
   </Software> 
</Configuration> 

Farei uma breve explanação para este texto não ficar cansativo. Abaixo a relação dos principais parâmetros do arquivo config.xml.

<Configuration> <General><.SaveOnExit>: [true|false]
Grava as mudanças efetuadas durante a execução do programa.

<Configuration><Hardware><WriteTorobôt>: [true|false]
Grava dados no robô (as configurações).

<Configuration><Software><ComPort>:[/dev/ttyS0]
Definição da porta serial.

<Configuration><Software><ComSpeed>: [115200]
Velocidade da porta de comunicação.

<Configuration><Software><StopOnCollisionRead>: [true|false]
Interrompe o movimento se alguma colisão for detectada.

<Configuration><Software><AddMotionsWithCollision>: [true|false]
Executa movimentos se alguma colisão for detectada.

<Configuration><Software><robôtConfigFile>: [nome do arquivo]
Nome do arquivo de configuração do robô (dh_humanoid.xml ou dh_hexapod.xml).

<Configuration><Software><robôtIsPresent>: [true|false]
Informa se o robô esta conectado a uma porta serial.

<Configuration><Software><WriteTorobôt>: [true|false]
Grava dados no robô (falso para o modo simulado).

Utilizando o Bioloid Control

Execute o programa viewer (localizado na pasta viewer) e o programa bioloid (localizado na pasta main). O programa utiliza o recurso de memória compartilhada para enviar ao visualizador as coordenadas e movimento do robô.

Ao executarmos o programa bioloid, teremos uma tela com a interface ncurses similar a figura abaixo. Como padrão o programa carrega o arquivo config.xml como mencionado anteriormente. Vale apenas mencionar que os comandos podem ser executados em tempo real no robô virtual e real.



Abaixo algumas dicas para brincar com o emulador, sugiro obter mais informações na página do projeto.
  • on: Habilita a gravação de dados no robô.
  • off: Desabilita a gravação de dados no robô.
  • script <filename>: Executa um script.
  • playshow: Executa uma demonstração.
  • quit: Finaliza o interpretador.
  • set: [servo] [angulo] [tempo]: Movimenta o servo no ângulo especificado.
  • get: [servo]: obtém informações do servo.
Linguagem de script:

A linguagem de script fornece recursos para controle absoluto do robô. Com os scripts podemos ler dados do sensor e executar movimento ponto a ponto.

A seguir um script exemplo. Para obter mais informações, sugiro acessar o link:
http://bioloidcontrol.sourceforge.net/index.php?category=8
servo = 6;
steps = 15;
stepsize = 5;
pause = 100;
a = get(servo);
print("Current Angle of Servo ");print(servo);print(": ");
print(a);
print("\n");
t = 0;
while (t 

Recurso não falta para continuar este documento, porém vou encerrar o texto por aqui e deixarei a cargo de cada leitor evoluir o assunto... Abaixo um vídeo para finalizar.



Como sempre menciono: Colaborar atrai amigos, competir atrai inimigos...
Alessandro de Oliveira Faria

Alessandro de Oliveira Faria - Sócio-proprietário da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim propiciando ao mercado soluções em software nas mais diversas linguagens e plataforma, levando o Linux a sério desde 1998 com desenvolvimento de soluções open-source, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos.