Getting Started with ROS on Embedded Systems - User Guide - C++ - Names
< Getting Started with ROS on Embedded Systems
Revision as of 12:40, 10 November 2021 by Rgutierrez (talk | contribs)
Getting Started with ROS on Embedded Systems RidgeRun documentation is currently under development. |
Getting Started with ROS on Embedded Systems | |
---|---|
![]() | |
ROS on Embedded Systems Basics | |
|
|
Getting Started | |
|
|
C++ User Guide | |
|
|
Examples | |
|
|
Performance | |
|
|
Contact Us |
Introduction
This wiki is based on the following page: http://wiki.ros.org/roscpp/Overview/Publishers%20and%20Subscribers
Publishers and subscribers are one of the main ways of communication when using ROS.
Publishers
In order to publish messages, you will need a node handle, and create a ros::Publisher using the advertise function. Like the following example:
ros::Publisher pub = nh.advertise<std_msgs::String>("topic_name", 5);
std_msgs::String str;
str.data = "hello world";
pub.publish(str);
This uses the function
template<class M>
ros::Publisher advertise(const std::string& topic, uint32_t queue_size, bool latch = false);
In which:
- M is the message type to publish on the topic
- topic is the name of the topic to publish to
- queue_size is the size of the message queue, if the publishing is faster than the message sending, it will start dropping older messages.
- latch: Save messages for future subscriber connections automatically.
Subscribers
Similar to publishers, a ROS subscriber needs a node handle and with the subscribe function it will create a new ros::Subscriber, by using the following:
template<class M>
ros::Subscriber subscribe(const std::string& topic, uint32_t queue_size, <callback, which may involve multiple arguments>, const ros::TransportHints& transport_hints = ros::TransportHints());
In which:
- M is the message type to publish on the topic, normally deduced by the compiler
- topic is the name of the topic to subscribe to
- queue_size is the size of the message queue, if messages are too fast arriving and the application can't keep up, they will start dropping.
- callback: Normally a pointer to a function with the function to execute on each message arrival
- transport_hints: Hints to roscpp's transport layer. Such ad preferring UDP, tcp nodelay.
Callbacks
The first callback you can use is with a function, for example:
void callback(const std_msgs::StringConstPtr& str)
{
...
}
...
ros::Subscriber sub = nh.subscribe("my_topic", 1, callback);
The other callback is used with class methods, for example:
void Foo::callback(const std_msgs::StringConstPtr& message)
{
}
...
Foo foo_object;
ros::Subscriber sub = nh.subscribe("my_topic", 1, &Foo::callback, &foo_object);