1.在一个话题上发布消息。
可以使用ros::Publisher类创建一个句柄来在一个话题上发布消息,应该首先创建一个publisher将要使用的消息,然后在setup函数中调用advertise。整个程序的结构如下:
- #include <ros.h>
- ros::NodeHandle nh;
- // before your setup() function
- std_msgs::String str_msg;
- ros::Publisher pub("foo", &str_msg);
- void setup(){
- ...
- nh.advertise(pub);
- ...
- }
然后就可以发布一个消息了:
- void loop()
- {
- pub.publish( &str_msg );
- nh.spinOnce();
- }
2.订阅一个话题
订阅一个话题的第一步是包括头文件,并且创建一个回调函数。所有的rosserial消息存在于ros_lib文件夹下的package_name/msg_name。例如包括消息std_mgs/Float64时使用#include <std_msgs/Float64.h>。
回调函数必须满足函数返回值为空且使用一个常引用作为函数的参数。
- #include <std_msgs/Float64.h>
- void messageCb(const std_msgs::Float64& msg)
- if(msg.data > 1.0)
- digitalWrite(13, HIGH-digitalRead(13)); // blink the led
- }
为了建立实际的连接,我们必须静态的分配一个 ros::Subscriber 对象,它规定了你所使用的消息类型,并且在setup函数中调用 NodeHandle::subscribe 函数。
- #include <ros.h>
- ros::NodeHandle nh;
- void messageCb(const std_msgs::Float64& msg)
- if(msg.data > 1.0)
- digitalWrite(13, HIGH-digitalRead(13)); // blink the led
- }
- ros::Subscriber<std_msgs::Float64> sub("your_topic", &messageCb);
- void setup()
- {
- ...
- nh.subscribe(sub);
- ...
- }