ROS usb_cam

Pacote usb_cam é um pacote que permite adquirir imagens de uma camara usb, e que as publica como mensagens num topico do ROS.

Se quisermos visualizar as imagens optidas podemos usar seguinte pacote image view, que se pode instalar facilmente com o seguinte comando:

sudo apt install ros-melodic-image-view

Mais informações sobre este pacote no seguinte link:

O node  usb_cam pode ser instalado com o seguinte comando:

sudo apt install ros-melodic-usb-cam

Depois de instalado o pacote o node de visualização de imagens  pode ser executado com o seguinte comando:

roslaunch usb_cam usb_cam-test.launch

Quando é executado também lança um node do image-view que permite visualizar as imagens da camera.

No arranque, o node usb_cam, exibe um aviso sobre a ausência do ficheiro de calibração da câmera:

[ WARN] [1571971554.612255459]: Camera calibration file /home/ubuntu/.ros/camera_info/head_camera.yaml not found.

Apesar do aviso o node image-view permitir a visualização do video, quando se tenta ver o video no rviz (após publicar a transformação para a pose da câmara e adicionar a visualização “câmara” e escolher o respectivo tópico), o video não aparece e é exibida a seguinte mensagem de erro.

Camera Info
CameraInfo/P resulted in an invalid position calculation (nans or infs)

Esta situação deve-se á inexistencia do ficheiro de calibração para a camera, conforme reportado pelo aviso.

Para além da calibração também é necessário publicar a transformação para a camera. Por exemplo com o static_transform_publisher.

O launch file usado para lançar os vários nodes, incluindo o tf para a usb_cam, está incluido como apendice.

Podemos criar os launch files adequados ao nosso projecto nos respectivos pacotes.

Para proceder a calibração da camera consultar o seguinte link:

ROS camera_calibration

Resolução das cameras de video no ROS

Como o volume de dados que envolve o processamendo da visão artificial é grande, em sistemas com poucos recursos ou com baixo debito de transmissão é conviniente diminuir o tamanho das imagens que são processadas e transmitidas, pela redução do tamanho das imagens capturadas pela camera.

Ficheiro de lançamento do ROS – usbcam.launch

<launch>

<arg name="view" default="false" />
<arg name="tf" default="true" />

<node if="$(arg tf)" pkg="tf" type="static_transform_publisher" name="usb_cam_tf" args="10.0 0 0.10 0 0 0 /base_link /usb_cam 10" />

<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video0" />
<param name="image_width" value="320" />
<param name="image_height" value="240" />
<param name="pixel_format" value="yuyv" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
</node>

<node if="$(arg view)" name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
<remap from="image" to="/usb_cam/image_raw"/>
<param name="autosize" value="true" />
</node>

</launch>