操作演示,对 topic 通信方式的理解请看:点击打开链接

开启终端,运行 roscore

新开一个终端(已经安装好(ros-<distro>-ros-tutorials 包,否则运行  sudo apt-get install ros-<distro>-ros-tutorials ,<distro> 为 ROS 发行版本名称),运行 rosrun turtlesim turtlesim_node

运行 turtle_teleop_key 节点

rosrun turtlesim turtle_teleop_key

用键盘控制小乌龟运动。

1.使用rqt_graph

安装

sudo apt-get install ros-kinetic-rqt
sudo apt-get install ros-kinetic-rqt-common-plugins

运行

rosrun rqt_graph rqt_graph

结果:

如果将鼠标放在/turtle1/command_velocity上方,相应的ROS节点(蓝色和绿色)和话题(红色)就会高亮显示。正如你所看到的,turtlesim_node和turtle_teleop_key节点正通过一个名为/turtle1/command_velocity的话题来互相通信。

2.rostopic介绍

2.1 使用 rostopic echo

命令格式:

rostopic echo [topic]

查看 turtle_teleop_key 节点在 /turtle1/command_velocity 话题(非hydro版)上发布的数据

rostopic echo /turtle1/cmd_vel

在 turtle_teleop_key 节点终端下,每按一下方向键都会输出这样的信息,再次运行

rosrun rqt_graph rqt_graph

可以看到 turtlesim_node 和 turtle_teleop_key 节点正通过一个名为 /turtle1/command_velocity 的话题来互相通信。

2.2 使用 rostopic list

rostopic list能够列出所有当前订阅和发布的话题。

新开一个终端,

rostopic list

运行结果:

运行

rostopic list -v

列出详细信息:

3.ros Messages

3.1使用rostopic type

rostopic type 命令用来查看所发布话题的消息类型

命令格式:

rostopic type [topic]

运行

rostopic type /turtle1/cmd_vel

结果:

运行

rosmsg show geometry_msgs/Twist

查看此消息类型:

已经知道了消息类型,接下来我们就可以给 turtle 发布命令了。

4.继续学习 rostopic

4.1 使用 rostopic pub

命令格式:

rostopic pub [topic] [msg-type] [args]

新运行一个 turtlesim_node 节点,运行:

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

结果:

rostopic pub 这条命令将会发布消息到某个给定的话题

-1 (单个破折号)这个参数选项使rostopic发布一条消息后马上退出

/turtle1/cmd_vel 这是消息所发布到的话题名称

geometry_msgs/Twist 这是所发布消息的类型

--(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号 -(比如负号)时是必须要添加的

'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 正如之前提到的,在一个turtlesim/Velocity消息里面包含有两个浮点型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。这些参数其实是按照YAML语法格式编写的,这在YAML文档中有更多的描述。

turtle已经停止移动了。这是因为turtle需要一个稳定的频率为1Hz的命令流来保持移动状态。

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

再次运行:

rosrun rqt_graph rqt_graph

结果:

可以看到 rostopic 发布器节点正在与 rostopic echo节点进行通信

4.2 使用 rostopic hz

rostopic hz命令可以用来查看数据发布的频率

命令格式:

rostopic hz [topic]

运行:

rostopic hz /turtle1/pose

看到 turtlesim_node 发布 /turtle/pose 时的速度

5 使用 rqt_plot

运行:

rosrun rqt_plot rqt_plot

在左上角的文本框分别输入 /turtle1/pose/x,点击 + 号,/turtle1/pose/y 点击 + 号。

按下减号按钮会显示一组菜单让你隐藏图形中指定的话题。现在隐藏掉你刚才添加的话题并添加/turtle1/pose/theta

6 编写*.msg

1. 在 /catkin_ws/src 中创建一个 pkg

catkin_create_pkg beginner_tutorials rospy roscpp std_msgs

2. 定义新的消息

mkdir msg
echo "int64 num" > msg/Num.msg

3.接下来,还有关键的一步:我们要确保msg文件被转换成为C++,Python和其他语言的源代码: 查看package.xml, 确保它包含一下两条语句

 <build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>

如果没有,添加进去。 注意,在构建的时候,我们只需要"message_generation"。然而,在运行的时候,我们只需要"message_runtime",否则会编译/运行失败。

CMakeLists.txt文件中,利用find_package 函数,增加对message_generation的依赖,这样就可以生成消息了。 可以直接在COMPONENTS的列表里增加message_generation,就像这样

同样,需要确保设置了运行依赖:

手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。 确保添加了如下代码:

进入 /catkin_ws 编译后应该像这样:

以下是未修改 package.xml 和 CMakeLists.txt 的编译结果

ROStopic 通信方式的更多相关文章

  1. Easticsearch通信方式_API

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch概念 a. Elasticsearch是一个基于Luc ...

  2. Java线程间通信方式剖析——Java进阶(四)

    原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...

  3. ROS学习笔记(八)——ROSTOPIC

    NEW 1 $ roscore NEW 2 $ rosrun turtlesim turtlesim_node NEW 3 $ rosrun turtlesim turtle_teleop_key N ...

  4. activemq的几种基本通信方式总结

    简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activem ...

  5. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  6. hadoop中NameNode、DataNode和Client三者之间协作关系及通信方式介绍

    <ignore_js_op> 1)NameNode.DataNode和Client         NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间.集群 ...

  7. activemq的两种基本通信方式的使用及总结

    简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activem ...

  8. apple watch 与 iphone 之间的通信方式

    apple watch 与 iphone 之间的通信方式:通过watchkit WatchKit应用扩展都提供一个名为WKInterfaceController的子类来管理相应的界面. 启动watch ...

  9. Linux下进程通信方式(简要概述)

    http://blog.sina.com.cn/s/blog_65c209580100u0ee.html (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先 ...

随机推荐

  1. Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba

    Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...

  2. threejs CameraHelper 查看照相机的观察范围

    简单例子 这个例子,是在一个视图中,看到照相机的辅助线,也就是,一个照相机的观察访问 这样,就需要两个照相机,一个是主照相机,一个是加有辅助线的照相机(有两种,正交和透视,这里辅助的使用的是正交的) ...

  3. python入门-windows下anaconda环境搭建

    1. anaconda下载 根据根据自己系统下载32位还是64位,还有版本 python3.6——64bit python3.6——32bit python2.7——64bit python2.7—— ...

  4. 用python爬取豆瓣电影Top 250

    首先,打开豆瓣电影Top 250,然后进行网页分析.找到它的Host和User-agent,并保存下来. 然后,我们通过翻页,查看各页面的url,发现规律: 第一页:https://movie.dou ...

  5. ORACLE大对象存储

    --创建有大对象字段的一张表 create table test001 (       fname varchar2(50),       content blob )  select * from ...

  6. Spring循环依赖的三种方式以及解决办法

    一. 什么是循环依赖? 循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环.比如A依赖于B,B依赖于C,C又依赖于A.如下图: 注意,这里不是函数的循环调用,是对象的 ...

  7. 【已解决】极速迅雷win10闪退解决方案

    [已解决]极速迅雷win10闪退解决方案 本文作者:天析 作者邮箱:2200475850@qq.com 发布时间: Wed, 17 Jul 2019 18:01:00 +0800 在吾爱下载了个极速迅 ...

  8. 攻防世界(Ctf-Web 新手练习区 Writeup)

    平台地址:adworld.xctf.org.cn 在打着暑假工赚零花钱之余,我将这些题利用空余时间刷了一遍,感觉内心还是比较满足的! 题目:view_source 这道题没啥好说的,在url的前面加上 ...

  9. 打印html页面

    // 打印类属性.方法定义 const Print = function (dom, options) { if (!(this instanceof Print)) return new Print ...

  10. C++实现企业链表(单向链表的另外一种实现方式)

    LinkList.h #include <windows.h> #include <stdio.h> // 链表小结点 typedef struct LINKNODE { LI ...