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


如果你还没有搭建ROSArduino之间的连接关系的话, 请参考 这篇博客:搭建 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的更多相关文章

  1. ROS Learning-016 Arduino-For-ROS-001 搭建 Arduino 和 ROS 之间相连接的开发环境

    Arduino For ROS-001 - 搭建 ROS 和 Arduino 相连接的开发环境 我的Ubuntu系统:Ubuntu 14.04.10 TLS 32位 Arduino的版本:Arduin ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. 【转载】如何编写ROS的第一个程序hello_world

    目录 1.工作空间的创建 2.功能包的创建 3.功能包的源代码编写 4.功能包的编译配置 5.功能包的编译 6.功能包的启动运行 既然ROS已经成功安装好了,大家一定很想亲自动动手编一个通过起手式例程 ...

  4. ROS学习笔记一:ROS安装与测试

    1 Ubuntu和ROS版本的对应关系 Ubuntu 和 ROS 都存在不同的版本,其对应关系如下: 注:如果Ubuntu版本和ROS版本不对应的话,安装就不会成功了- 笔者安装的是Ubuntu14. ...

  5. (二)ROS系统架构及概念 ROS Architecture and Concepts 以Kinetic为主更新 附课件PPT

    第2章 ROS系统架构及概念 ROS Architecture and Concepts PPT说明: 正文用白色,命令或代码用黄色,右下角为对应中文译著页码. 这一章需要掌握ROS文件系统,运行图级 ...

  6. ROS学习手记 - 8 编写ROS的Publisher and Subscriber

    上一节我们完成了 message & srv 文件的创建和加入编译,这次我们要玩简单的Publisher 和 Subscriber 要玩 Publisher 和 Subscriber, 需要具 ...

  7. ROS学习手记 - 7 创建ROS msg & srv

    至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理. 本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ff ...

  8. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameters 我不理解为何 ROS wiki 要把service与parameter放在一起介绍, 很想分 ...

  9. ROS学习笔记一(ROS的catkin工作空间)

    在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...

随机推荐

  1. LeetCode OJ:Sum Root to Leaf Numbers(根到叶节点数字之和)

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...

  2. LeetCode OJ:Subsets II(子集II)

    Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...

  3. 微信浏览器HTTP_USER_AGENT判断

    微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 微信浏览器 HTTP_USER_AGENT作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archiv ...

  4. N!的阶乘附带简单大整数类的输入输出(暂时没有深入的了解)

    Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! 我的思路:就想着大整数类去了,才发现自己还不能很好的掌握,其实这是一个大 ...

  5. java 连接oracle数据库

    package shujuku; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...

  6. git统计当前分支提交次数

    切换到您要统计的分支,然后Git Bash here,执行如下代码即可 : git log --author="您的用户名" --since='开始日期' --oneline | ...

  7. 学习动态性能表(10)--v$session_longops

    学习动态性能表 第十篇--V$SESSION_LONGOPS  2007.6.7 本视图显示运行超过6秒的操作的状态.包括备份,恢复,统计信息收集,查询等等. 要监控查询执行进展状况,你必须使用cos ...

  8. DIV横向排列_CSS如何让多个div盒子并排同行显示

    如何让多个div盒子并排同行div横向排列显示呢? 我们先设置3个div盒子对象,什么css样式都不设置看看效果.代码如下: 三个div盒子均独占一行显示 div盒子本身默认样式属性是独占一行,而解决 ...

  9. bzoj 3328 PYXFIB —— 单位根反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3328 单位根反演,主要用到了 \( [k|n] = \frac{1}{k} \sum\lim ...

  10. 第六篇 VIM你值得拥有!

    vim 是一个具有很多命令的功能非常强大的编辑器.限于篇幅,在本教程当中      就不详细介绍了.本教程的设计目标是讲述一些必要的基本命令,而掌握好这      些命令,您就能够很容易将vim当作一 ...