ROS-rosserial概述(3)

Publishers and Subscribers

rossserial概述官网链接

1. 发布到话题

可以使用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();
}

2. 订阅话题

订阅话题的第一步是引用头文件创建回调函数

  • 所有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依赖于如订阅者一样的全局对象来绕过目标系统的有限内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值