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
- Inicializar o sistema ROS
- Inscrever-se no tópico de bate-papo
- Loop, aguardando dados do tópico
- 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.