Тема подписки 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 по умолчанию, либо основной программой. Сообщите нам, что она закрыта, или вызывался вручную.
шаг
- Инициализировать систему ROS
- Подпишитесь на тему чата
- Цикл, ожидание данных темы
- Когда данные темы получены, выполните функцию обратного вызова 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 фрагментов данных будет отброшена.