ROS2自学笔记:通信接口

通信接口是任何通信(话题,服务,动作)的一个规范类型。通信时收发的数据要满足接口要求

通信接口定义方式:
1 话题为单向传输,因此只要说明要发送的数据,如:

int32 x
int32 y

话题接口类型为.msg文件
2 服务为双向传输,要说明请求和应答数据,中间用—隔开:

int64 a
int64 b
---
int64 sum

服务接口类型为.srv文件
3 动作要求三部分:目标,结果,反馈:

// 目标
bool a
---
// 结果
bool finish
---
// 反馈
int32 state

ROS2官方自带通信接口:
打开位置:computer->other location->opt->ros->foxy->share
话题接口(msg):
在这里插入图片描述
更简单的办法是使用终端指令

ros2 interface list

显示所有接口
在这里插入图片描述

查询接口定义

ros2 interface show (接口名称)

在这里插入图片描述

查找某一个功能包里的接口

ros2 interface package (功能包名称)

在这里插入图片描述

在之前学习服务的文章里有一个图像识别并获取位置信息的程序(可见https://blog.csdn.net/Raine_Yang/article/details/125359357?spm=1001.2014.3001.5501)这一程序中实现的通信接口如下:

bool get
---
int32 x
int32 y

这一接口中请求参数为bool get,应答参数为int32 x, int32 y

对于自己创建的接口,要在CMakeLists.txt中进行声明,这样编译器会自动将接口文件编译为所需的编程语言

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

对于创建并声明的接口,在其他程序里只需要import就可以直接使用

from learning_interface.srv import GetObjectPosition

编译器会把接口文件编译为python文件,位置
dev_ws -> install -> learning_interface -> lib -> python3.8 ->site_packages -> learning_interface -> srv

自动生成的python文件
在这里插入图片描述
C++文件位置:
dev_ws -> install -> learning_interface -> include -> learning_interface -> srv

自定义接口实现话题通信图像识别:
这一次我们修改之前图像识别的示例程序(原程序:https://blog.csdn.net/Raine_Yang/article/details/125349724?spm=1001.2014.3001.5501)

通信接口:

int32 x
int32 y

发布者:

import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from learning_interface.msg import ObjectPosition
from cv_bridge import CvBridge
import cv2
import numpy as np

lower_red = np
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值