rosserial_arduino 中文教程 3:Blink闪烁-创建订阅器

Blink闪烁:创建订阅器

rosserial_arduino 中文教程 专栏

代码

现在我们在上一个教程中创建了一个ROS发布者,我们将创建一个订阅者。 如果你已经按照Arduino IDE安装教程 ,你可以通过从Arduino示例菜单中选择ros_lib - > Blink来打开下面的草图。

这应该在IDE中打开以下代码:

 

/*
 * rosserial Subscriber Example
 * Blinks an LED on callback
 */

#include <ros.h>
#include <std_msgs/Empty.h>

ros::NodeHandle nh;

void messageCb( const std_msgs::Empty& toggle_msg){
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}

ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );

void setup()
{
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.subscribe(sub);
}

void loop()
{
  nh.spinOnce();
  delay(1);
}

 

代码解释

现在,让我们破解代码吧。

 6   #include <ros.h> 
 7   #include <std_msgs/Empty.h> 
 8 

和以前一样,我们需要将ros.h包含在任何其他ROS Arduino程序中。 我们还包括消息的头文件,在本例中为Empty消息。

 

ros::NodeHandle nh ;

接下来,我们需要实例化节点句柄,这允许我们的程序创建发布者和订阅者。 节点句柄还负责串行端口通信。

 

void messageCb( const std_msgs::Empty& toggle_msg){
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}

然后,我们为订户创建回调函数。 回调函数必须将消息的常量引用作为其参数。 在我们的回调messageCb中 ,消息的类型是std_msgs :: Empty ,消息名称是toggle_msg 。

在我们的回调中,我们可以引用toggle_msg ,但由于它是空的,所以并非必要。 我们每次收到消息时都会闪烁Arduino上的LED。

 

ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );

我们需要实例化我们将要使用的发布者和订阅者。 这里我们实例化一个主题名为“toggle_led”的订阅者,并输入std_msgs :: Empty 。 对于订阅者,您必须记住在消息上模拟订阅者。 它的两个参数是它将要订阅的主题以及它将使用的回调函数。

 

void setup()
{
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.subscribe(sub);
}

在Arduino设置功能中,您需要初始化ROS节点句柄,宣传正在发布的任何主题,并订阅您想要收听的任何主题。

void loop()
{
  nh.spinOnce();
  delay(1);
}

最后,在循环函数中,我们调用ros :: spinOnce(),其中处理所有ROS通信回调。 我们不需要在loop()中进行任何额外的处理,因为ros :: spinOnce()将处理将消息传递给订阅者回调。

 

上传代码

要将代码上传到Arduino,请使用Arduino IDE中的上传功能。 这与上传任何其他草图没有什么不同。

 

运行代码

现在,在新的终端窗口中启动roscore :

 

  roscore 

接下来,运行rosserial客户端应用程序,将Arduino消息转发给ROS的其余部分。 确保使用正确的串口:

  rosrun rosserial_python serial_node.py / dev / ttyUSB0 

最后,您可以使用rostopic切换LED:

  rostopic pub toggle_led std_msgs / Empty --once 

 

进一步阅读

有关发布者和订阅者的详细信息,请参阅rosserial / Overview 。 另请参阅有关更复杂数据类型的信息的限制 。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值