ROS Learning-017 Arduino-For-ROS-002 第一个程序: Hello World
Arduino For ROS-002 — 第一个程序: Hello World
我的Ubuntu系统:Ubuntu 14.04.10 TLS 32位
Arduino的版本:Arduino 1.6.11 Linux 32位
Arduino 板子的型号:Arduino UNO R3
使用 的ROS版本:ROS Indigo
如果你还没有搭建ROS与Arduino之间的连接关系的话, 请参考 这篇博客:搭建 ROS 和 Arduino 相连接的开发环境 ,进行搭建。
一. 启动 Arduino IDE 软件
打开一个终端,执行下面的命令其中 Arduino IDE 软件
arduino
二. 打开 HelloWorld 示例程序
打开 HelloWorld 的示例程序。File -> Examples -> ros_lib -> HelloWorld
/*
* rosserial Publisher Example
* Prints "hello world!"
*/
#include <ros.h>
#include <std_msgs/String.h>
ros::NodeHandle nh;
std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);
char hello[13] = "hello world!";
void setup()
{
nh.initNode();
nh.advertise(chatter);
}
void loop()
{
str_msg.data = hello;
chatter.publish( &str_msg );
nh.spinOnce();
delay(1000);
}
三. 将程序烧写到 Arduino 板子上。
如果你不知道如何将 程序烧写到 Arduino 板子上,请参考这篇博客:Ubuntu/Linux 系统下,如何给Arduino板子烧写程序
四. 运行:
分别开3个终端,执行下面的程序:
1 . 启动 ros 主程序节点:
roscore
2 . 启动 ros 串口监视节点:
rosrun rosserial_python serial_node.py /dev/ttyACM0 # 这个 /dev/ttyACM0 端口根据你的事情情况进行修改
# rosrun rosserial_python serial_node.py [端口名]
3 . 监听 /chatter 话题:
rostopic echo /chatter
如果你看到下面的输出,说明:ROS 端成功的订阅了 Arduino 端发布的 名为 /chatter 的话题。
五. 代码讲解:
1 . 下面的头文件必须要有:
#include <ros.h>
2 . 并定义一个 ROS Node Handle
ros::NodeHandle nh;
3 . 在 1. 添加必要头文件后,同时添加你需要发布( 或订阅 ) 的话题中消息类型 头文件:
#include <std_msgs/String.h>
4 . 同时定义相关 消息变量 :
std_msgs::String str_msg;
5 . 定义 发布器 :
ros::Publisher chatter("chatter", &str_msg); //定义一个名为:"chatter" 的发布器,里面存放了一个 std_msgs::String 类型的消息变量。
6 . 在 setup() 函数中初始化 ROS Node Handle,并给它添加你定义的发布器:
void setup()
{
nh.initNode();
nh.advertise(chatter); //添加上面定义的发布器
}
7 . 在 loop() 函数中, 更新数据:
char hello[13] = "hello world!";
void loop()
{
str_msg.data = hello;
chatter.publish( &str_msg ); //发布消息
nh.spinOnce(); //必须写的函数,功能:更新缓存
delay(1000); //延伸1秒钟
}
搞定
总结:
编写 Arduino 使用 ROS 库的编写的程序是可以总结出一个程序模板的,我们可以按照这个模板来编写其他 Arduino 使用 ROS 库 的程序。
所以,下一讲,我们来提前前总结一下:Arduino 使用 ROS 库 编写的程序的程序模板。简单的说就是:如何写Arduino For ROS的程序。
之后,再后面的博客中,我会以控制一些常用的电子模块为例,再介绍更多的Arduino For ROS 的程序。让 ROS 机器人操作系统变得更加实战性,更加被我们所凌驾。
ROS Learning-017 Arduino-For-ROS-002 第一个程序: Hello World的更多相关文章
- ROS Learning-016 Arduino-For-ROS-001 搭建 Arduino 和 ROS 之间相连接的开发环境
Arduino For ROS-001 - 搭建 ROS 和 Arduino 相连接的开发环境 我的Ubuntu系统:Ubuntu 14.04.10 TLS 32位 Arduino的版本:Arduin ...
- SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- 【转载】如何编写ROS的第一个程序hello_world
目录 1.工作空间的创建 2.功能包的创建 3.功能包的源代码编写 4.功能包的编译配置 5.功能包的编译 6.功能包的启动运行 既然ROS已经成功安装好了,大家一定很想亲自动动手编一个通过起手式例程 ...
- ROS学习笔记一:ROS安装与测试
1 Ubuntu和ROS版本的对应关系 Ubuntu 和 ROS 都存在不同的版本,其对应关系如下: 注:如果Ubuntu版本和ROS版本不对应的话,安装就不会成功了- 笔者安装的是Ubuntu14. ...
- (二)ROS系统架构及概念 ROS Architecture and Concepts 以Kinetic为主更新 附课件PPT
第2章 ROS系统架构及概念 ROS Architecture and Concepts PPT说明: 正文用白色,命令或代码用黄色,右下角为对应中文译著页码. 这一章需要掌握ROS文件系统,运行图级 ...
- ROS学习手记 - 8 编写ROS的Publisher and Subscriber
上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...
- ROS学习手记 - 7 创建ROS msg & srv
至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理. 本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ff ...
- ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters
上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameters 我不理解为何 ROS wiki 要把service与parameter放在一起介绍, 很想分 ...
- ROS学习笔记一(ROS的catkin工作空间)
在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...
随机推荐
- vue 全选与取消全选
所用知识点 1 v-model:监听input内容 2 watch:监听属性方法 参考https://cn.vuejs.org/v2/api/#watch 3 页面初始化调用函数 mounted 一: ...
- Eclipse中Maven的本地仓库引导配置
简单整理一下,方便理解操作. 1.本地拷贝maven文件后,打开maven中的.setting 文件: 2.配置文件: <?xml version="1.0" encodin ...
- JavaUtil_10_joda-time_用法入门
二.参考资料 1. Joda-Time 2.jodaTime 的使用说明 3.强大易用的日期和时间库 Joda Time
- kylin_学习_02_kylin使用教程
一. 二.参考资料 1.kylin从入门到实战:实际案例
- JDBC操作简单实用了IOUtils
package cn.itcast.demo4; import java.io.FileInputStream; import java.io.FileOutputStream; import jav ...
- winform中DataGridView使用DataGridViewCheckBoxColumn实现RadioBox单选功能
private void dgvMaterial_CellContentClick(object sender, DataGridViewCellEventArgs e) { ; i < dgv ...
- "Cannot declare member function ...to have static linkage"错误
英文解释: if you declare a method to be static in your .cc file. The reason is that static means somethi ...
- 排列(加了点小set就过了,哈哈哈)
Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. 输入描述: 1 2 3 4 1 1 2 3 0 1 2 3 0 0 0 0输出 ...
- 8、Selenium+python安装HTMLTestRunner插件
1.打开网址:http://tungwaiyip.info/software/HTMLTestRunner.html,下载HTMLTestRunner.py 2.copy其HTMLTestRunner ...
- bae3.0第四步 第一个polls系统
1.创建自己的app 进入新建的blog工程目录,执行其下面的manage.py来创建polls应用,命令为: python manage.py startapp polls2.定义app的model ...