当前位置: 首页 > news >正文

如何利用建站平台服务客户电子项目外包平台

如何利用建站平台服务客户,电子项目外包平台,seo服务商找行者seo,上海传媒公司李闪闪身价在 ROS 系统中#xff0c;通信接口#xff08;Interface#xff09; 是节点之间传递信息的标准“语言协议”#xff0c;确保了不同功能节点之间可以正确理解和使用彼此传送的数据内容。我们可以将其理解为“数据结构格式定义”#xff0c;贯穿于话题#xff08;Topic通信接口Interface 是节点之间传递信息的标准“语言协议”确保了不同功能节点之间可以正确理解和使用彼此传送的数据内容。我们可以将其理解为“数据结构格式定义”贯穿于话题Topic、服务Service、动作Action等通信机制中。 在软件开发中“接口”是一种连接关系它规定了数据如何进出模块如何对接只有两边的格式和要求一致系统才能正常“搭伙做事”。 为了让每个 ROS 节点可以用不同的语言编写比如一个节点用 C 控制硬件另一个节点用 Python 实现上层逻辑ROS 把通信接口设计成与编程语言无关的格式。 int32 表示 32 位整型 int64 表示 64 位长整型 bool 表示布尔值 还支持数组如 int32[]、嵌套结构体等复合数据类型 这些接口定义写在 .msg消息或 .srv服务文件中。 在 编译时ROS 会自动生成对应语言如 C 或 Python里的数据结构文件供节点直接使用开发者不需要自己去写解析逻辑。 无论你用什么语言编写节点只要遵循统一接口数据就能准确传输、协同工作。 ROS 2 三种通信机制话题、服务、动作在接口定义上的格式差异。 在 ROS 2 系统中通信接口的定义格式因通信机制而异但都遵循统一的、语言无关的描述方式。 话题Topic通信 使用 .msg 文件定义属于单向异步通信。 只需定义每一帧数据的内容格式如 int32 x int32 y 表示消息中包含两个 32 位整型数据可用于发送二维坐标等。 服务Service通信 使用 .srv 文件定义属于请求-应答式的同步通信。 定义由请求部分和应答部分组成中间用 --- 分隔例如 int64 a int64 b --- int64 sum 客户端发起请求包含 a 和 b服务器处理后返回 sum。 动作Action通信 使用 .action 文件定义适合描述持续一段时间的过程性任务如移动、旋转、导航等。 定义包含三部分 # 目标 bool enable --- # 结果 bool finish --- # 反馈 int32 state 目标Goal开始任务如开始转动 结果Result任务最终是否完成 反馈Feedback周期性返回进度如当前已转动角度 通信机制接口文件特点数据方向话题.msg异步、广播单向服务.srv同步请求客户端 ⇄ 服务端动作.action可反馈过程客户端 ⇄ 服务端 反馈 服务接口的定义与使用 在本案例中我们以一个获取目标位置的服务为例全面了解 ROS 2 中服务接口的定义方法及实际应用方式。 learning_interface/srv/GetObjectPosition.srv bool get     # 请求是否获取目标位置 --- int32 x      # 响应目标X坐标 int32 y      # 响应目标Y坐标 bool get客户端请求参数true 表示请求当前目标位置。 ---分隔请求与响应。 int32 x, y服务端反馈的目标坐标。 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_sec1.0):self.get_logger().info(service not available, waiting again...)self.request GetObjectPosition.Request()def send_request(self):self.request.get Trueself.future self.client.call_async(self.request)def main(argsNone):rclpy.init(argsargs) # 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))breaknode.destroy_node() # 销毁节点对象rclpy.shutdown() # 关闭ROS2 Python接口import rclpy # ROS2 Python接口库 from rclpy.node import Node # ROS2 节点类 from sensor_msgs.msg import Image # 图像消息类型 import numpy as np # Python数值计算库 from cv_bridge import CvBridge # ROS与OpenCV图像转换类 import cv2 # Opencv图像处理库 from learning_interface.srv import GetObjectPosition # 自定义的服务接口lower_red np.array([0, 90, 128]) # 红色的HSV阈值下限 upper_red np.array([180, 255, 255]) # 红色的HSV阈值上限class ImageSubscriber(Node):def __init__(self, name):super().__init__(name) # ROS2节点父类初始化self.sub self.create_subscription(Image, image_raw, self.listener_callback, 10) # 创建订阅者对象消息类型、话题名、订阅者回调函数、队列长度self.cv_bridge CvBridge() # 创建一个图像转换对象用于OpenCV图像与ROS的图像消息的互相转换self.srv self.create_service(GetObjectPosition, # 创建服务器对象接口类型、服务名、服务器回调函数get_target_position,self.object_position_callback) self.objectX 0self.objectY 0 def object_detect(self, image):hsv_img cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # 图像从BGR颜色模型转换为HSV模型mask_red cv2.inRange(hsv_img, lower_red, upper_red) # 图像二值化contours, hierarchy cv2.findContours(mask_red, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) # 图像中轮廓检测for cnt in contours: # 去除一些轮廓面积太小的噪声if cnt.shape[0] 150:continue(x, y, w, h) cv2.boundingRect(cnt) # 得到苹果所在轮廓的左上角xy像素坐标及轮廓范围的宽和高cv2.drawContours(image, [cnt], -1, (0, 255, 0), 2)# 将苹果的轮廓勾勒出来cv2.circle(image, (int(xw/2), int(yh/2)), 5,(0, 255, 0), -1) # 将苹果的图像中心点画出来self.objectX int(xw/2)self.objectY int(yh/2)cv2.imshow(object, image) # 使用OpenCV显示处理后的图像效果cv2.waitKey(50)def listener_callback(self, data):self.get_logger().info(Receiving video frame) # 输出日志信息提示已进入回调函数image self.cv_bridge.imgmsg_to_cv2(data, bgr8) # 将ROS的图像消息转化成OpenCV图像self.object_detect(image) # 苹果检测def object_position_callback(self, request, response): # 创建回调函数执行收到请求后对数据的处理if request.get True:response.x self.objectX # 目标物体的XY坐标response.y self.objectYself.get_logger().info(Object position\nx: %d y: %d %(response.x, response.y)) # 输出日志信息提示已经反馈else:response.x 0response.y 0self.get_logger().info(Invalid command) # 输出日志信息提示已经反馈return responsedef main(argsNone): # ROS2节点主入口main函数rclpy.init(argsargs) # ROS2 Python接口初始化node ImageSubscriber(service_object_server) # 创建ROS2节点对象并进行初始化rclpy.spin(node) # 循环等待ROS2退出node.destroy_node() # 销毁节点对象rclpy.shutdown() # 关闭ROS2 Python接口 这是一个通过图像识别红色目标物体并通过ROS服务机制获取其当前坐标的系统。 服务器端服务提供方接收图像并处理检测红色物体位置一旦客户端请求就返回该位置。 客户端服务调用方主动发起“请告诉我目标位置”的请求获取最新坐标。 在 ROS2 中通信接口Interface 是一种标准格式的“数据结构定义”用于描述节点间如何传递数据。 对于 服务通信Service 来说接口包括两部分 请求部分Request客户端发送给服务端的数据。 响应部分Response服务端返回给客户端的结果。 接口使用 .srv 文件定义例如你定义的 定义通信接口文件 .srv bool get --- int32 x int32 y 在服务端创建服务对象绑定回调 self.srv self.create_service(     GetObjectPosition,                   # 使用定义好的接口     get_target_position,              # 服务名     self.object_position_callback       # 处理函数 ) 在客户端创建服务请求并发送 self.client self.create_client(GetObjectPosition, get_target_position) self.request GetObjectPosition.Request() self.request.get True self.future self.client.call_async(self.request) 服务端处理请求并返回响应 def object_position_callback(self, request, response):     if request.get:         response.x self.objectX         response.y self.objectY     return response 再次说明# 文件learning_interface/srv/GetObjectPosition.srv bool get --- int32 x int32 y 系统会自动生成 一个 GetObjectPosition.Request 类含 get 字段 一个 GetObjectPosition.Response 类含 x 和 y 字段 所以你在代码中哪里写了 .get、.x、.y就说明用了通信接口定义的字段 通信接口 .srv 文件是怎么关联上的 在代码中首先导入# 文件learning_interface/srv/GetObjectPosition.srv from learning_interface.srv import GetObjectPosition 意思是你定义的服务接口 GetObjectPosition.srv位于 ROS功能包 learning_interface 的 srv/ 文件夹里。 你就可以在你项目的工作空间中查找该文件cd ~/ros2_ws/src/learning_interface/srv ls # 应该能看到 GetObjectPosition.srv
http://www.dnsts.com.cn/news/179250.html

相关文章:

  • 做网站公司上海彩页设计软件
  • 职业教育网站建设方案网页传奇打金
  • 网站 兼容性能在线做国二计算机题目的网站
  • 哪个网站做网上旅社预定百度网盘会员
  • 网站建设模拟软件免费的ai素材网站
  • 邯郸网站制作厂家网站标题关键词怎么做
  • 做网站要收订金吗wordpress icp涵数
  • 兰州专业网站建设公司哪家好软件开发项目预算
  • 建设本地端网站网站开发转包协议
  • 怎么做一个链接网站专门做医疗器械的网站
  • 做行程的网站推荐什么是网络设计的前提
  • 环保材料东莞网站建设服装设计网站哪个好
  • 福州网络推广建站seo专员是指什么意思
  • 上海黄页企业名录seo网站权重
  • 重庆网站建设狐灵科技wordpress提交360
  • 创业开网站建设公司北京做招聘网站的公司
  • 动力无限做网站怎么样做普工招聘网站
  • 上海网站制作公司的排名中企动力属于国企吗
  • PHP MySQL 网站开发实例做评测好的视频网站
  • 简洁的网站地图模板建设商业网站
  • 江苏工程建设信息网站兰溪网站
  • 恩施建站建设伊利网站设计
  • 浙江省建设注册管理中心网站首页网站建设开发设计营销公司山东
  • 娱乐网站排行榜陕西煤化建设集团铜川分公司网站
  • 广东中山建设信息网站成都旅游必去推荐
  • 个人网站建设计划报告青海网网站建设
  • 传媒视频软件下载网站国外做详情页网站
  • 建网站外包需要多少钱旅游房地产网站建设
  • 网站免费推广东莞百姓网交友
  • 微电影网站源码xiazai优化分析