Ros使用Arduino 3用rosserial创建一个subscriber

在前面的一节中,我们已经使用arduino创建了一个publisher节点,接下来将会用arduino来创建一个subscriber,接收电脑传去的信息并做出相应的反应。

1启动Arduino

将arduino开发板连接到电脑的usb口,在arduino IDE中进行设置。

选择Tools->Board,选择你所使用的arduino开发板的类型,所使用的arduino开发板是arduino pro min。

设置好开发板之后,继续选择Tools->Serial Port->/dev/ttyUSB0。

2编译程序

选择File->Examples->ros_lib->Blink,就可以打开一个示例程序,代码如下:

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

#include <ros.h>
#include <std_msgs/Empty.h>
//创建了一个节点句柄,这允许我们的程序能够创建发布者和订阅者,节点句柄同样和串口通信有关系。
ros::NodeHandle  nh;
// 创建回调函数,必须使用一个消息的常引用作为一个参数。// 消息类型是 std_msgs::Empty 消息的名字是toggle_msg// 回调函数中,我们可以引用 toggle_msg,因为他是空的,所以就没必要了。接受到一次,让LED闪烁一次。
void messageCb( const std_msgs::Empty& toggle_msg){
  digitalWrite(13, HIGH-digitalRead(13));   // blink the led
}
//创建一个订阅者subscriber , 订阅消息 toggle_led,消息类型是 std_msgs::Empty,回调函数是messageCb()
ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb );

//初始化ros的节点句柄,告知所有将要订阅的话题,订阅你想收听的任何话题。
void setup()
{
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.subscribe(sub);
}
//调用了ros::spinOnce(),在这个函数中,所有ROS通信的回调函数都被处理。//在loop函数中,我们不需要去做任何其它的处理。因为这个函数ros::spinOnce()将会传递消息给subscriber的回调函数。

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

烧录程序

在arduino IDE中点击upload按钮,运行程序。

运行ROS

新建窗口

roscore

接着运行rosserial客户端应用,它把你的arduino消息转发到ROS系统的其它部分:

rosrun rosserial_python serial_node.py /dev/ttyUSB0

最后你可以输入一下命令来查看你的arduino板子上的LED灯的变化情况:

rostopic pub toggle_led std_msgs/Empty --once

上述命令运行一次后LED灯亮了,再运行一下次又灭了,如此反复的运行,会发生相应的变化。

 

时间: 2024-12-26 17:30:50

Ros使用Arduino 3用rosserial创建一个subscriber的相关文章

Ros使用Arduino 2 使用rosserial创建一个publisher

1 启动arduino 将arduino开发板连接到电脑的usb口,在arduino IDE中进行设置. 选择Tools->Board,选择你所使用的arduino开发板的类型,所使用的arduino开发板是arduino pro min. 设置好开发板之后,继续选择Tools->Serial Port->/dev/ttyUSB1. 2 打开ROS例程 设置完成以后,在arduino IDE中,选择File->Examples->ros_lib->HelloWorld,

创建一个ROS工作空间(ROS Workspace)

详细参照 http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment1.mkdir -p ~/catkin_ws/src解析:在 /home/你的用户名目录/ 下创建一个ROS工作空间,即文件夹catkin_ws,然后在工作空间 catkin_ws 下创建一个文件夹 src你也可以将工作空间 catkin_ws 起成其他名字,例如:mkdir -p ~/tutorial/src ,那么下面的所有命令中的catk

创建一个ROS包

先前笔者不知道catkin到底是个什么东东,后来终于在官方网站上找到了答案,原来catkin是ROS的一个官方的编译构建系统,是原本的ROS的编译构建系统rosbuild的后继者.catkin的来源有点复杂,我们可以慢慢的讲一下其中的渊源.ROS来源于Willow Garage这个公司,他们希望借助开源的力量,使ROS发扬光大.而在英语中,willow的意思是柳树,catkin是柳絮的意思,为了纪念的作用吧,因而为这个软件命名为catkin.      这篇博客的主要内容是介绍如何使用catki

ROS学习随笔二(创建一个简单的ROS package)

本人在学习过程中,参见了如下几个博客及网站: ROS操作官网:http://wiki.ros.org/ROS/Tutorials 博客:http://blog.sina.com.cn/s/articlelist_1712413141_7_1.html 以及:http://blog.csdn.net/column/details/ros-explore.html 在创建package之前,需要先创建一个工作空间,本人安装的ROS版本是Fuerte. 1.Creating a ROS WorkSpa

ROS的初步学习--创建一个工作空间和一个程序包

快速开始 创建工作区(workspace) 工作区可以作为一个独立的项目进行编译,存放ROS程序的源文件.编译文件和执行文件.建立工作区的方法如下: mkdir -p ~/catkin_ws/src #创建文件夹 cd ~/catkin_ws/src #定位到src catkin_init_workspace #对工作空间进行初始化 虽然这时候工作区是空的,但是我们依然可以进行编译: cd ~/catkin_ws/ catkin_make 这时候,会在当前文件夹下生成devel,build这两个

ROS学习(三)——创建一个简单的发布节点和订阅节点

暑假在家有些懈怠,不,非常懈怠- -||!良心已经发痛了,想快些补回原来的进度,但忽然发现,中断了一段时间再重新去学习,有的地方连最基本的符号都忘记了 ,这次特意弄个最最基础的,恢复一下,以前的进度. 1.建立一个工作空间 $ mkdir -p ~/catkin_xi/src $ cd ~/catkin_xi/src 在home文件夹里面发现新建好了相应的文件夹,当然里面,空空的,什么都没有. 接着,使用catkin_make命令在catkin 工作空间中新建文件夹,当前目录应该能看到'buil

Ros使用Arduino 1安装Arduino IDE

安装Arsuino IDE sudo apt-get install arduino 设置库文件路径 在使用ROS的库文件时,必须在代码的开头包括: #include <ros.h> 接下来安装rosserial sudo apt-get install ros-indigo-rosserial-arduino sudo apt-get install ros-indigo-rosserial 安装ros_lib 打开你的sketchbook目录,在下面新建一个libraries目录,一般sh

用WidgeDuino创建一个SCADA(监控与数据采集)系统

WidgeDuino – 最近在Kickstarter上亮相 – 是一个智能的易配置的窗口- 基于Microsoft Windows平台和基于像 Atmel-based Arduino board 的微控制器系统通讯应用. 实质上, WidgeDuino 通过串口协议或者 TCP/IP 与微控制器系统通讯. "这包括, 除其他外, 键盘, LED灯, 压力表, 旋钮, 滑块, 温度计, 容器及按钮. 其直观方法是,通讯简化了快速原型和完整的自动化系统发展." 更准确的说, Widged

创建一个工作空间

在官网上本节的题目是Creating a workspace for catkin. 其中的catkin不知道是什么意思,在网上找到的结果是:(1)卡婷是一个广告公司,(2)柳絮. 这两种翻译显然都不太合适,不过不知道也没关系,影响不大.知道catkin是一个ROS中的工具就行了. 本节的主要目的是创建一个catkin工作空间,在这个工作空间中,catkin的包可以被编译.如果还没有安装catkin的话,请首先安装catkin.不过如果按照前面的步骤的话,catkin已经安装了. 首先需要修改环