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:
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>