zoukankan      html  css  js  c++  java
  • ROS消息vs服务

    1、ROS包消息/服务模式与要点
    从功能上看,ROS包是信息交互和处理的基本单元。根据信息的交互和处理方式,ROS包有以下两大类:

    消息发布者与订阅者
    服务器与客户端
    对于消息模式的包,信息的提供者主动,信息的使用者被动:信息使用者接收到消息后执行回调函数处理信息,即处理信息的回调函数由信息发布者触发;

    对于服务模式的包,信息的提供者被动,信息的使用者主动:信息使用者需要时向信息提供者查询,提供者收到查询参数后,调用回调函数计算结果然后给予应答,即处理信息的回调函数由服务的查询者(信息使用者)触发;

    要点如下:

    1.1 消息发布与订阅
    消息的定义方法:
    消息定义于包目录的msg/xxx.msg中
    定义消息的包可以与发布者/订阅者的包不一样
    在消息定义包的package.xml中加上build_depend和run_depend约束项
    在消息定义包的CMakeLists.txt中设置好find_package(), catkin_package(), add_message_files(), generate_messages()
    消息的发布
    完成节点初始化 ros::init()
    创建节点句柄 ros::NodeHandle
    调用NodeHandle的advertise方法创建消息发布者
    调用消息发布者的publish方法发布消息
    消息的订阅
    创建订阅到消息后需要执行的回调函数
    完成节点初始化 ros::init()
    创建节点句柄 ros::NodeHandle
    调用NodeHandle的subscribe方法创建消息订阅者并绑定回调函数
    ros::spin()
    消息发布和订阅的命令行工具
    通过命令行发布和订阅消息,不用通过ROS节点,测试的时候非常方便:
    1. rosmsg show [message type] 显示消息的数据格式
    2. rostopic echo /topic_name 显示特定topic接收到的消息
    3. rostopic pub <topic-name> <topic-type> [data...] 向特定的topic发送消息

    1.2 服务器与客户端
    服务的定义方法:
    服务定义于包目录的srv/xxx.srv中
    定义服务的包可以与服务器/客户端的包不一样
    在消息定义包的CMakeLists.txt中设置好find_package(), add_service_files(), generate_messages()
    服务器
    创建处理服务数据的回调函数
    完成节点初始化 ros::init()
    创建节点句柄 ros::NodeHandle
    调用节点句柄的advertiseService函数启动服务
    ros::spin()
    客户端
    完成节点初始化 ros::init()
    创建节点句柄 ros::NodeHandle
    调用节点句柄的serviceClient函数创建客户端对象client,通过服务名称绑定服务
    申明服务类型的对象(srv),并将srv.request部分赋初值
    调用client的call(srv)函数调用服务
    服务执行成功后,通过srv.response取得服务器的应答结果
    命令行工具
    rosservice call <service-name> [service-args]调用特定服务
    1.3 需要注意的细节
    消息/服务模式的节点实现时要include消息/服务对应的头文件
    上述头文件需要先编译消息定义包来生成,因此需要在消息/服务使用者对应的CMakeLists.txt中加上add_dependencies()约束,否则会出现找不到头文件的现象
    信息交互中的被动方,即消息模式的消息订阅者或服务模式的服务器在都要调用ros::spin(),该函数确保回调能够发生。

  • 相关阅读:
    学习小结(8)
    内置函数补充(zip map filter)
    网络编程(爬虫,接口和requests的模块应用)及网络测接口
    Selenium彩蛋篇-Css Selector使用方法
    Selenium彩蛋篇-Xpath使用方法
    Selenium-WebDriverApi接口详解
    Selenium-Switch与SelectApi接口详解
    Selenium-常问面试题
    下拉框处理(select)
    Selenium之前世今生
  • 原文地址:https://www.cnblogs.com/klcf0220/p/11050135.html
Copyright © 2011-2022 走看看