我是跟着bilibili中的一位up主学习ros基础,视频链接如下:
038话题通信_理论模型_Chapter2-ROS通信机制_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ci4y1L7ZZ/?p=40&spm_id_from=333.880.my_history.page.click&vd_source=3b6cdacf9e8cb3171856fe2c07acf498视频中用到的课程文档,up主用gitbook发布:
Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程http://www.autolabor.com.cn/book/ROSTutorials/我对ros、Ubuntu没有经验。up主整理的课程文档很详细,但是缺少我难以理解的细节问题,因此我发布了一系列博客,对于每一个章节进行补充说明。方便以后复习、借鉴!
1、话题通信
1.1 话题通信理论模型
用相亲来解释话题通信实现模型,便于理解:
1.2 话题通信基本操作A(C++)
1.2.1 发布方
1、#include "std_msgs/String.h" ,这是String类型的头文件(因为要发布的数据类型需要用到字符串型)
2、#include<sstream>,等同于c++语言中的iostream头文件
3、init(参数1,参数2,参数3)函数的参数3是自定义节点名称
4、ok()函数作用是,只要节点还活着,就能返回true
5、ss.str()返回ss对象中的字符串
6、ros::spinOnce()函数是官方建议,用于处理回调函数(咱们的程序暂无应用)
1.2.2 订阅方
- nh.subscribe中,泛型:接受的消息类型(可以不写),参数1:接收的话题,参数2:阀值,参数3:回调函数
- doMsg是回调函数,参数:订阅消息的常量指针的引用
1.2.3 配置 CMakeLists.txt
- add_executable(自定义节点映射名称 src/源文件名称)
- target_link_libraries(自定义节点映射名称 ${catkin_LIBRARIES} )
1.3 话题通信基本操作B(python)
略
解耦合:即便使用不同的语言编写节点,他们之间也是可以实现数据交换。也就是说,可以使用c++编写发布方,python编写订阅方,他们之前也可以正常数据交换。
2、服务通信
2.1 服务通信理论模型
2.2 服务通信自定义srv
2、配置文件
2.3
1、服务端
- nh.advertiseService函数,参数1:自定义话题名称,参数2:回调函数
- doReq回调函数,形参1:当前功能包下AddInts下的Request类型的引用,形参2:当前功能包下AddInts下的Response类型的引用