====== Projeto Veículo Não-Holonômico Ackermann ======
**Autores:** Armando Alves Neto, Douglas Macharet, Alysson Alves de Oliveira, James Milligan
**Coordenador:** Mario Fernando Montenegro Campos
**Auxílio Técnico:** Wolmar Gabirobertz Pimenta
----
**Status do Projeto: ATIVO**
**Início:** 03/2012
**Responsável por esta página:** Alysson Alves de Oliveira
==== Introdução ====
Atualmente a utilização de veículos não holonômicos é muito difundida. Veículos não-holonômicos são utilizados extensivamente nas sociedades modernas. Aviões, carros e navios são exemplos desse tipo de veículo. Isso acabou gerando muitas pesquisas com robôs móveis não-holonômicos. Pesquisas em nosso laboratório com robôs não-holonômicos, com movimento como o de um carro, levou à criação deste projeto. Ao pesquisarmos na literatura, notamos que alguns grupos de pesquisa haviam construído seu próprio robô móvel com as características que desejávamos ([1] e [2]). A partir daí, começamos a pensar na possibilidade de construirmos um robô próprio para nossas pesquisas. Em alguns trabalhos foi utilizado o chassi de um automodelo comercial de escala 1/10. Seu baixo custo e robustez além da descrição do que foi feito nestes trabalhos nos encorajou a construirmos nosso próprio robô. Além do mais, a experiência de construir um robô deste tipo em nosso laboratório seria interessante como aprendizado.
Iniciamos a construção adquirindo um automodelo comercial TXT-1 da Tamiya Inc. de escala 1/10 que forneceria a parte mecânica e estrutural do projeto. Acrescentamos a esse chassi: sensores, atuadores (servos de direção e ESC - "Electronic Speed Control" para o controle do motor) além de um computador (netbook), para realizar o controle do robô. Foi desenvolvido um software de controle que é executado no computador embarcado. Ele recebe um ponto com coordenadas e faz com que o robô chegue até esse ponto. Ao receber o próximo ponto de visita, o software de controle, através dos atuadores, faz com que o robô chegue até ele. Vários testes para validar o software de controle foram feitos.
A expectativa é que o robô adquira novas funcionalidades com o desenvolvimento do projeto. Novas interfaces, novos testes, novos sensores seriam acrescentados com o objetivo de aumentar a capacidade do robô bem como seu uso pelo laboratório. Abaixo descrevemos as modificações mecânicas que fizemos e os sensores, atuadores e sistemas de controle.
==== Trabalhos Relacionados ====
==== Descrição do veículo ====
O robô descrito neste projeto se enquadra na categoria de um robô não-holonômico com o movimento como o de um carro ("car-like"). Sua construção foi baseada no chassi comercial: TXT-1 da Tamiya Inc. (automodelo radio-controlado R/C "Monster Truck"). Esse chassi nos forneceu a parte mecânica e estrutural do robô. Possui boa capacidade para ambientes "outdoor", sendo seu emprego original para terrenos acidentados. Isso confere a esse chassi uma grande robustez para as tarefas que pretendemos utilizá-lo. O primeiro desafio que tivemos foi a montagem desse chassi, esse automodelo vem completamente desmontado. O manual que o acompanha ensina passo a passo os procedimentos de montagem mas o grande número de peças exige um tempo considerável. A experiência de montagem nos ajuda se futuramente for necessário fazer algum conserto.
Após a montagem, iniciamos o processo de acréscimo de dispositivos e modificações para construirmos um robô com as características que pretendíamos. Estas modificações e dispositivos serão vistos em detalhes abaixo.
Segue abaixo um diagrama completo do veículo com seus dispositivos e comunicações. Nesse diagrama, a parte "Estação Externa" não pertence ao veículo e pode enviar e receber dados dele.
{{ :projetos:veiculo_nao_holonomico:diagrama4.png?600 |}}
Algumas características do robô podem ser vistas abaixo.
Dimensões:
Comprimento 490 mm
Largura 385 mm
Altura 285 mm
Raio de Curvatura mínimo: 1359 mm [1]
Componentes:
Item: Chassi
Modelo: TXT-1
Fabricante: Tamiya Inc. (http://www.tamiya.com/)
Item: XBee
Modelo: XBEEPRO
Fabricante: Digi Internacional (www.digi.com)
Item: GPS
Modelo: LEA-6T
Fabricante: U-Blox (http://www.u-blox.com)
Item: IMU/PWM
Modelo: Robovero - PKG30019
Fabricante: Gumstix (http://www.gumstix.com/)
Item: ESC
Modelo: TEU-302BK
Fabricante: Tamiya Inc. (http://www.tamiya.com/)
Item: Servo Direção
Modelo: TS-70MG
Fabricante: Tower Hobbies (http://www.towerhobbies.com/)
== Modelo 3D ==
{{ :projetos:veiculo_nao_holonomico:full_model_screen_shot.png?700 |}}
=== Modificações Mecânicas ===
== Base Acrílica e suportes ==
**Status: TERMINADO**
**Data: Abril 2012**
A utilização do chassi de um veículo automodelo nos dava uma estrutura mecânica para colocarmos o restante do equipamento (sensores, atuadores, netbook, etc). Não seria possível colocá-los diretamente no chassi por este ser basicamente duas barras paralelas. Precisaríamos de uma base resistente mecanicamente para suportar impactos, além de criar espaço para se colocar o equipamento que desejávamos e termos um espaço sobrando para possíveis modificações futuras. Escolhemos utilizar uma base acrílica (ver formato abaixo) por já termos utilizado este material em outros robôs do laboratório, além de ser muito resistente, sua transparência ajuda na manutenção do robô. O corte da peça acrílica foi feito manualmente utilizando-se uma serra tico-tico com lâmina específica. Após o corte, foi feito um polimento da área de corte para dar um acabamento melhor. As peças de alumínio que sustentam a base acrílica foram feitas a partir de uma cantoneira. Realizamos os cortes das peças e procedemos os furos para a fixação no chassi e na base acrílica. Abaixo segue a figura com o formato das peças e o robô com todos os seus dipositivos sobre a base acrílica.
{{:projetos:veiculo_nao_holonomico:acrilico5.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:acrilico1.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:acrilico6.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:acrilico3.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:acrilico4.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:acrilico2.jpg?300|}}
== Pneus ==
**Status: TERMINADO**
**Data: Abril 2012**
O fato dos pneus serem facilmente deformáveis era um problema para nós. Como se trata de um automodelo para uso em terrenos acidentados seus pneus são muito flexíveis. Ao montarmos toda a estrutura com sensores, computador (netbook) e outros, os pneus apresentavam grande deformação. Uma idéia, já vista em outro trabalho , seria colocar espuma dentro desses pneus. Por serem ocos, a espuma daria maior resistência mecânica para eles. Além do mais, havia outro problema, a deformação dos pneus afetaria a odometria do veículo. Apesar de não implementado ainda, o uso de um encoder nas rodas nos daria a velocidade angular dessas rodas quando o robô se movimentasse. Para se calcular a velocidade linear de cada roda seria preciso ter um valor de raio da roda bem definido e a velocidade angular. Com a deformação dos pneus isso não seria possível.
Na figura abaixo mostramos como foi feita a colocação da espuma. Utilizamos uma espuma de densidade 33, a mesma utilizada em colchões. O corte das peças, para ser inserida nos pneus, foi feito utilizando-se uma faca elétrica (pode ser vista na figura abaixo). O formato da espuma a ser inserida nos pneus deveria ser o de um cilindro com um furo central também em formato cilíndrico (figura abaixo). As medidas utilizadas para o corte foram: altura do cilindro 10 cm (largura do pneu), o diâmetro externo 14 cm e o diâmetro do buraco interno 7 cm.
{{ :projetos:veiculo_nao_holonomico:medidas_espuma_pneu.png?300 |}}
Especificações Peça Espuma:
Formato: Cilíndrico
R = 140 mm
r = 70 mm
e = 100 mm
Fazer o corte da peça de espuma demandou um pouco de criatividade. Primeiro, a faca elétrica se mostrou muito eficiente para o corte deste material. Utilizamos moldes em papelão, como pode ser visto nas figuras abaixo, dois moldes maiores para a parte externa da peça e dois para o buraco interno. No momento do corte colocávamos os moldes nas laterais da peça (fixados utilizando um prego no centro do molde), em ambos os lados, procedíamos o corte transversalmente ao molde de modo que a faca tangenciava o molde ao longo do corte. O mesmo procedimento foi feito para o corte do buraco interno, com a dificuldade aumentada, pois era necessário atravessar a faca na peça para iniciar o corte. Abaixo seguem as figuras dos procedimentos e o resultado.
{{:projetos:veiculo_nao_holonomico:espuma8.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:espuma7.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:espuma1.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:espuma4.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:espuma2.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:espuma5.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:espuma3.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:espuma6.jpg?300|}}
== Abraçadeiras para as barras estabilizadoras ==
**Status: TERMINADO**
**Data: Abril 2012**
Ao iniciarmos os testes de campo com o veículo, testes ainda em fase inicial onde o veículo ainda não possuía todos os dispositivos, verificou-se a necessidade de se trocar as abraçadeiras de nylon (que vieram com o automodelo) da barra estabilizadora por abraçadeiras de metal (ver foto abaixo). Já nos primeiros testes as abraçadeiras originais, de nylon, se romperam. Verificamos que em outro trabalho , que utilizaram esse mesmo chassi também haviam tido o mesmo problema e haviam substituído essas braçadeiras por outra de metal e portanto mais resistentes. Procedemos da mesma maneira e compramos abraçadeiras de metal e colocamos um pedaço de EVA (Etileno Vinil Acetato) de 2 mm de espessura para manter as abraçadeiras no lugar e comprimir melhor a barra estabilizadora. Veja na foto abaixo a abraçadeira de metal junto com o pedaço de EVA prendendo a barra estabilizadora.
{{:projetos:veiculo_nao_holonomico:abracadeira1.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:abracadeira2.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:abracadeira3.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:abracadeira4.jpg?300|}}
== Molas da Suspensão ==
**Status: TERMINADO**
**Data: Junho 2012**
Ao montarmos os dispositivos sobre o robô notamos que ele inclinava. O peso dos dispositivos havia feito as molas da suspensão flexionarem. Notamos que precisaríamos mudar todas as molas. Deveríamos utilizar uma mola com uma resistência maior, isto é, com maior coeficiente de elasticidade. Preferimos fazer a mola no lugar de comprar. Isso seria melhor porque as molas de suspensão para automodelo são classificadas não por seus coeficientes de elasticidade mas sim por cores. Para termos melhor controle das características da mola preferimos fazê-las. Levamos a mola original e a partir das características dela fizemos uma nova mola com maior coeficiente de elasticidade. Abaixo colocamos as características da mola original e da nova mola, fabricada especificamente para o nosso robô.
{{ :projetos:veiculo_nao_holonomico:mola2.png?100 |}}
Especificações da Mola Original:
Di = 14.0 mm
V = 4.6 mm
P = 6.1 mm
d = 1.5 mm
De = 17.0 mm
Comprimento = 75 mm
Número de espiras = 13
Especificações da Mola Utilizada:
Di = 14.6 mm
V = 4.8 mm
P = 7.0 mm
d = 2.2 mm
De = 19.0
Comprimento = 74.2 mm
Número de espiras = 11
{{:projetos:veiculo_nao_holonomico:mola4.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:mola5.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:mola6.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:mola1.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:mola2.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:mola7.jpg?300|}}
== Cinta de amarração para Netbook ==
**Status: TERMINADO**
**Data: Junho 2012**
O uso de um netbook no robô demandava uma fixação segura. Foi pensada algumas alternativas para essa fixação mas todas acabavam sendo específicas para o tamanho do netbook. Para não dependermos do tamanho do netbook e para que pudessem ser utilizados computadores de qualquer tamanho, passamos a utilizar cintas de amarração de velcro (ver foto abaixo). O uso de uma cinta apenas deixa o netbook com pouca segurança. Ele ainda sofria muita vibração. Passamos a utilizar duas cintas e nos diversos testes com essa solução o netbook ficou preso em segurança. Mesmo após batidas fortes o computador manteve-se preso de maneira segura. Essa solução foi então adotada em ambos os robôs.
{{ :projetos:veiculo_nao_holonomico:cinta_de_amarracao.png?700 |}}
{{:projetos:veiculo_nao_holonomico:cinta1.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:cinta2.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:cinta3.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:cinta4.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:cinta5.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:cinta6.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:cinta7.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:cinta8.jpg?300|}}
=== Sensores, Sistema de Controle e Comunicação ===
== Sensores ==
== Robovero/IMU ==
A IMU (Inertial Measurement Unit) utilizada está montada em uma placa chamada Robovero . O robovero é uma placa da GUMSTIX utilizada em projetos de robótica. Ela possui alguns sensores (IMU e magnemtômetro) além de um microcontrolador que possui várias funções. O fabricante disponibiliza várias bibliotecas em Python para ter acesso a esse microcontrolador, seuas funções e seus sensores.
== Robovero/Sinal PWM ==
== ESC (Eletronic Speed Control) ==
**Status: TERMINADO**
**Data: Abril 2012**
O ESC substitui o controle de velocidade que veio com o automodelo. O automodelo poussuía um controle de velocidade mecânico-elétrico (ver foto abaixo). Esse controle demandava um servo para controlar a parte mecânica. Tanto o controle de velocidade orioginal quanto o servo pôde ser substituído por um ESC lê um sinal PWM e transforma esse sinal em tensão de saída para o motor DC . Ele controla o torque do motor através de um sinal PWM. Esse sinal PWM é gerado pelo ROBOVERO que possui uma biblioteca específica para gerar esse sinal. O Robovero recebe informações do software de controle, executado no netbook, e cria o sinal PWM para o controle do motor.
{{:projetos:veiculo_nao_holonomico:old_speed_control1.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:old_speed_control2.jpg?300|}}
{{ :projetos:veiculo_nao_holonomico:esc1.jpg?300 |}}
== GPS ==
**Status: TERMINADO**
**Data: Junho 2012**
{{:projetos:veiculo_nao_holonomico:gps1.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:gps2.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:gps3.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:gps4.jpg?300|}}
== Encoder ==
O acréscimo do encoder tanto no robô quanto no sistema de controle faz parte de um trabalho futuro.
== Comunicação ==
**Status: TERMINADO**
**Data: Junho 2012**
Para a comunicação entre o robô e uma base remota utilizamos um dispositivo ZigBee. Esse dispositivo está ligado ao computador do robô (netbook) através de um cabo USB.
{{:projetos:veiculo_nao_holonomico:zigbee2.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:zigbee1.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:zigbee3.jpg?300|}}
{{:projetos:veiculo_nao_holonomico:zigbee4.jpg?300|}}
== Sistema e Software de Controle ==
O software de controle é executado em um computador (netbook) que está embarcado no robô. O software de controle foi escrito em Python, levando-se em conta que o Robovero possui bibliotecas de controle/conexão em Pyhon. Os programas são executados no Ubuntu/Linux.
==== Testes ====
Os testes foram realizados “outdoor”, isto é, fora do laboratório e em locais onde havia sinal de GPS. Neles, um computador remoto envia ao robô, através de um dispositivo ZigBee, pontos de visitação. A partir daí, o robô executa seu software de controle que atua em seus motores e servos de direção levando o robô até o ponto pretendido.
==== Próximos Passos ====
=== Encoder ===
=== Medir Tensão Bateria ===
=== Multiplexar RC e Robovero ===
=== Driver ROS ===
Obs: adicionando usuário para acessar dispositivo USB no Ubuntu
$sudo adduser ackerman dialout
== IMU ==
O driver para ROS da IMU/Robovero foi escrito em Python.
Pacote ROS para o driver da IMU:
hg https://www.verlab.dcc.ufmg.br/hg/ackerman_robot/
**Executando o driver:**
$rosrun robovero_imu robovero_imu.py
Estrutura ROS do driver:
Tópicos Publicados:
/imu/data_raw : dados da IMU sem filtragem
/imu/mag : dados magnetômetro
Tópicos subscritos:
Serviços:
**Filtro Madgwick (já implementado no ROS):**
Executando o filtro:
$rosrun imu_filter_madgwick imu_filter_node
Tópicos Publicados:
/imu/data : dados da IMU filtrados
**Vendo os dados no RVIZ:**
Executando o RVIZ:
$ rosrun rviz rviz
- Altere FIXED FRAME por: /base_link
- Altere TOPIC por: /imu/data
- Selecione as caixas para ver os eixos na tela
== Procedimentos ==
== ROS Múltiplas Máquinas ==
Obs: As informações aqui são baseadas no Tutorial [[http://www.ros.org/wiki/ROS/NetworkSetup|ROS em Múltiplas Máquinas]]
Escolha uma máquina para executar o Roscore. Essa máquina será a mestre. As outras máquina chamaremos de escravo.
Na máquina mestre execute:
$ export ROS_IP=
$ export ROS_HOSTNAME=
$ roscore
Na máquina escravo (__em cada terminal__) execute:
$ export ROS_MASTER_URI=http://:/
$ export ROS_IP=
$ export ROS_HOSTNAME=
Agora, nos terminais que foram carregadas as variáveis acima, podem ser chamados os executáveis do ROS.
== Ativando/Desativando o Reverso do motor (ré) ==
Obs: Ao fazer o procedimento abaixo o ESC mudará o modo:
com reverso -> sem reverso
sem reverso -> com reverso
- Pressione o botão SET (botão vermelho) do ESC e mantenha pressionado;
- Ligue o ESC e continue pressionando por 3 segundos;
- Teste se o reverso está ativado ou esativado;
== Ligar o robô ==
== Desligar ==
== Carregar bateria ==
== Informações Úteis Tamiya TXT-1 ==
Manual TXT-1: {{:projetos:veiculo_nao_holonomico:manual_txt1.pdf|}}
Manual Rádio-Controle 4 canais. {{:projetos:veiculo_nao_holonomico:4vf-manual.pdf|}}
Visão completa da montagem {{:projetos:veiculo_nao_holonomico:visao_montagem_txt1.pdf|}}
==== Sensores ====
==== Links Relacionados ====
Montagem Plataforma: {{:projetos:veiculo_nao_holonomico:montagem_plataforma.pdf|}}
Modificação: {{:projetos:veiculo_nao_holonomico:modificacao.pdf|}}
Aplicação: {{:projetos:veiculo_nao_holonomico:decentralizedcooperativecontrol.pdf|}}
[[http://www.cis.upenn.edu/mars/site/platforms.htm|Projetos Relacionados]]
==== Referências ====
[1] D. Cruz, J. McClintock, B. Perteet, O. Orqueda, Y. Cao, and R. Fierro,
“Decentralized cooperative control—A multivehicle platform for research
in networked embedded systems,” //IEEE Control Syst.//, vol. 27, no. 3,
pp. 58–78, Jun. 2007.
[2] Homepage MARHES Laboratory, "MARHES Laboratory - Platform Description", Disponível em http://ece.unm.edu/faculty/rfierro/reports/2005/Platform_Description.pdf. Acesso em 10 de agosto de 2012.
[3] D. Bhadauria, O. Tekdas, and V. Isler, “Robotic data mules for collecting data over sparse sensor fields,” //J. Field Robot//, vol. 28, no. 3,pp. 388–404, 2011.
[4] Michael Stanley, "Implementation of Kalman Filter to Tracking Custom Four-Wheel Drive Four-Wheel-Steering Robotic Platform," University of Maryland, College Park, Masters Thesis 2010.