Escreva um assinante simples (C++) [Comparação de ROS1 e ROS2]

Tópico de assinatura do ROS1

baixar demonstração:

título

baixar demonstração:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
wget -O publisher_member_function.cpp https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/listener/listener.cpp

Ligar de volta

  void chatterCallback(const std_msgs::String::ConstPtr& msg)
   {
     ROS_INFO("I heard: [%s]", msg->data.c_str());
   }

Esta é a função de retorno de chamada que será chamada quando o tópico chatterCallback publicar novos dados. [Semelhante à função de interrupção] As mensagens são passadas no Boost Shared_PTR.

assinatura de tópico

ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);

O ROS chamará a função chatterCallback() quando uma nova mensagem chegar. O segundo parâmetro é o tamanho da fila, o que significa que se forem recebidos mais de 1000 dados, as informações anteriores a 1000 dados serão descartadas.

ciclo

ros::spin();

ros::spin();
entra no loop, chamando o callback da mensagem o mais rápido possível. Não é preciso muito CPU, no entanto. ROS::Spin() sai assim que ros::ok() retorna FALSE, o que significa que ros::Shutdown() foi chamado pelo manipulador Ctrl-C padrão ou pelo programa principal. foi chamado manualmente.

etapa

  1. Inicializar o sistema ROS
  2. Inscrever-se no tópico de bate-papo
  3. Loop, aguardando dados do tópico
  4. Quando os dados do tópico forem recebidos, execute a função de callback chatterCallback()

Tópico de assinatura do ROS2

baixar demonstração:

título

baixar demonstração:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
wget -O subscriber_member_function.cpp https://raw.githubusercontent.com/ros2/examples/master/rclcpp/topics/minimal_subscriber/member_function.cpp

Ligar de volta

private:
  void topic_callback(const std_msgs::msg::String::SharedPtr msg) const
  {
    RCLCPP_INFO(this->get_logger(), "I heard: '%s'", msg->data.c_str());
  }
  rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;

A função topic_callback recebe os dados da mensagem de string publicados no tópico e simplesmente os grava no console usando a macro RCLCPP_INFO.

assinatura de tópico

public:
  MinimalSubscriber()
  : Node("minimal_subscriber")
  {
    subscription_ = this->create_subscription<std_msgs::msg::String>(
    "topic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
  }

O ROS chamará a função chatterCallback() quando uma nova mensagem chegar. O segundo parâmetro é o tamanho da fila, o que significa que se forem recebidos mais de 1000 dados, as informações anteriores a 1000 dados serão descartadas.

Acho que você gosta

Origin blog.csdn.net/Feizhai2/article/details/114091447
Recomendado
Clasificación