rossserial概述官网链接
可以使用ros :: 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); ... }然后,可以调用publish来发布消息:
void loop() { pub.publish( &str_msg ); nh.spinOnce(); }订阅话题的第一步是引用头文件和创建回调函数。
所有rosserial消息的头文件都将位于ros_lib文件夹中的package_name/msg_name下。
例如,应该通过#include <std_msgs/Float64.h>引用std_mgs/Float64。
要定义回调,需要创建一个返回为void的函数,并将消息类型的常量引用作为其参数。
#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); ... }在此程序的生命周期内,订阅者永远不会超出范围,这一点非常重要。如果超出范围,则在收到下一条消息时,程序将崩溃。 rosserial依赖于如订阅者一样的全局对象来绕过目标系统的有限内存。
