Testes do Controlador CAN do Módulo Apalis iMX6

Neste artigo, apresentamos alguns testes feitos com o módulo Apalis iMX6 da Toradex para avaliar seu uso como uma ECU de controle de condução autônoma em dois robôs móveis agrícolas. Os testes realizados tiveram como único objetivo avaliar a capacidade do módulo para transmissão e recepção de mensagens CAN sem a ocorrência de falhas ou perda de mensagens em uma rede com várias outras ECUs transmitindo mensagens simultaneamente. Os resultados positivos alcançados nesses testes sugerem que o módulo Apalis iMX6 atende aos requisitos CAN para ser utilizado com uma ECU. No entanto, testes complementares de verificação de outros requisitos serão realizados futuramente antes de adotarmos o módulo Apalis iMX6, em definitivo, como a ECU de controle de condução autônoma dos robôs.

 

 

Motivação

 

Na Escola de Engenharia de São Carlos (EESC), Universidade de São Paulo (USP), existem dois robôs móveis autônomos em desenvolvimento para coleta de dados e suporte à Agricultura de Precisão (figura 1), ambos com quatro rodas com tração independente. A velocidade e o esterçamento das rodas são controlados individualmente por controladores independentes interligados a uma rede CAN baseada nos padrões SAE J1939 e ISOBUS. Já a coordenação de movimentos das rodas para locomover o veículo, denominado no contexto desse projeto como controle de condução, é feito por um computador embarcado em cada robô. Esse computador embarcado se conecta à rede CAN para se comunicar com os controladores individuais das rodas e assim locomover o robô e esterçar suas rodas sem problemas de arrasto, utilizando os princípios da direção de Ackerman.

 

Figura 1a - O robô móvel autônomo Agribot.
Figura 1b - O robô móvel autônomo RAM.

 

Atualmente, o controle de condução é feito por programas escritos em C/C++ para sistema operacional Windows e executados em computadores comuns (PC) baseados em processadores Intel. Essa solução tem funcionado razoavelmente bem. No entanto, com exceção das distribuições antigas e.g. Windows CE, as diferentes versões do Windows não são sistemas operacionais de tempo real (RTOS) e tem causado alguns problemas de atraso nas tarefas de condução e imprecisão no processo de coordenação dos movimentos das rodas. Isso não tem causado problemas críticos ao sistema devido às baixas velocidades de operação desses robôs (em torno de 0,5 m/s), mas algumas falhas de coordenação podem ser observadas durante a condução dos mesmos. Além disso, PCs não são robustos o bastante para operar em ambientes agrícolas e já causaram paradas em nossos sistemas mesmo em condições controladas de laboratório. Por essa razão e após algumas análises, decidimos substituir esses PCs por computadores embarcados baseados em processadores ARM com sistema operacional Linux.

 

Os principais requisitos adotados para escolha dos novos computadores de controle de condução foram: capacidade de processamento em tempo real, controlador CAN e conexão Ethernet. O computador em módulo Apalis iMX6 da Toradex atende a esses requisitos, mas precisávamos ter certeza de que ele seria capaz de executar tarefas de controle com baixa latência e mínima perda de mensagens CAN.

 

No site de desenvolvimento da Toradex (Toradex Developer Center Website), existem vários artigos com aplicações de tempo real utilizando o módulo Apalis iMX6, os quais demonstram a possibilidade de uso desse módulo como uma ECU. No entanto, não foram encontradas referências de aplicações com redes CAN suficientes para avaliar o seu desempenho. Por essa razão, decidimos realizar os testes registrados neste artigo.

 

 

CAN (Controller Area Network)

 

CAN têm sido amplamente utilizadas pela indústria automotiva para conectar os diversos componentes eletrônicos dos veículos de rodagem há anos. O padrão SAE J1939, criado pela Sociedade dos Engenheiros Automotivos ou SAE (Society of Automotive Engineers em Inglês), é o mais utilizado para comunicação e diagnóstico entre esses componentes eletrônicos, denominados Unidades de Controle Eletrônicas ou ECUs (Eletronic Control Units em Inglês).

 

O padrão SAE J1939 implementa cinco camadas de rede das sete definidas pelo padrão OSI. As camadas física e de ligação de dados são baseadas no padrão CAN ISO 11898 e utilizam somente o padrão CAN 2.0B com identificadores estendidos de 29 bits. A taxa de transmissão (baud rate) nos padrões J1939/11 e J1939/15 é de 250Kbps, enquanto que no padrão J1939/14 é de 500Kbps.

 

O frame das mensagens CAN no padrão 2.0B é composto por cinco campos de bits organizados entre os bits de marcação de início (SOF) e fim (EOF) do frame, como mostrado na figura 2. Basicamente, são enviados em um frame CAN o identificador de arbitragem (Arbitration ID) de 29 bits, alguns bits de controle, o tamanho do campo de dados (DLC) e de 0 a 8 bytes de dados. A verificação é feita pelos bits no campo CRC e a confirmação é feita pelo bit no campo ACK, enviado por pelo menos um controlador CAN que recebeu a mensagem com sucesso. Além disso, bits de preenchimento (stuffing bits) são inseridos a cada cinco bits iguais para evitar falhas de comunicação, exceto nos campos CRC, ACK e EOF. O valor desses bits é o inverso dos valores repetidos. Quando um controlador recebe uma sequência de seis bits iguais, ele interpreta como uma falha de comunicação. Sendo assim, o tamanho de um frame pode variar entre 64 e 140 bits, o que permite transmitir até 3.731 mensagens por segundo (mps) à 250Kbps e 7.462 mps à 500Kbps.

 

Figura 2 - Representação do frame das mensagens CAN padrão 2.0B

 

 

Hardware e Software Utilizados

 

Módulos Apalis iMX6 são capazes de executar aplicações em tempo real e possuem controlador CAN nativo (FlexCAN) com fila de entrada (FIFO) para armazenar até 64 mensagens. Isso faz com que esses módulos sejam bons candidato para operar como ECUs. No entanto, eles deverão trabalhar em uma rede CAN com diversas outras ECUs transmitindo grandes quantidades de dados simultaneamente sem perder mensagens endereçadas a eles. Para isso, submetemos um desses módulos a três tipos de testes simulando alto fluxo de mensagens na rede CAN:

 

  1. um computador hospedeiro (host) envia mensagens CAN para o módulo Apalis iMX6;
  2. o módulo Apalis iMX6 envia mensagens CAN ao computador hospedeiro;
  3. o módulo Apalis iMX6 envia mensagens a si mesmo.

 

Como computador hospedeiro, foi adotado um computador pessoal (PC) com processador i5 de 64 bits, 3,5GHz, 4GB de memória RAM, e sistema operacional Windows 7. Uma interface USB CAN da National Instruments foi conectada a esse PC para comunicação CAN.

 

O módulo Apalis iMX6 utilizado é um computador em módulo (CoM) com processador NXP i.MX 6 quad core de 1GHz,, versão 1.1, com 1GB RAM, montado em uma placa de desenvolvimento Apalis Evaluation para interfaceamento com as redes CAN e Ethernet. Seu sistema operacional é uma versão de distribuição console ARM Linux Angstrom v2014.12 e suas CPUs foram configuradas para execução de instruções em 396MHz.

 

A interface USB CAN do computador hospedeiro e a porta CAN0 da Apalis iMX6 foram conectadas utilizando um cabo comercial CAN padrão de 20 cm de comprimento com duas fêmeas DB9 nas extremidades. A figura 3 mostra a montagem.

 

Figura 3 - Montagem do módulo Apalis iMX6 para os testes

 

No computador hospedeiro, foram executados dois programas Windows: um para envio de mensagens CAN (CANSender) e outro para recepção de mensagens CAN (Measurement & Automation Explorer).

 

CANSender é um programa simples escrito em linguagem C para console Windows que envia para a porta USB CAN, um conjunto de mensagens pré-definidas, em um arquivo texto, durante 10 minutos (esse tempo é fornecido como parâmetro de entrada do programa e pode ser alterado). As mensagens CAN são enviadas repetidamente na ordem em que são lidas do arquivo texto até o término do teste. CANSender toma como parâmetros de entrada: a taxa de transmissão da rede CAN (Kbps), a frequência de envio das mensagens (mps) e o tempo de execução do teste (minutos). Ao final da execução, o programa CANSender emite um relatório com os resultados do teste realizado, tais como o número de mensagens enviadas, taxa de envio de mensagens (mps) e carga percentual média da rede.

 

Measurement & Automation Explorer é um programa Windows desenvolvido pela National Instruments para configuração e utilização de seus dispositivos de Entrada e Saída (I/O) de dados. Ele é utilizado para ler as mensagens da rede CAN e as exibir em uma janela Windows juntamente com as estatísticas da rede.

 

No módulo Apalis iMX6, foram executados dois programas utilitários Linux CAN (CAN utils): um para envio de mensagens CAN (cansend) e outro para recepção de mensagens CAN (candump). Além desses dois programas, também foi executado um programa escrito em Shell Script do Linux (canmsgcount.sh) para contar as mensagens CAN recebidas pelo programa candump.

 

O programa utilitário cansend foi utilizado para enviar a mesma mensagem repetidamente. Ele foi executado com o programa utilitário time do Linux para contagem do tempo de execução. Já o programa candump foi utilizado para ler as mensagens da rede CAN e escrevê-las em um arquivo texto. Ao final de cada teste, esse arquivo texto foi passado como argumento de entrada para o programa canmsgcount.sh, juntamente com uma lista de identificadores de arbitragem (Arbitration ID), para contagem das mensagens recebidas por ID. O código fonte desse programa é mostrado na figura 4.

 

Figura 4 - Código fonte do programa canmsgcount.sh

 

Descrição dos Testes Realizados

 

O primeiro teste realizado, denominado Computador / Apalis, simulou várias ECUs transmitindo uma grande quantidade de mensagens quase simultaneamente. A quantidade de mensagens por segundo (mps) transmitidas ao módulo Apalis iMX6 pelo computador hospedeiro variou entre 2.000 e 8.000, dependendo da taxa de transmissão da rede CAN. Três taxas de transmissão foram utilizadas nos testes: 250Kbps, 500Kbps e 1Mbps (adotada apenas para testar o desempenho do módulo na maior taxa de transmissão permitida no padrão ISO 11898). A fila de entrada da porta CAN0 do módulo Apalis iMX6 foi configurada para armazenar até 1.000 mensagens. O programa CANSender foi utilizado para enviar as doze mensagens CAN mostradas na tabela 1 repetidamente por 10 minutos ao módulo Apalis iMX6. O programa candump foi utilizado para ler as mensagens CAN recebidas na porta CAN0 e armazená-las em um arquivo texto posteriormente analisado pelo programa canmsgcount.sh.

 

Tabela 1 - Mensagens CAN enviadas ao módulo Apalis iMX6 no 1º teste

 

O segundo teste realizado, denominado Apalis / Computador, avaliou a velocidade com que o módulo Apalis iMX6 é capaz de transmitir mensagens CAN a outras ECUs. Novamente, três taxas de transmissão foram utilizadas nos testes: 250Kbps, 500Kbps e 1Mbps. O programa cansend foi utilizado para enviar a mensagem mostrada na tabela 2, um milhão de vezes seguidas ao computador hospedeiro. O programa Measurement & Automation Explorer foi utilizado para ler as mensagens CAN da rede.

 

Tabela 2 - Mensagens CAN enviadas ao computador hospedeiro no 2º teste

 

O terceiro teste realizado, denominado Apalis / Apalis, avaliou o desempenho do módulo Apalis iMX6 ao transmitir e receber mensagens CAN simultaneamente. As portas CAN0 e CAN1 foram conectadas utilizando o cabo comercial CAN padrão. Novamente, três taxas de transmissão foram utilizadas nos testes: 250Kbps, 500Kbps e 1Mbps. O programa cansend foi utilizado para enviar a mensagem mostrada na tabela 2, um milhão de vezes seguidas da porta CAN0 para a porta CAN1. O programa candump foi utilizado para ler as mensagens CAN recebidas na porta CAN1 e armazená-las em um arquivo texto posteriormente analisado pelo programa canmsgcount.sh.

 

Resultados Obtidos

 

O teste Computador / Apalis foi executado três vezes para cada uma das taxas de transmissão por aproximadamente 10 minutos cada. Os resultados obtidos são mostrados na tabela 3.

 

Tabela 3 - Resultados dos testes Computador / Apalis

 

A 1Mbps, algumas mensagens foram perdidas e a carga da rede CAN ficou bem abaixo do 100%. Esse problema pode ter sido causado pelo fato do sistema operacional Windows do PC não executar aplicações em tempo real e com suspensão de processos em unidades de 16ms. Para manter a frequência de envio de mensagens nessas condições, o programa CANSender envia várias mensagens seguidas à fila da interface USB CAN periodicamente. Essa abordagem pode ter causado problemas de transmissão ou picos de 100% por alguns segundos na rede. Para nos certificarmos disso, repetimos os testes a 1Mbps com carga de rede próxima a 50%, enviando aproximadamente 4.100 mps. Nesse caso,  não houve perda de mensagens.

 

O teste Computado / Apalis foi executado uma única vez para cada taxa de transmissão. Os resultados obtidos são mostrados na tabela 4.

 

Tabela 4 - Resultados dos testes Apalis / Computador

 

Os valores na coluna Tempo foram calculados utilizando o programa time do Linux. A carga da rede nesses testes foi superior à carga nos testes anteriores por causa das mensagens enviadas conterem o número máximo de dados permitido (oito bytes).

 

O último teste, Apalis / Apalis, também foi executado uma única vez para cada taxa de transmissão. Os resultados obtidos são mostrados na tabela 5.

 

Tabela 5 - Resultados dos testes Apalis / Apalis

 

Nos testes a 1Mbps, todas as mensagens foram enviadas pelo driver da porta CAN0 e recebidos pelo driver da porta CAN1, mas o programa candump perdeu algumas mensagens. Esse teste foi repetido por mais duas vezes. No primeiro teste, foi alterada a frequência da CPU para 792 MHz, mas continuou havendo perda de mensagens. No segundo teste, o programa candump foi executado com prioridade alta (de 20 para 5) e com a CPU em 396 MHz; a carga da CPU chegou a 45%, mas não houve perda de mensagens CAN. Os resultados desses dois testes são mostrados na tabela 6.

 

Tabela 6 - Resultados dos testes Apalis / Apalis – testes adicionais a 1Mbps

 

Análise dos Resultados

 

O desempenho do módulo Apalis iMX6 nos testes Computador / Apalis foram bastante satisfatórios. O comprimento médio do frame das mensagens CAN nesses testes é de 135,33 bits. Com isso, é possível transmitir até 1.850, 3.700 e 7.390 mps in 250Kbps, 500Kbps, 1Mbps respectivamente. Considerando que a carga na rede CAN é um valor médio percentual, o número de mensagens por segundo enviadas nesses testes é bem próximo a esses limites. No entanto, houve perda de mensagens com a CAN a 1Mbps, como observado na sessão anterior. A carga média da rede em torno de 72% nesses testes contra 95% no teste Apalis / Computador e 90% no teste Apalis / Apalis, sem haver perda de mensagens, sugere que o programa CANSender pode não ter transmitido as mensagens CAN corretamente ou possa ter ocorrido falha não detectada no driver USB CAN. Por essa razão, desconsideramos os testes Computador / Apalis com a CAN a 1Mbps em nossas análises.

 

Nos testes Apalis / Computador e Apalis / Apalis, o comprimento da mensagem CAN enviada é de aproximadamente 140 bits, o que permite transmitir até 1.785, 3.570 e 7.140 mps in 250Kbps, 500Kbps, 1Mbps respectivamente. Apesar do Linux instalado no módulo Apalis iMX6 não ser de tempo-real (RTOS), seu escalonador possui baixa latência e seus processos podem ser suspensos por alguns microssegundos. Isso permitiu que o programa cansend pudesse manter uma frequência de envio de mensagens mais precisa que o programa CANSender. Isso pode ser observado nos resultados desses testes cuja carga da rede CAN ficou entre 90% e 100% sem haver perda de mensagens e com quantidades próximas aos valores máximos de transmissão.

 

Esses mesmos testes foram feitos anteriormente com um módulo Apalis T30, mas sem muito sucesso. Notamos que ele começava a perder mensagens quando a carga de rede CAN atingia 25%. Isso possivelmente ocorria por causa das características de seu controlador CAN que possui apenas dois buffers de recepção, sem FIFO, e os drivers Linux não atendiam as interrupções do controlador a tempo para leitura desses buffers.

 

Conclusões e Trabalhos Futuros

 

O módulo Apalis iMX6 apresentou desempenho satisfatório nos testes realizados para avaliar seu controlador CAN e sua capacidade de transmitir mensagens CAN sem falhas e recebê-las sem perda, quando utilizada como uma ECU em meio a várias outras ECUs transmitido mensagens CAN simultaneamente. No entanto, sua utilização como ECU de controle de condução nos dois robôs ainda depende de mais alguns testes para avaliar sua capacidade de processamento e tempo de resposta no processo de coordenação da velocidade de giro e esterçamento das rodas.

 

Um programa de controle de condução está em desenvolvido para rodar no módulo Apalis iMX6. Nossos próximos testes utilizarão esse programa para medir o tempo de chegada das mensagens CAN de estado vindas dos controladores das rodas e o tempo de resposta e envio de mensagens CAN com as mudanças de estado desejadas a cada ciclo de controle (looptime).

 

Agradecimentos

 

Agradecemos à Toradex Brasil pela doação do módulo Apalis iMX6 e da placa Apalis Evaluation.

 

Referências

 

[1] VOSS, Wilfried (2008). A Comprehensible Guide to J1939. Greenfield, MA: Copperhill Technologies Corporation.

 

[2] FERNANDES, Guilherme e outros (2017). Developing Real-Time Systems on Application Processors. Disponível em https://www.toradex.com/pt-br/blog/developing-real-time-systems- on-application-processors.  Acesso em 14 novembro 2018.

 

[3] KAREŽIĆ, Ivan; LUGARIĆ, Tomislav (2018). SoM Apalis e QT fazem parte do supercarro elétrico mais rápido do mundo. Disponível em https://www.toradex.com/pt-br/applications/automotive- infotainment/rimac. Acesso em 14 novembro 2018.

 

[4] ISO (2007). Tractors and Machinery for Agriculture and Forestry – Serial control and Communications Data Network – Part 1: General Standard for Mobile Data Communication, ISO 11783–1:2007(E), first ed. International Organization for Standardization, Geneva, Switzerland.

 

[5] ISO (1998). Tractors and Machinery for Agriculture and Forestry – Serial control and Communications Data Network – Part 3: Data Link Layer, ISO 11783–3:1998(E), first ed. International Organization for Standardization, Geneva, Switzerland.

 

[6] SocketCAN (2018). SocketCAN userspace utilities and tools. Disponível em https://github.com/linux-can/can-utils. Acesso em 14 novembro 2018.

 

[7] FERNANDES, Guilherme (2017). Sistemas Embarcados Impulsionam a Agricultura de Precisão. Disponível em https://www.embarcados.com.br/sistemas-embarcados-agricultura-de-precisao/. Acesso em 14 novembro 2018.

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Alexandre José Tiberti
Doutor e Mestre em Engenharia e Bacharel em Ciências da Computação pela Universidade de São Paulo (USP), campus de São Carlos, é atualmente funcionário da Universidade de São Paulo, Escola de Engenharia de São Carlos (EESC-USP), Depto. de Engenharia Mecânica. Sua experiência profissional inclui mais de onze anos em docência universitária e seis anos de trabalho em empresas de desenvolvendo de software. Possui vários artigos publicados na área de integração de sistemas de manufatura, planejamento de sistemas de produção e robôs agrícolas autônomos. Recebeu um título de "Peão da Tecnologia", concedido pelo ParqTec de São Carlos no ano 2000, por sua participação no desenvolvimento de um sistema computacional de controle de acesso perimetral para a CSN (Companhia Siderúrgica Nacional).

Deixe um comentário

avatar
 
  Notificações  
Notificar