0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

服务通信接口的定义与使用

麦辣鸡腿堡 来源:古月居 作者:古月 2023-12-01 15:28 次阅读

了解了通信接口的概念,接下来我们再从代码实现的角度,研究下如何定义以及使用一个接口

在之前服务概念讲解的课程中,我们编写了这样一个例程,我们再来回顾下。

图片

有三个节点:

第一个驱动相机发布图像话题

第二个是机器视觉识别节点,封装了一个服务的服务端对象,提供目标识别位置的查询服务;

第三个节点在需要目标位置的时候,就可以发送请求,收到位置进行使用了。

图片

接口定义

在这个例程中,我们使用GetObjectPosition.srv定义了服务通信的接口:

learning_interface/srv/GetObjectPosition.srv

bool get      # 获取目标位置的指令---int32 x       # 目标的X坐标int32 y       # 目标的Y坐标

定义中有两个部分,上边是获取目标位置的指令,get为true的话,就表示我们需要一次位置,服务端就会反馈这个x、y坐标了。

完成定义后,还需要在功能包的CMakeLists.txt中配置编译选项,让编译器在编译过程中,根据接口定义,自动生成不同语言的代码:

...find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME}  "srv/GetObjectPosition.srv")...

功能包的package.xml文件中也需要添加代码生成的功能依赖:

... < build_depend >rosidl_default_generators< /build_depend > < exec_depend >rosidl_default_runtime< /exec_depend > < member_of_group >rosidl_interface_packages< /member_of_group > ...

程序调用

我们在代码中再来重点看下接口的使用方法。

客户端接口调用

learning_service/service_object_client.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居@说明: ROS2服务示例-请求目标识别,等待目标位置应答"""import rclpy                                            # ROS2 Python接口库from rclpy.node   import Node                           # ROS2 节点类from learning_interface.srv import GetObjectPosition    # 自定义的服务接口class objectClient(Node):    def __init__(self, name):        super().__init__(name)                          # ROS2节点父类初始化        self.client = self.create_client(GetObjectPosition, 'get_target_position')        while not self.client.wait_for_service(timeout_sec=1.0):            self.get_logger().info('service not available, waiting again...')        self.request = GetObjectPosition.Request()    def send_request(self):        self.request.get = True        self.future = self.client.call_async(self.request)def main(args=None):    rclpy.init(args=args)                             # ROS2 Python接口初始化    node = objectClient("service_object_client")      # 创建ROS2节点对象并进行初始化    node.send_request()    while rclpy.ok():        rclpy.spin_once(node)        if node.future.done():            try:                response = node.future.result()            except Exception as e:                node.get_logger().info(                    'Service call failed %r' % (e,))            else:                node.get_logger().info(                    'Result of object position:n x: %d y: %d' %                    (response.x, response.y))            break    node.destroy_node()                              # 销毁节点对象    rclpy.shutdown()                                 # 关闭ROS2 Python接口

服务端接口调用

learning_service/service_object_server.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居(www.guyuehome.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信接口
    +关注

    关注

    3

    文章

    237

    浏览量

    30982
  • 服务端
    +关注

    关注

    0

    文章

    66

    浏览量

    7006
  • ROS
    ROS
    +关注

    关注

    1

    文章

    278

    浏览量

    17004
收藏 人收藏

    评论

    相关推荐

    iphone接口定义

    本文提供详细的iphone接口定义,有iphone接口定义英文版和iphone接口定义中文介绍说
    发表于 03-28 15:15 1.4w次阅读

    USB接口定义

    USB接口定义 USB接口定义  更多尽在:USB产品网
    发表于 04-21 11:58 3.4w次阅读

    MIDI接口定义和游戏杆接口定义

    MIDI 接口定义和游戏杆接口定义图 MIDI 接口和 PC 游戏杆接口是共用的,外观为 15
    发表于 11-27 20:13 4111次阅读
    MIDI<b class='flag-5'>接口</b><b class='flag-5'>定义</b>和游戏杆<b class='flag-5'>接口</b><b class='flag-5'>定义</b>图

    rs422接口定义 rs232接口定义 rs485接口定义

    rs422接口定义 rs232接口定义 rs485接口定义 Pin 信
    发表于 04-27 17:33 1.5w次阅读

    手机usb接口定义

    手机8针的usb接口定义 手机12针的usb接口定义 K750c手机US
    发表于 06-10 11:19 1.5w次阅读
    手机usb<b class='flag-5'>接口</b><b class='flag-5'>定义</b>

    MIDI接口定义,MIDI接口游戏杆接口引脚功能定义

    MIDI接口信号定义与游戏杆接口功能定义 MIDI接口和PC游戏杆接口是共用的,外观见下图:
    发表于 05-03 23:27 6795次阅读
    MIDI<b class='flag-5'>接口</b><b class='flag-5'>定义</b>,MIDI<b class='flag-5'>接口</b>游戏杆<b class='flag-5'>接口</b>引脚功能<b class='flag-5'>定义</b>图

    SCART接口功能定义

    SCART接口功能定义 附录:SCART 接口功能定义A、传输复合视频信号(Composite Video Only):
    发表于 08-21 22:40 7501次阅读
    SCART<b class='flag-5'>接口</b>功能<b class='flag-5'>定义</b>

    USB接口与miniUSB接口定义

    USB接口与miniUSB接口定义 USB接口定义:
    发表于 12-21 10:54 2.6w次阅读

    常用接口定义

    常用接口定义,常用接口定义,常用接口定义.
    发表于 04-29 17:57 20次下载

    SATA的接口定义及硬盘电源接口定义

    SATA接口的pin定义包括:信号电源和数据线接口定义
    发表于 06-16 18:21 23次下载

    接口定义 通信接口的作用

    通信接口 在ROS系统中,无论话题还是服务,或者我们后续将要学习的动作,都会用到一个重要的概念——通信接口
    的头像 发表于 12-01 14:59 834次阅读

    ROS通信接口机制介绍

    ROS通信接口 接口可以让程序之间的依赖降低,便于我们使用别人的代码,也方便别人使用我们的代码,这就是ROS的核心目标,减少重复造轮子。 ROS有三种常用的通信机制,分别是话题、
    的头像 发表于 12-01 15:03 832次阅读
    ROS<b class='flag-5'>通信</b><b class='flag-5'>接口</b>机制介绍

    话题通信接口定义和运行效果

    话题接口定义与使用 话题通信接口定义也是类似的,继续从之前的机器视觉案例中来衍生,我们想把服务
    的头像 发表于 12-01 15:32 458次阅读
    话题<b class='flag-5'>通信</b><b class='flag-5'>接口</b>的<b class='flag-5'>定义</b>和运行效果

    fpga仿真器接口定义

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)仿真器接口定义主要依赖于仿真器的具体设计和所支持的通信协议。在FPGA的设计和仿真过程中,接口
    的头像 发表于 03-15 14:01 1243次阅读

    SIM卡座的接口定义

    SIM卡座连接器的接口定义是移动通信设备中不可或缺的一部分,确保了SIM卡与设备之间的稳定通信和数据传输。在本文中,连欣科技将详细探讨一下SIM卡座的
    的头像 发表于 06-17 17:47 3996次阅读
    SIM卡座的<b class='flag-5'>接口</b><b class='flag-5'>定义</b>