Instale o ROS em um Raspberry Pi

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.

imagem


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.

imagem

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:

# For more options and information see
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
# Some settings may impact device functionality. See link above for details
 
# uncomment if you get no picture on HDMI for a default "safe" mode
hdmi_safe=1
 
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1
 
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
 
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
 
# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1
 
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
 
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
 
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
config_hdmi_boost=4
 
# uncomment for composite PAL
#sdtv_mode=2
 
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800


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:

imagem

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:

imagem

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:

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

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:

imagem

imagem

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. ”

Source: https://habr.com/ru/post/pt385493/


All Articles