Instalação do ROS na imagem IMG do Ubuntu para placas únicas.

Introdução

Recentemente, enquanto trabalhava na minha tese, me deparei com a necessidade de criar uma imagem do Ubuntu para uma placa única já com o ROS instalado (Robot Operating System – sistema operacional de robôs). Em resumo, a tese aborda o controle de um grupo de robôs. Os robôs são equipados com duas rodas e três medidores de distância. Tudo isso é gerenciado a partir do ROS, que roda na placa ODROID-C2.

Instalação do ROS na imagem IMG do Ubuntu para placas únicas.
Robô Ladybug. Desculpe pela baixa qualidade da foto

Não havia tempo nem vontade de instalar o ROS em cada robô individualmente, o que gerou a necessidade de uma imagem do sistema já com o ROS instalado. Após navegar pela internet, encontrei várias abordagens sobre como isso poderia ser feito.
No geral, todas as soluções encontradas podem ser divididas nas seguintes categorias.

  1. Programas que criam uma imagem de um sistema pronto e configurado (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback e outros)
  2. Projetos que permitem montar sua própria imagem (yocto, linux from scratch)
  3. Montagem da imagem manualmente (liveCD customization e análogo russo, além de artigo no habra)

A utilização de soluções do primeiro grupo parecia a opção mais simples e atraente, no entanto, não consegui criar uma imagem de sistema ao vivo para o ODROID. As soluções do segundo grupo também não me serviram devido à alta barreira de entrada. A montagem manual, seguindo os tutoriais disponíveis, também não funcionou, pois minha imagem não tinha um sistema de arquivos compactado.
No final, ao me deparar com um vídeo sobre chroot (chroot — mudar root, link para o vídeo ao final do post) e suas capacidades, decidi utilizá-lo. A seguir, descreverei meu caso particular de customização do Ubuntu para desenvolvedores de robótica.

Dados iniciais:

  • Todo o processo de modificação da imagem (exceto a gravação no cartão SD usando o balenaEtcher) foi realizado no sistema operacional Ubuntu 18.04.
  • O sistema operacional cuja montagem modifiquei – Ubuntu 18.04.3 versão desktop mate.
  • A máquina onde o sistema montado deve funcionar – ODROID-C2.

Preparação da imagem

  1. Baixe a imagem do Ubuntu para ODROID em site oficial

  2. Descompacte o arquivo

    unxz –kv

  3. Crie um diretório onde montaremos a imagem

    mkdir mnt

  4. Determine a partição onde o sistema de arquivos está localizado

    file

    Procure uma partição com sistema de arquivos no formato ext2, ext3 ou ext4. Precisamos do endereço de início da partição (destacado em vermelho na captura de tela):

    Instalação do ROS na imagem IMG do Ubuntu para placas únicas.

    Observação. A localização do sistema de arquivos também pode ser visualizada utilizando a ferramenta parted.

  5. Montamos a imagem

    sudo mount -o loop,offset=$((264192*512))  mnt/

    A partição que precisamos começa no bloco 264192 (os seus números podem ser diferentes), tamanho de um bloco — 512 bytes, multiplicamos para obter o deslocamento em bytes.

  6. Vamos para a pasta do sistema montado e fazemos chroot nela

    cd mnt/
    sudo chroot ~/livecd/mnt/ bin/sh

    ~/livecd/mnt — caminho completo até o diretório com o sistema montado
    bin/sh — shell (pode ser substituído por bin/bash)
    Agora já podemos instalar os pacotes e aplicativos necessários.

Instalação do ROS

Eu instalei a última versão do ROS (ROS Melodic) seguindo o tutorial oficial.

  1. Atualizando a lista de pacotes

    sudo apt-get update

    Aqui eu tive um erro:

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    As seguintes assinaturas eram inválidas: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)

    Isso está relacionado ao fato de que a validade da chave para assinar os pacotes expirou. Para atualizar as chaves, digite:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9

  2. Preparando o sistema para a instalação do ROS

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

    sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

    sudo apt update

  3. Instalando o ROS
    Infelizmente, não consegui instalar a versão desktop do ROS, então instalei apenas os pacotes básicos:

    sudo apt install ros-melodic-ros-base
    apt search ros-melodic

    Nota 1. Durante a instalação, às vezes ocorria um erro:

    dpkg: erro: falha ao gravar o registro do banco de dados de status sobre 'iputils-ping' em '/var/lib/dpkg/status': Sem espaço restante no dispositivo

    Isso foi corrigido limpando o cache da ferramenta apt:

    sudo apt-get clean; sudo apt-get autoclean

    Nota 2. Após a instalação, faça source com o comando:

    source /opt/ros/melodic/setup.bash

    não será possível, pois não iniciamos o bash, então não é necessário digitá-lo no terminal.

  4. Instalando as dependências necessárias

    sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

    sudo apt install python-rosdep

    sudo rosdep init
    rosdep update

  5. Configurando permissões de acesso
    Como estamos em chroot e, de fato, executamos todas as ações como usuário root do sistema que estamos montando, o ROS será executado apenas com permissões de superusuário.
    Ao tentar iniciar o roscore sem sudo, ocorre o erro:

    Traceback (most recent call last): File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 230, in main write_pid_file(options.pid_fn, options.core, options.port) File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 106, in write_pid_file with open(pid_fn, "w") as f: IOError: [Errno 13] Permission denied: '/home/user/.ros/roscore-11311.pid'

    Para evitar que o erro ocorra, mudaremos recursivamente as permissões do diretório home do usuário ROS. Para isso, digite:

    sudo rosdep fix-permissions

  6. Vamos instalar os pacotes rviz e rqt

    sudo apt-get install ros-melodic-rqt ros-melodic-rviz

Toques finais

  1. Saindo do chroot:
    sigreturn
  2. Desmontando a imagem
    cd ..
    sudo umount mnt/
  3. Vamos empacotar a imagem do sistema em um arquivo
    xz –ckv1

Pronto! Agora com o balenaEtcher você pode gravar a imagem do sistema em um cartão SD, inseri-lo no ODROID-C2, e você terá o Ubuntu com o ROS instalado!

Links:

  • Este vídeo ajudou muito a entender como usar o chroot no Linux e para que serve:

Por que no hosting comum a administração do PrestaShop é lenta, e no seu não é?


Fonte: habr.com
Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster