Напишите простой подписчик (C++) [Сравнение ROS1 и ROS2]

Тема подписки ROS1

демо скачать:

заголовок

демо скачать:

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

Перезвонить

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

Это функция обратного вызова, которая будет вызываться, когда тема chatterCallback публикует новые данные. [Аналогично функции прерывания] Сообщения передаются в Boost Shared_PTR.

подписка на тему

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

ROS вызовет функцию chatterCallback() при поступлении нового сообщения. Второй параметр — это размер очереди, что означает, что если получено более 1000 фрагментов данных, информация до 1000 фрагментов данных будет отброшена.

цикл

ros::spin();

ros::spin();
входит в цикл, вызывая обратный вызов сообщения как можно быстрее. Однако это не требует много процессорного времени. ROS::Spin() завершает работу, когда ros::ok() возвращает FALSE, что означает, что ros::Shutdown() была вызвана либо обработчиком Ctrl-C по умолчанию, либо основной программой. Сообщите нам, что она закрыта, или вызывался вручную.

шаг

  1. Инициализировать систему ROS
  2. Подпишитесь на тему чата
  3. Цикл, ожидание данных темы
  4. Когда данные темы получены, выполните функцию обратного вызова chatterCallback()

Тема подписки ROS2

демо скачать:

заголовок

демо скачать:

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

Перезвонить

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_;

Функция topic_callback получает данные строкового сообщения, опубликованного в теме, и просто записывает их в консоль с помощью макроса RCLCPP_INFO.

подписка на тему

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

ROS вызовет функцию chatterCallback() при поступлении нового сообщения. Второй параметр — это размер очереди, что означает, что если получено более 1000 фрагментов данных, информация до 1000 фрагментов данных будет отброшена.

Guess you like

Origin blog.csdn.net/Feizhai2/article/details/114091447