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: