6.2 tobias_drivers
6.2.7 Câmara Arducam IMX219
A Jetson Nano Developer Kit possui um conector Mobile Industry Processor Interface (MIPI)-CSI, J13, que é compatível com a câmara Arducam IMX219 e os drivers de comunicação já vêm instalados no SDK JetPack. No entanto foi desenvol- vido um guia de instalação destes drivers para futuros trabalhos e implementações, caso haja algum problema de compatibilidade com este equipamento. Este guia encontra-se na secção A.6 do apêndice A e foi desenvolvido tendo por base o guia da ArduCam para interface com a Jetson Nano77.
A Jetson Nano utiliza uma biblioteca GStreamer78 para assegurar o strea- ming de vídeo das câmaras CSI (JetsonHacks79).
Através do comando exposto no código-fonteA.5do apêndiceAfoi testada a interface da Jetson com a camara. Este código utiliza o GStreamer para abrir o fluxo de vídeo da câmara, com largura de 3820 píxeis, comprimento de 2464 píxeis a 21 frames por segundo e mostra-o numa janela de largura 1920 píxeis e de comprimento 1080 píxeis. O flip-method pode ser utilizado para alterar a orientação da câmara e pode tomar vários valores de rotação.
74Mensagem pré-formatada disponível no website: http://docs.ros.org/melodic/api/sensor_m
sgs/html/msg/FluidPressure.html.
75Mensagem pré-formatada disponível no website: http://docs.ros.org/melodic/api/sensor_m
sgs/html/msg/Temperature.html.
76Mensagem pré-formatada disponível no website: http://docs.ros.org/api/geometry_msgs/ht
ml/msg/Vector3.html.
77Disponível no website: https://www.arducam.com/docs/camera-for-jetson-nano/mipi-camer
a-modules-for-jetson-nano/driver-installation/.
78O GStreamer é uma biblioteca de código aberto e multi-plataforma utilizada na construção
e manipulação de componentes de vídeo e imagens. As aplicações desta biblioteca passam por reprodução simples de Ogg/Vorbis, streaming de áudio/vídeo, processamento complexo de áudio e vídeo (edição não linear) (https://gstreamer.freedesktop.org/).
79Disponível no website: https://www.jetsonhacks.com/2019/04/02/jetson-nano-raspberry-pi-
A JetsonHacks80 disponibiliza alguns exemplos de código em Python e C++ para teste da câmara em aplicações externas.
Foi necessário criar um metapackage chamado camara_csi por forma a ser possível incluir dois pacotes na mesma pasta. Estes pacotes são o gscam e o jet- son_csi_cam.
Para integrar a câmara no ROS, foi necessário adaptar e utilizar um pacote ROS camera_driver81 chamado GSCam82, pacote que cria uma interface entre o GStreamer e o ROS. Para ser possível a utilização deste pacote foi necessário instalar algumas bibliotecas do GStreamer adicionais (guia de instalação no apêndiceA.6). O pacote gscam utiliza as bibliotecas de ROS image_pipeline83 projetada para preencher a lacuna entre as entradas de vídeo e imagem não processadas e o processamento de visão de alto nível. Por sua vez, esta biblioteca utiliza o OpenCV84 para aplicar os diversos algoritmos de visão computacional.
O pacote ROS chamado jetson_csi_cam foi desenvolvido para simplificar a integração da câmara CSI e das aplicações multimédia da Nvidia no pacote ROS gscam. É constituído por um ficheiro .launch, que configura corretamente o gscam para funcionar com o hardware da Jetson.
O ficheiro jetson_csi_cam.launch define o valor da variável GSCAM_- CONFIG para operar com o plugin nvarguscamerasrc que foi criado pela NVi- dia para a codificação de vídeo da conexão CSI. Para além disso cria os tópicos csi_cam_0/image_raw e csi_cam_0/camara_info. O primeiro publica a imagem bruta (matriz de pixeis) utilizando a mensagem ROS sensor_msgs/Images, o se- gundo publica a informação da câmara (nome da câmara, caminho e calibração) utilizando a mensagem ROS sensor_msgs/SetCameraInfo . Neste ficheiro também são inicializados os nós image_saver, que irá guardar as imagens, e video_recorder que gravará o vídeo.
80Disponível no repositório: https://github.com/JetsonHacksNano/CSI-Camera.
81Pacote ROS de drivers para as câmaras desenvolvidos pela comunidade (http://wiki.ros.org
/camera_drivers).
82Disponível no repositório: https://github.com/ros-drivers/gscam.
83Disponível no website: https://github.com/ros-perception/image_pipeline.
84O OpenCV é uma biblioteca de código aberto e multi-plataforma desenvolvida para aplicações
de visão computacional e aprendizagem de máquina. Foi originalmente desenvolvida em 2000 pela
Intel. O OpenCV possui módulos de processamento de imagem e Video I/O, estrutura de dados,
6.2. tobias_drivers
A calibração da câmara é efetuada com recurso ao pacote camera_calibration da biblioteca image_pipeline. Para ser possível testar a driver foi efetuada uma cali- bração inicial com recurso ao comando evidenciado no código fonteA.4do apêndice A.
Os nós image_saver e video_recorder pertencem ao pacote image_view85 da biblioteca ros-perception/image_pipeline. Foi criado um ficheiro de configuração para cada nó onde cada um tem parâmetros distintos:
• image_saver :
– filename_format: define o caminho e o nome do ficheiro onde serão guar-
dadas as imagens. A string ’% 04i’ serve para alterar o nome do ficheiro com o número da sequência e a string ’% s’ define o formato do ficheiro, que poderá ser definido para jpg, png ou pgm;
– encoding: define o espaço de cores da imagem;
– save_all_image: se for definido como falso as imagens só são guardas
quando o serviço save é chamado ( rosservice call /image_saver/save). Caso contrário as imagens são guardadas sempre que o tópico csi_cam_0/ image_raw sofre alterações.
• video_recorder :
– filename_format: define o caminho e o nome do vídeo;
– fps: define a framerate do vídeo, deverá de ser igual à framerate do
argumento fps do ficheiro jetson_csi_cam.launch;
– codec: define o codec de vídeo Four Character Code (FOURCC)86;
– encoding: define o espaço de cores da imagem.
Para visualizar o streaming da câmara pode ser utilizado o comando rqt_i- mage_view. Este comando abre uma janela de visualização de vídeo, onde pode ser selecionada a entrada de vídeo, por defeito é /csi_cam_0/image_raw.
85Informação sobre o pacote disponível no website: http://wiki.ros.org/image_view. 86Tipos de codecs disponíveis no website: http://www.fourcc.org/mjpg/.