【4. ROS的主要通讯方式:Topic话题与Message消息】(1)

本文涉及的产品
资源编排,不限时长
简介: 【4. ROS的主要通讯方式:Topic话题与Message消息】(1)

1. 前言

本教程是B站阿杰视频的笔记

视频地址:https://www.bilibili.com/video/BV1qa41137ED

1.png


1.1 王者解释结点通讯:

  • 话题topic
  • 发布者publisher
  • 订阅者subsciber

2.png

1.2 通讯小结

  1. 话题Topic是节点间进行持续通讯的一种形式。
  2. 话题通讯的两个节点通过话题的名称建立起话题通讯连接。3.话题中通讯的数据,叫做消息Message。
  3. 消息Message通常会按照一定的频率持续不断的发送,以保证消息数据的实时性。
  4. 消息的发送方叫做话题的发布者Pubplisher。
  5. 消息的接收方叫做话题的订阅者Subsciber。

2. 灵活的Topic话题图解

3.png


2.1 话题注意细节


4.png

2.2 外延补充

  • —个ROS节点网络中,可以同时存在多个话题。
  • 一个话题可以有多个发布者也可以有多个订阅者。
  • 一个节点可以对多个话题进行订阅,也可以发布多个话题。
  • 不同的传感器消息通常会拥有各自独立话题名称,每个话题只有一个发布者。
  • 机器人速度指令话题通常会有多个发布者,但是同一时间只能有一个发言人。

3. Message消息图解

5.png


3.1 消息类型

ROS Index官网:https://index.ros.org/

6.png

搜索std_msgs

7.png

找到匹配的版本


8.png

3.2 查看标准消息类型std_msgs

选择Website,进入https://wiki.ros.org/std_msgs

9.png

下翻到 2.ROS Message Types

10.png


消息是嵌套的,由简单到复杂,类似C++的结构体


4. 使用C++实现Publisher发布者


11.png

这一期我们将按照这个场景来构建话题的发布者,一共有2个发布者,根据需求创建ssr_pkg包的chao_node和yao_node订阅节点


4.1 发布者的实现

打开之前创建的ssr_pkg,教程参照: 【初学ROS,年轻人的第一个Node节点】用VScode打开chao_node.cpp


12.png


4.2 消息分析

去ROS Index查找对应消息类型,进入https://wiki.ros.org/std_msgs,下翻到 2.ROS Message Types

13.png

超哥说的那句话不就是一个字符串吗

14.png

15.png

16.png

4.3 chao_node.cpp源程序

#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc,char *argv[])
{
  ros::init(argc,argv,"chao_node" );
  printf("我的枪去而复返,你的生命有去无回!\n");
  ros::NodeHandle nh;
  ros::Publisher pub = nh.advertise<std_msgs ::String>("kuai_shang_che_kai_hei_qun", 10);
  ros::Rate loop_rate(10);
  while( ros::ok())
  {
    printf("我要开始刷屏了!\n");
    std_msgs::String msg;
    msg.data ="国服马超,带飞";
    pub.publish(msg);
    loop_rate.sleep();
  }
  return 0;
}

ctrl+s快捷保存

ctrl+shift+b快捷编译


4.4 运行调试chao_node节点

打开两个终端,分别运行两行代码

roscore
rosrun ssr_pkg chao_node


rostopic工具

rostopic list
rostopic echo /kuai_shang_che_kai_hei_qun
echo -e "\u56FD\u670D\u9A6C\u8D85\uFF0C\u5E26\u98DE"
rostopic hz /kuai_shang_che_kai_hei_qun

17.png

18.png


小结


  1. 确定话题名称和消息类型。
  2. 在代码文件中include消息类型对应的头文件。
  3. 在main函数中通过NodeHandler大管家发布一个话题并得到消息发送对象。
  4. 生成要发送的消息包并进行发送数据的赋值。
  5. 调用消息发送对象的publish()函数将消息包发送到话题当中。

19.png

5. 复制节点yao_node

从chao_node.cpp复制到节点yao_node.cpp

20.png


5.1 修改C++源代码

#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc,char *argv[])
{
  ros::init(argc,argv,"yao_node" );
  printf("过去生于未来!\n");
  ros::NodeHandle nh;
  ros::Publisher pub = nh.advertise<std_msgs ::String>("gie_gie_dai_wo", 10);
  ros::Rate loop_rate(10);
  while( ros::ok())
  {
  printf("我要开始刷屏了!\n");
  std_msgs::String msg;
  msg.data ="求上车+++";
  pub.publish(msg);
  loop_rate.sleep();
  }
  return 0;
}


ctrl+s快捷保存

ctrl+shift+b快捷编译


5.2 修改CMakeLists.tet文件

增加yao_node节点配置


21.png


/

add_executable(chao_node src/chao_node.cpp)
target_link_libraries (chao_node
  ${catkin_LIBRARIES}
)
add_executable(yao_node src/yao_node.cpp)
target_link_libraries(yao_node
  ${catkin_LIBRARIES}
)


5.3 运行调试yao_node节点

运行新节点前,需要保留下面两个终端

roscore
rosrun ssr_pkg chao_node
rosrun ssr_pkg yao_node


采用rostopic查看消息

rostopic工具

rostopic list
rostopic echo /gie_gie_dai_wo
echo -e "\u56FD\u670D\u9A6C\u8D85\uFF0C\u5E26\u98DE"
rostopic hz /gie_gie_dai_wo

22.png

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
Ubuntu Java Python
ROS2通讯中间件安装与使用
本文记录主要ROS2的安装、如何JAVA和PYTHON对ROS2消息的订阅和发布。
|
4月前
|
传感器 算法 数据可视化
ROS2教程04 ROS2话题
这篇文章是关于ROS2(Robot Operating System 2)的教程,主要介绍了ROS2中话题的概念、特性、使用方式,以及如何编写发布者和订阅者的代码。
93 3
ROS2教程04 ROS2话题
|
4月前
|
机器人
ROS2教程 04 话题Topic
本文是关于ROS2(机器人操作系统2)中话题(Topic)机制的教程,详细介绍了ROS2中话题的命令使用,包括列出、回显、发布、信息查询、类型查询等功能,并通过示例代码展示了如何创建发布者(Publisher)和订阅者(Subscriber)节点,以及如何测试发布-话题-订阅通信。
294 0
ROS2教程 04 话题Topic
|
5月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
7月前
|
传感器
[ROS2] --- topic
[ROS2] --- topic
164 0
|
存储 API C++
ROS Topic 相关API接口与命令行介绍
ROS Topic 相关API接口与命令行介绍
557 0
|
机器学习/深度学习 Ubuntu 网络协议
【UR机械臂ros通讯前的示教器网络配置】
【UR机械臂ros通讯前的示教器网络配置】
575 0
|
XML 机器人 C++
【4. ROS的主要通讯方式:Topic话题与Message消息】(2)
【4. ROS的主要通讯方式:Topic话题与Message消息】(2)
240 0
|
算法 C语言 C++
【ROS】服务通信、话题通信的应用
现在可以直接使用键盘来控制乌龟运动了
130 0
|
2月前
|
Ubuntu 机器人 Linux

推荐镜像

更多