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的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...
随机推荐
- 三张图较为好理解JavaScript的原型对象与原型链
最近从网上看到别人详细得讲解了js的原型对象和原型链,看完感觉是看得最清晰的一个,于是,摘录到自己博客里 对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与_ ...
- c++primer 第l六章编程练习答案
6.11.1 #include<iostream> #include<cctype> int main() { using namespace std; char ch; ci ...
- JVM_总结_03_Java发展史
一.前言 通过上一节,我们对整个java的技术体系有了一定的了解. 这一节我们来看下Java的发展史. 二.Java发展史 1.时间线 序号 发布日期 JDK 版本 新特性 详细说明 0 1991.0 ...
- hive 遇到的问题及解决方法
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category RE ...
- 总结的一些MySQL数据库面试题
1.sql语句应该考虑哪些安全性? 1.防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语句绑定变量. 2.最小权限原则,特别是不要用root账户,为不同的类型的动作或者组建使用不同的账 ...
- CodeForces - 13D :Triangles(向量法:问多少个蓝点三角形内部无红点)
Little Petya likes to draw. He drew N red and M blue points on the plane in such a way that no three ...
- Http之ContentType
引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...
- bzoj 2982 combination——lucas模板
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2982 明明是lucas定理裸题…… 非常需要注意C( )里 if ( n<m ) r ...
- SpringCloud微服务实战——第三章服务治理
Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...
- 一段shallowCopy和deepCopy的认识
:什么是浅拷贝(shallow copy)和深拷贝(deep copy)? A: 浅拷贝就是成员数据之间的一一赋值:把值一一赋给要拷贝的值.但是可能会有这样的情况:对象还包含资源,这里的资源可以值堆资 ...