eezybotarm mk2 ntbd ros docker

Exploração do eezybotarm mk2 recorrendo a docker containers com os pacotes para o ROS do projecto ntbd docker.

O microcontrolador (Arduino Mega 2560)  tem que estar a correr um programa (firmware) desenhado para o efeito,  que usa a bibloteca Servo, para geral o sinal PWM adequado, e que se integra no ROS pelo recurso ao pacote rosserial e rosserial-arduino.

Saiba mais sobre o Firmware de Arduino para controlo de Servos em ROS.

Esta exploração foi efectuada com base nas informaçoes disponveis no  artigo do seguinte endereço:

https://hotblackrobotics.github.io/en/blog/2018/01/17/ntbd-guide-part-I/

Se não estiver instalado, começamos por instalar o docker com o seguinte comando:

sudo apt install docker docker.io
sudo apt install docker-compose

Testar o docker com o seguinte comando:

sudo docker run hello-world

Conforme as instruções disponiveis a partir do ponto 4 do artigo referido acima.

Instalar as duas imagens do docker que são necessárias com os seguintes comandos:

sudo docker pull hbrobotics/ntbd_base:intel
sudo docker pull hbrobotics/ntbd_manipulator:intel

Existem imagens para o Raspberry Pi 3, para as usar basta substituir o :intel por :rpi3.

Nota suplementar a explorar, no docker hub  existem imagens do ROS para o docker que merecem atenção.

https://hub.docker.com/u/hbrobotics/

Além disso  estão disponíveis os ficheiros que permitem fazer os docker containers no seguinte repositório:

https://github.com/HotBlackRobotics/docker-ros-base

Para executar o dois contentores (imagens) de docker devemos executar o seguinte comando:

sudo docker-compose -f docker-compose.hbr_ntbd_intel.yml up

Para o Raspberry Pi 3 usar o ficheiro docker-compose.hbr_ntbd_rpi3.yml

A primeira execução produziu as seguintes mensagens no terminal

Creating hbr_ntbd_manipulator_intel ... 
Creating hbr_ntbd_manipulator_intel ... done
Attaching to hbr_ntbd_manipulator_intel
hbr_ntbd_manipulator_intel | * Starting nginx nginx
hbr_ntbd_manipulator_intel | ...done.
hbr_ntbd_manipulator_intel | [ERROR] [1586442600.408287]: Error opening serial: [Errno 2] could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'
hbr_ntbd_manipulator_intel | the rosdep view is empty: call 'sudo rosdep init' and 'rosdep update'

A mensagem que mais me chamou a atenção foi a que refere o erro na abertura da porta serie: /dev/ttyACM0 (esta porta serie não existe, mas sim a ttyUSB0).

Um dos problemas potenciais é a porta não ter permissões. Pelo que o primeiro passo é verificar e atribuir as permissões correctas. Mas duvido que seja um problema pois o container está a correr como root.

Experimentei as seguintes possibilidades (três) para solucionar este erro, só o ultimo funcionou adequadamente:

  • Alterar o mapeamento do device entre o host e o container no ficheiro docker-compose.hbr_ntbd_intel.yml não funcionou.
  • Criar o link simbólico (ln -s /dev/ttyUSB0 /dev/ttyACM0)
  • Alterar o ficheiro NTBD_launch.launch dentro do docker container de modo a que a porta a  usar seja a /dev/ttyUSB0, assim como trocar o baud rate para 57600 (ver mais abaixo o procedimento).

Depois de executar a alteração do ficheiro NTBD_launch.launch voltei a executar o comando do docker compose e o programa funcionou bem.

No raspberry pi 3 também funciona bem dentro do docker com excepção de um problema de visualização já que a imagem fica invertida no plano (de cabeça para baixo) conforme se pode ver na imagem principal do artigo.

Exemplo de utilização dos docker containers do ntbd num raspberry pi 3 apenas para efeitos de visualização.

Alteração do ficheiro launch no container

Com os containers do projecto ntbd a serem executados, correr o seguinte comando para obter o id do container.

sudo docker ps

Usar os primeiros digitos do CONTAINER ID correspondentes ao container do ntbd e lançar uma shell no container com o seguinte comando:

sudo docker exec -it ctnid /bin/bash

Este comando devolve uma prompt no interior do container, pelo que o passo seguinte é instalar o nano, para o usar na alteração do ficheiro launch.

apt install nano

De seguida executamos o nano para alterar o ficheiro com o comando:

nano /catkin_ws/src/ntbd_core/launch/NTBD_launch.launch

Trocamos a porta e o baud rate, para ttyUSB0 e 57600, e gravamos o ficheiro e saimos da shell.

 <arg name="baud" default="115200"/>
<arg name="port" default="/dev/ttyACM0"/>

Posteriormente reiniciamos o container com o comando:

docker restart ctnid

Para mim tive que sair e voltar a entrar mais uma vez, para funcionar.

informação de alteração do container disponivel no seguinte endereço:

How to edit files within docker containers