Eu já escrevi anteriormente sobre a instalação do rosserial_arduino para a interação do microcontrolador Arduino com a plataforma robótica ROS em um artigo anterior. rosserial_arduino é um pacote da pilha rosserial projetada para a plataforma ROS e "transforma" a placa Arduino em um nó ROS independente com o qual outros componentes do sistema podem interagir. Ao usar o Arduino para projetos robóticos, há uma limitação significativa: o Arduino não pode ser usado como um nó de computação completo que pode lidar com todas as operações necessárias para o funcionamento normal do robô. Por exemplo, você não pode executar scripts OpenCV nele para tarefas de visão computacional. Neste artigo, quero falar sobre minha experiência na instalação de um sistema ROS e na conexão de um Arduino a um microcomputador Raspberry Pi usando o já familiar pacote rosserial_arduino.
Motivação
Depois de conhecer a plataforma rosserial_arduino, tive uma pergunta: posso de alguma forma usar o Arduino em conjunto com um microcomputador mais poderoso, de maneira a tornar o robô mais independente do laptop.Então tive a ideia de experimentar o ROS em um microcomputador Raspberry Pi. O Raspberry Pi é um mini-computador independente na placa. Possui um chip de CPU, um gráfico, um slot para cartão SD, uma entrada Ethernet, várias interfaces USB e uma saída de vídeo HDMI para conectar um monitor. Você pode conectar um mouse, teclado e um disco rígido externo às entradas USB.A combinação do Raspberry Pi e do Arduino é muito promissora e tem sido usada repetidamente em projetos robóticos.O Raspberry Pi também permite conectar uma câmera (webcam ou câmera especial RPi Board). Um simples robô de rodas em uma placa Arduino Uno modificada caiu em minhas mãos há um ano. Agora mesmo, em minhas mãos estava o Raspberry Pi Modelo B.
Instalando o sistema operacional no Raspberry Pi
Primeiro você precisa instalar a distribuição Linux no "raspberry". A maneira mais fácil de fazer isso é com o gerenciador de instalação do NOOBS OS. Como fazer isso pode ser lido neste manual no portal oficial do Raspberry Pi .Eu escolhi instalar o Raspbian, uma distribuição Debian modificada projetada especificamente para o Raspberry.Nota: ao conectar um monitor, geralmente há problemas com a exibição de uma imagem, em particular, isso acontece com monitores mais antigos que não possuem uma entrada HDMI. Aqui, o arquivo config.txt vem em nosso auxílio - o arquivo de configuração do Raspberry para as configurações do monitor. Em alguns casos, ele já está no arquivo de imagens do sistema (Raspbian), no caso do NOOBS, ele precisa ser criado na raiz do cartão SD.Insira as seguintes linhas no arquivo:
hdmi_safe=1
hdmi_force_hotplug=1
config_hdmi_boost=4
Nesse caso, as linhas importantes são:hdmi_safe=1
…
hdmi_force_hotplug=1
…
config_hdmi_boost=4
No meu caso, essas configurações tornaram possível obter a imagem correta em um monitor com uma entrada VGA.Configurar o acesso remoto ao Raspberry Pi
Você pode conectar-se à placa Raspberry Pi pela rede via SSH. Para fazer isso, o Raspberry Pi deve ser conectado à rede por meio de um cabo Ethernet (há uma entrada especial na placa para isso) ou por um adaptador Wi-Fi conectado a uma porta USB. Quando você conecta um cabo Ethernet, o Raspberry recebe automaticamente um endereço IP na rede e fica imediatamente disponível.Se você usar um adaptador, precisará executar vários procedimentos simples.Usei o seguinte adaptador TPLINK Wi-Fi:
Conecte o adaptador à porta USB e verifique se o dispositivo no sistema foi detectado pelo comando$ iwconfig
Agora, examinamos o espaço para procurar redes sem fio disponíveis:$ sudo iwlist wlan0 scan
O campo ESSID na saída do comando indica o nome do ponto de acesso.Agora, conecte-se ao ponto de acesso para criptografia WPA usando o utilitário wpa_supplicant.Usando o utilitário wpa_passphrase, que faz parte do pacote wpa_supplicant, geramos uma senha com base na chave de acesso:$ wpa_passphrase <hotspot_name> <hotspot_access_key>
onde hotspot_name e hotspot_access_key são o nome do ponto de acesso e da chave de acesso, respectivamente.O utilitário retorna a sequência psk gerada.A seguir, todo o bloco de rede, contendo o ssid da rede e a linha psk, é inserido no final do arquivo de configuração /etc/wpa_supplicant/wpa_supplicant.conf e salvo. Finalmente, reiniciamos nosso Raspberry Pi e verificamos a conexão de rede.Para conectar via SSH no terminal do computador, você precisa executar o comando:$ ssh pi@<raspi_ip>
onde <raspi_ip> é o endereço IP do raspberry, que pode ser reconhecido pelo comando ifconfig executado diretamente no terminal do raspberry.Para conectar via SSH com a capacidade de executar aplicativos gráficos, use o comando:$ ssh -X pi@<raspi_ip>
Você pode conectar-se ao “Malinka” no modo de área de trabalho remota usando o programa Virtual Network Computing (VNC). O gerenciamento é realizado transmitindo as teclas digitadas nos movimentos do teclado e do mouse de um computador para outro e retransmitindo o conteúdo da tela através de uma rede de computadores. O sistema VNC é independente de plataforma.Primeiro, instale o servidor VNC no Raspberry Pi usando o comando no terminal:$ sudo apt-get install tightvncserver
Após a conclusão da instalação, execute o comando:$ vncserver :1 -geometry 1280x800 -depth 16
Este comando iniciará o servidor VNC. Nesse caso, isso significa que uma sessão X virtual está sendo executada (apresentação virtual da área de trabalho do Raspberry Pi). Agora, após iniciar o cliente VNC e conectar-se a ele, você estará conectado a esta área de trabalho virtual.Parâmetro: 1 define o número da porta na qual o processo VNC será executado. O parâmetro geometry define a resolução (nesse caso, tamanho) da área de trabalho virtual. O parâmetro depth determina a profundidade da cor da tela da área de trabalho em bits (8, 16 e 24, o padrão é 16).Na primeira inicialização, o servidor VNC solicitará que você digite uma senha, que será solicitada ao se conectar à área de trabalho remota.Agora instale o cliente VNC em um computador desktop:$ sudo apt-get install xtightvncviewer
Estamos prontos para conectar-se à área de trabalho remota “Malinka”:$ vncviewer <raspi_ip>:1
e digite a senha.Uma janela é aberta com uma imagem da área de trabalho semelhante a esta:
Vale a pena notar que toda vez que você reinicia uma framboesa, o servidor VNC precisa ser reiniciado.Conecte o Arduino ao Raspberry Pi
O Arduino pode ser conectado ao Raspberry Pi tão facilmente quanto a um computador comum. Para começar, instale o Arduino IDE no Raspberry Pi:$ sudo apt-get update
$ sudo apt-get install arduino
Inicie o comando IDE do Arduino:$ arduino
O IDE do Arduino se conecta ao Raspberry Pi por meio do seu cabo de programação USB. Essa conexão requer que o console serial seja desconectado. Por padrão, o Raspberry Pi configura a porta serial (GPIO14-GPIO15) para fornecer informações de inicialização. Também permite que você faça login no seu Raspberry Pi através de um dispositivo conectado. Para poder programar o Arduino, é necessário desativar esta opção por padrão.Para desativar a autorização, edite o arquivo do sistema inittab:$ sudo nano /etc/inittab
Encontre a linha:T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
comente:
Depois disso, salve e feche o arquivo.Ao inicializar, o Raspberry Pi envia mensagens de depuração para a porta serial. Isso pode ser útil em alguns casos, mas agora precisamos desativar essa funcionalidade. Para fazer isso, edite o arquivo do sistema cmdline.txt:$ sudo nano /boot/cmdline.txt
Encontre a linha:dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
e remova o bloco de parâmetros do console para obter uma linha como esta:dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Salve e feche o arquivo.Para que o sistema aplique as alterações, você precisa reiniciar o Raspberry Pi:$ sudo reboot
Agora você pode conectar a placa Arduino à porta USB do Raspberry Pi, configurar o IDE do Arduino para o modelo da placa Arduino e fazer upload do esboço.Configurando ROS e rosserial_arduino
Eu escolhi instalar o ROS Indigo. As instruções de instalação do ROS Indigo são descritas em detalhes na página oficial .Eu recomendo instalar a opção de instalação do ROS-Comm. Pela minha própria experiência, posso dizer que a instalação da opção Desktop pode levar muito tempo da ordem do meio-dia.Após instalar o ROS e resolver todas as dependências com o utilitário rosdep, simplesmente compilamos catkin_workspace:$ catkin_make
$ catkin_make install
Executando esboços rosserial_arduino no Raspberry Pi
Agora temos o rosserial_arduino instalado e podemos executá-lo:$ roslaunch rosserial_python serial_node.py /de/ttyACM0
Ao iniciar o servidor rosserial, pode ocorrer um erro: nenhum módulo chamado diagnostic_msgs.msg.Para resolver o problema, você precisa baixar do repositório oficial do ROS a origem das mensagens do ROS - common_msgs que não estão na instalação e carregá-lo na pasta do pacote rosserial na pasta da área de trabalho e compilar o ROS:$ catkin_make install
Comente! Ao carregar esboços no IDE do Arduino, pode ocorrer um erro "erro fatal: string: nenhum arquivo ou compilação de diretório finalizado". Isso significa que temos tipos de mensagens ROS em ros_lib, mas eles também devem ser compilados nos tipos correspondentes para o Arduino. Você precisa compilá-los desta maneira:$ cd <sketchbook>/libraries
$ rm -rf ros_lib
$ rosrun rosserial_python make_libraries.py .
Agora você pode trabalhar com rosserial_arduino no Raspberry Pi da mesma maneira que em um computador comum: crie nós, assine tópicos, publique em tópicos, etc.Você pode conectar uma câmera RPi Board ao Raspberry Pi e usar o pacote cv_bridge ROS (a interface ROS para interagir com o OpenCV, uma descrição pode ser encontrada aqui ) para executar tarefas de visão computacional.A propósito, meu robô está totalmente armado:

Conclusão
Espero que este artigo seja uma boa entrada para você começar a trabalhar com o ROS no Raspberry Pi e tenha suas próprias idéias para usar o Raspberry Pi em conjunto com o Arduino ou outros microcontroladores desse tipo. Desejo-lhe boa sorte em seus experimentos e projetos e espero compartilhar em breve minhas novas idéias nos artigos a seguir!PS: Algumas instruções foram retiradas do livro de V. Petin, “Electronics. Microcomputadores Raspberry Pi. Guia Prático. ”