Um programa exemplo

O restante desse capítulo trata de como gerar e visualizar mensagens log. Como sempre, será útil ter um programa exemplo concreto para ilustrar o que está acontecendo. Seria possível usar turtlesim para essa tarefa dentro das condições adequadas, turtlesim_node vai produzir mensagens log em todos os níveis, menos no FATAL - mas para título de aprendizagem será mais conveniente trabalhar com um programa que produza muitas mensagens log em intervalos previsíveis.

A Lista 4.1 mostra um programa que se encaixa nessa descrição. Ele gera um fluxo consistente de mensagens em todos os cinco níveis.

Lista 4.1

Um programa denominado count.cpp que gera mensagens de log em todos os cinco níveis de severidade.
  // Esse programa gera mensagens de log em variados
  // níveis de severidade periodicamente.
  #include <ros/ros.h>
 
  int main (int argc, char ∗∗argv) {
    // Inicializa o sistema ROS e se torna um nó. 
    ros::init(argc, argv, "count_and_log");
    ros::NodeHandle nh;
 
    // Gerar mensagens log de severidades variáveis regularmente.
    ros::Rate rate(10);
    for(int i = 1;ros::ok();i++) {
      ROS_DEBUG_STREAM("Counted␣to␣" << i);
      if((i % 3) == 0) {
        ROS_INFO_STREAM(i << "␣is␣divisible␣by␣3.");
      }
      if((i % 5) == 0) {
        ROS_WARN_STREAM(i << "␣is␣divisible␣by␣5.");
      }
      if((i % 10) == 0) {
        ROS_ERROR_STREAM(i << "␣is␣divisible␣by␣10.");
      }
      if((i % 20) == 0) {
        ROS_FATAL_STREAM(i << "␣is␣divisible␣by␣20.");
      }
      rate.sleep();
   }
 }

Um exemplo da saída no console aparece na Lista 4.2. Nos o usaremos como exemplo executável ao longo do resto desse capítulo.

Lista 4.2

Exemplo de saída na execução de contagem por alguns segundos. Essa saída não contém nenhuma mensagem nível DEBUG, porque o nível mínimo padrão é INFO.
[ INFO] [1375889196.165921375]: 3 is divisible by 3.
[ WARN] [1375889196.365852904]: 5 is divisible by 5.
[ INFO] [1375889196.465844839]: 6 is divisible by 3.
[ INFO] [1375889196.765849224]: 9 is divisible by 3.
[ WARN] [1375889196.865985094]: 10 is divisible by 5.
[ERROR] [1375889196.866608041]: 10 is divisible by 10.
[ INFO] [1375889197.065870949]: 12 is divisible by 3.
[ INFO] [1375889197.365847834]: 15 is divisible by 3.