操作演示,对 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 的编译结果

转载于:https://www.cnblogs.com/NikkiNikita/p/9450739.html

ROStopic 通信方式相关推荐

  1. ros入门 工程目录结构、节点通信方式、基本操作命令

    目录 ROS(Robot Operating System) ros的特点 ros的系统实现 ROS(Robot Operating System) ros的基本框架是斯坦福大学人工智能实验室在STA ...

  2. ROS机器人DIY教程:ROS和STM32通信(常规通信方式和rosserial)之通过上层修改底层参数

    本文主要介绍怎么编写代码实现在上层修改底层参数的相关知识,主要讲解使用两种通信方式来实现 1.rosserial方法,rosserial是官方对arduino提供的一种简单的通信协议,本人对这个库进行 ...

  3. 进程、线程、协程、通信方式

    文章目录 进程 线程 协程 进程.线程.协程的区别 概念 进程.线程共同点 进程.线程不同点 线程.协程比较 通信方式之间的差异 进程通信 管道(pipe) 有名管道 (namedpipe) 信号量( ...

  4. angularjs1访问子组件_vue 组件通信看这篇就够了(12种通信方式)

    vue 组件间的通信是 vue 开发中很基础也十分重要的部分,作为使用 vue 的开发者每天都在使用.同时,vue 通信也是面试中非常高频的问题,有很多面试题,都是围绕通信展开. 本文会介绍常见的通信 ...

  5. html 如何实现一条竖线边上有 刻度_记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背||CSDN博文精选...

    作者:帅地 有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好.想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着"背"来记忆的,所 ...

  6. 进程间基于消息队列的通信_Linux 进程间的通信方式

    (一)进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就是创建一个进程,在这个 过程中伴随着资源的分配和释放,可以认为进程是一个程序的一次执行过程. (二)进程间通信的概念 ...

  7. windows 驱动和应用层的三种通信方式 r3到r0 DeviceIoControl 4种ioctl请求

    驱动程序和客户应用程序经常需要进行数据交换,但我们知道驱动程序和客户应用程序可能不在同一个地址空间,因此操作系统必须解决两者之间的数据交换. 驱动层和应用层通信,主要是靠DeviceIoControl ...

  8. linux共享内存通信方式,linux下进程通信方式--共享内存

    1.概念 不同进程看到共同区域 2.特点 (1)是进程间通信最快的方式,对不同内存的映射(少了两次拷贝) (2)不提供任何同步互斥机制,也不自己维护 (3)接口简单 3.通信方式 由文件系统提供--管 ...

  9. python stm32-实现Python与STM32通信方式

    断断续续学了几周Stm32后,突然想实现上位机和下位机的通信,恰好自己学过一点python,便想通过python实现通信. 首先在windows的CMD命令管理器中安装pyserial,直接在CMD中 ...

最新文章

  1. oracle查询当前归档scn_【学习笔记】Oracle数据库 查看归档日志存放的位置
  2. NeHe教程Qt实现——lesson07
  3. 见贤思齐焉,见不贤而内自省也
  4. linux适合搭建什么服务器吗,Linux 的三种服务器的搭建
  5. 使用matlab内存不足,Matlab内存不足问题(Out of memory)
  6. 触摸屏Sensor叠构实例学习记录(一)
  7. ultilize什么意思_ultilize是什么意思
  8. Magnet :让Mac上的分屏更好用
  9. 基于javaweb+jsp的在线购书商城系统(java+jsp+mysql+servlert+ajax)
  10. js获取浏览器高度 宽度
  11. 春来夏往,秋收冬藏,我们来日方长(第一章)
  12. 简单介绍一下HBase、Cassandra、Voldemort、Redis、VoltDB、MySQL(转)
  13. 网络系统规划与设计的基本原则
  14. 朋友间相处的七项法则
  15. SMB CIFS DOMIAN
  16. RabbitMQ-尚硅谷
  17. 牛客网、赛码网javascript在线编程的输入输出
  18. 大专生程序员找工作的一点小建议 知识分享 经验分享
  19. Linux--原子操作(介绍及其操作函数集)
  20. Android App开发基础

热门文章

  1. Spring MVC入门示例
  2. undefined reference to 'pthread_create'问题解决
  3. 跳出误区:Java程序员进阶架构师真的没你想象的那么简单......
  4. 如何验证自己的网络是否支持ipv6
  5. 活久见: 原来 Chrome 浏览器支持 Import from 语法
  6. 写给 Android 应用工程师的 Binder 原理剖析
  7. 1、ios开发之 内购
  8. 【转】职场三国杀:为什么职场争斗中认真干活的人有时会败给不干活的人
  9. SCII码表 键盘常用ASCII码
  10. SHA256CryptoServiceProvider vs SHA256Managed