Instalando ROS em uma imagem Ubuntu IMG para placa única

Introdução

Outro dia, enquanto trabalhava na minha tese, me deparei com a necessidade de criar uma imagem Ubuntu para uma plataforma single-board com ROS já instalado (Sistema operacional do robô - sistema operacional do robô). Em suma, o diploma é dedicado à gestão de um grupo de robôs. Os robôs estão equipados com duas rodas e três telêmetros. Tudo é controlado pelo ROS, que roda na placa ODROID-C2.

Instalando ROS em uma imagem Ubuntu IMG para placa única
Joaninha robô. Desculpe pela má qualidade da foto

Não houve tempo nem vontade de instalar o ROS em cada robô individualmente e, portanto, houve a necessidade de uma imagem do sistema com o ROS já instalado. Depois de navegar na Internet, encontrei várias abordagens sobre como isso poderia ser feito.
Em geral, todas as soluções encontradas podem ser divididas nos seguintes grupos.

  1. Programas que criam uma imagem a partir de um sistema pronto e configurado (Distroshare Ubuntu Imager, kit ao vivo linux, linux respin, retorno do sistema, etc.)
  2. Projetos que permitem criar sua própria imagem (yocto, linux do zero)
  3. Montando você mesmo a imagem (personalização de CD ao vivo и Equivalente russomais artigo sobre Habré)

Usar soluções do primeiro grupo parecia ser a opção mais simples e atraente, mas nunca consegui criar uma imagem de sistema ao vivo para ODROID. As soluções do segundo grupo também não me agradaram devido ao limite de entrada bastante elevado. A montagem manual de acordo com os tutoriais disponíveis também não era adequada, pois... Minha imagem não tinha um sistema de arquivos compactado.
Como resultado, me deparei com um vídeo sobre chroot (chroot - altera a raiz, link para o vídeo no final do post) e suas capacidades, optou-se por utilizá-lo. A seguir, descreverei meu caso particular de customização do Ubuntu para desenvolvedores de robótica.

Linha de base:

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

Preparando a Imagem

  1. Baixe a imagem do Ubuntu para ODROID em Site Oficial

  2. Descompactando o arquivo

    unxz –kv <файл архива с образом>

  3. Crie um diretório no qual montaremos a imagem

    mkdir mnt

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

    file <файл образа>

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

    Instalando ROS em uma imagem Ubuntu IMG para placa única

    Nota. A localização do sistema de arquivos também pode ser visualizada usando o utilitário se separaram.

  5. Montando a imagem

    sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/

    A seção que precisamos começa com o bloco 264192 (seus números podem ser diferentes), o tamanho de um bloco é 512 bytes, multiplique-os para obter o recuo em bytes.

  6. Vá para a pasta com o sistema montado e entre nele

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

    ~/livecd/mnt — caminho completo para o diretório com o sistema montado
    lixo/sh - shell (também pode ser substituído por bin/bash)
    Agora você pode começar a instalar os pacotes e aplicativos necessários.

Instalando o ROS

Instalei a última versão do ROS (ROS Melodic) de acordo com tutorial oficial.

  1. Atualizando a lista de pacotes

    sudo apt-get update

    Foi aqui que recebi o erro:

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>

    Isso se deve ao fato de a chave de assinatura do pacote ter expirado. Para atualizar as chaves, digite:

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

  2. Preparando o sistema para 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 o processo de instalação, às vezes ocorreu um erro:

    dpkg: error: failed to write status database record about 'iputils-ping' to '/var/lib/dpkg/status': No space left on device

    Foi corrigido limpando o cache usando o utilitário apt:

    sudo apt-get clean; sudo apt-get autoclean

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

    source /opt/ros/melodic/setup.bash

    não vai funcionar, porque Não rodamos o bash, então NÃO precisa ser digitado 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 direitos de acesso
    Como estamos logados e, de fato, realizamos todas as ações em nome da raiz do sistema que está sendo montado, o ROS só será iniciado com direitos de superusuário.
    Ao tentar executar o roscore sem sudo, ocorre um 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, vamos alterar recursivamente os direitos de acesso ao diretório inicial do usuário ROS. Para fazer isso digitamos:

    sudo rosdep fix-permissions

  6. Instalação adicional dos pacotes rviz e rqt

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

Toques finais

  1. Saia do chroot:
    exit
  2. Desmonte a imagem
    cd ..
    sudo umount mnt/
  3. Vamos compactar a imagem do sistema em um arquivo
    xz –ckv1 <файл образа>

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

Links:

  • Este vídeo ajudou muito sobre como trapacear no Linux e por que você precisa dele:



Fonte: habr.com

Adicionar um comentário