【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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
9月前
|
Ubuntu Java Python
ROS2通讯中间件安装与使用
本文记录主要ROS2的安装、如何JAVA和PYTHON对ROS2消息的订阅和发布。
|
1月前
|
传感器
[ROS2] --- topic
[ROS2] --- topic
41 0
|
10月前
|
消息中间件 算法 机器人
【ROS】如何让ROS中节点实现数据交换Ⅰ--ROS话题通信
比较常用的目前就这一些,之后的命令现用现学就好了
195 1
|
10月前
|
Ubuntu 机器人 定位技术
ros_gazebo/turtlebot3 室内仿真导航,提取camera/image和pose位姿真值,并将topic 时间同步对齐,最后制作成kitti 格式的数据集。
ros_gazebo/turtlebot3 室内仿真导航,提取camera/image和pose位姿真值,并将topic 时间同步对齐,最后制作成kitti 格式的数据集。
310 0
|
9月前
|
存储 API C++
ROS Topic 相关API接口与命令行介绍
ROS Topic 相关API接口与命令行介绍
378 0
|
11月前
[ROS通信机制] ---话题通信
[ROS通信机制] ---话题通信
95 0
[ROS通信机制] ---话题通信
|
10月前
|
机器学习/深度学习 Ubuntu 网络协议
【UR机械臂ros通讯前的示教器网络配置】
【UR机械臂ros通讯前的示教器网络配置】
322 0
|
10月前
|
XML 机器人 C++
【4. ROS的主要通讯方式:Topic话题与Message消息】(2)
【4. ROS的主要通讯方式:Topic话题与Message消息】(2)
179 0
|
11月前
[ROS通信机制] ---话题通信之自定义msg类型
[ROS通信机制] ---话题通信之自定义msg类型
102 0
ROS学习-理解ROS话题
ROS学习-理解ROS话题
448 0
ROS学习-理解ROS话题

推荐镜像

更多