Introdução
Outro dia, enquanto trabalhava no meu diploma, me deparei com a necessidade de criar uma imagem. Ubuntu para um computador de placa única 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.

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.
- Programas que criam uma imagem a partir de um sistema pronto e configurado (, , , retorno do sistema, etc.)
- Projetos que permitem criar sua própria imagem (, )
- Montando você mesmo a imagem ( и mais )
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 do vídeo no final da postagem) e suas funcionalidades, decidi utilizá-lo. Abaixo, descreverei meu caso específico de personalização. Ubuntu Para desenvolvedores de robótica.
Linha de base:
- 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 foi modificada foi – Ubuntu 18.04.3 versão desktop mate.
- A máquina na qual o sistema montado deve funcionar é ODROID-C2.
Preparando a Imagem
Baixe a imagem Ubuntu para ODROID com
Descompactando o arquivo
unxz –kv <файл архива с образом>Crie um diretório no qual montaremos a imagem
mkdir mntDetermine 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):

Nota. A localização do sistema de arquivos também pode ser visualizada usando o utilitário se separaram.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.
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 .
Atualizando a lista de pacotes
sudo apt-get updateFoi aqui que recebi o erro:
Err:6 http://deb.odroid.in/c2 bionic InRelease The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <mauro.ribeiro@hardkernel.com>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 AB19BAC9Preparando 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 C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654sudo apt updateInstalando 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-melodicNota 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 deviceFoi corrigido limpando o cache usando o utilitário apt:
sudo apt-get clean; sudo apt-get autocleanNota 2. Após a instalação, faça o source usando o comando:
source /opt/ros/melodic/setup.bashnão vai funcionar, porque Não rodamos o bash, então NÃO precisa ser digitado no terminal.
Instalando as dependências necessárias
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essentialsudo apt install python-rosdepsudo rosdep init rosdep updateConfigurando 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-permissionsInstalação adicional dos pacotes rviz e rqt
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Toques finais
- Saia do chroot:
exit - Desmonte a imagem
cd .. sudo umount mnt/ - Vamos compactar a imagem do sistema em um arquivo
xz –ckv1 <файл образа>
Todos! Agora com a ajuda Você pode gravar a imagem do sistema em um cartão SD, inseri-lo no ODROID-C2 e terá o dispositivo. Ubuntu Com o ROS instalado!
Links:
- Este vídeo ajudou muito sobre como trapacear no Linux e por que você precisa dele:

Fonte: habr.com

