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

怎么让公司网站随便就搜的到wordpress后台卡顿

怎么让公司网站随便就搜的到,wordpress后台卡顿,白云优化网站建设,怎么制作h5页面ROS2节点通信之话题与服务点 引言1 理解从通信开始1.1 TCP#xff08;传输控制协议#xff09;1.2 UDP#xff08;用户数据报协议#xff09;1.3 基于共享内存的IPC方式 2 ROS2话题2.1 ROS2话题指令2.2 话题之RCLPY实现2.2.1 编写发布者2.2 2 编写订阅者2.2.3 运行测试 3 R… ROS2节点通信之话题与服务点 引言1 理解从通信开始1.1 TCP传输控制协议1.2 UDP用户数据报协议1.3 基于共享内存的IPC方式 2 ROS2话题2.1 ROS2话题指令2.2 话题之RCLPY实现2.2.1 编写发布者2.2 2 编写订阅者2.2.3 运行测试 3 ROS2服务3.1 ROS2服务指令3.2 服务之RCLPY实现3.2.1 编写客户端3.2 2 编写服务端3.2.3 运行测试 引言 笔者跟着鱼香ROS的ROS2学习之旅 学习参考 【ROS2机器人入门到实战】 笔者的学习目录 MOMO的鱼香ROS2一ROS2入门篇——从Ubuntu操作系统开启【ROS2】MOMO的鱼香ROS2二ROS2入门篇——ROS2初体验ROS2】MOMO的鱼香ROS2三ROS2入门篇——ROS2第一个节点 专业术语认识 TCP传输控制协议UDP用户数据报协议 1 理解从通信开始 通信的目的是在计算机系统中实现不同组件、进程或设备之间的信息和数据传递。通过通信各个实体可以共享信息、协调行动并实现协同工作。在计算机领域通信是构建分布式系统、网络和协议的基础。 通信的原理涉及两个主要方面通信协议和通信方式。 通信协议定义了数据的格式、传输方式、错误检测和纠正等规则以确保可靠的数据传输。 通信方式涉及了不同的通信介质和技术包括网络通信和进程间通信IPC。 1.1 TCP传输控制协议 使用ping命令进行基于UDP的网络通信 # 修改为自己的ip地址 ping 192.168.2.42 ping 192.168.2.361.2 UDP用户数据报协议 使用nc命令进行基于TCP的网络通信 # 终端1 nc -l 1234 # 终端2 echo Hello, TCP! | nc 127.0.0.1 1234关于TCP的通信可以参考笔者的博客【Python】基于socket函数的TCP通信 1.3 基于共享内存的IPC方式 基于共享内存的进程间通信IPC方式 通过ipcs命令查看当前系统中的共享内存段 ipcs -m使用ipcrm命令删除不再需要的共享内存段 ipcrm -m shmid2 ROS2话题 一个节点发布数据到某个话题上另外一个节点就可以通过订阅话题拿到数据。 ROS2话题通信其实还可以是1对n,n对1,n对n的。 同一个话题所有的发布者和接收者必须使用相同消息接口。 2.1 ROS2话题指令 1.查看所有话题 ros2 topic list # 增加查看消息类型 ros2 topic list -t2.打印实时话题内容 ros2 topic echo topic_name 3.查看主题信息 ros2 topic info topic_name 2.2 话题之RCLPY实现 创建功能包 cd ROS_WS/colcon_ws/src ros2 pkg create imu_py --build-type ament_python --dependencies rclpy创建节点文件 cd ROS_WS/colcon_ws/src/imu_py touch imu_publisher.py touch imu_subscribe.py2.2.1 编写发布者 imu_publisher.py # -*- coding: utf-8 -*-1.查看映射端口 ls /dev/ttyUSB* 2.更改端口的权限 sudo chmod 777 /dev/ttyUSB0import rclpy from rclpy.node import Node # 话题接口 from sensor_msgs.msg import Imu # imu接口 # Usart Library import serial# imu接收数据类型 class IMUPublisher(Node):def __init__(self,name):super().__init__(name) # 继承父类初始化名称self.get_logger().info(大家好我是%s! % name)self.publisher_node self.create_publisher(Imu, imu_data, 1) # 创建发布imu数据的发布者到话题imu_data上# 串口初始化self.IMU_Usart serial.Serial(port/dev/ttyUSB0, # 串口baudrate115200, # 波特率timeout0.001 # 由于后续使用read_all按照一个timeout周期时间读取数据# imu在波特率115200返回数据时间大概是1ms,9600下大概是10ms# 所以读取时间设置0.001s)# 接收数据初始化self.ACC_X: float 0.0 # X轴加速度self.ACC_Y: float 0.0 # Y轴加速度self.ACC_Z: float 0.0 # Z轴加速度self.GYRO_X: float 0.0 # X轴陀螺仪self.GYRO_Y: float 0.0 # Y轴陀螺仪self.GYRO_Z: float 0.0 # Z轴陀螺仪self.roll: float 0.0 # 横滚角self.pitch: float 0.0 # 俯仰角self.yaw: float 0.0 # 航向角self.leve: float 0.0 # 磁场校准精度self.temp: float 0.0 # 器件温度self.MAG_X: float 0.0 # 磁场X轴self.MAG_Y: float 0.0 # 磁场Y轴self.MAG_Z: float 0.0 # 磁场Z轴self.Q0: float 0.0 # 四元数Q0.0self.Q1: float 0.0 # 四元数Q1self.Q2: float 0.0 # 四元数Q2self.Q3: float 0.0 # 四元数Q3# 判断串口是否打开成功if self.IMU_Usart.isOpen():print(open success)else:print(open failed)# 回调函数返回周期time_period 0.001self.timer self.create_timer(time_period, self.timer_callback)def timer_callback(self):定时器回调函数# ----读取IMU的内部数据-----------------------------------try:count self.IMU_Usart.inWaiting()if count 0:# 发布sensor_msgs/Imu 数据类型imu_data Imu()imu_data.header.frame_id mapimu_data.header.stamp self.get_clock().now().to_msg()imu_data.linear_acceleration.x self.ACC_Ximu_data.linear_acceleration.y self.ACC_Yimu_data.linear_acceleration.z self.ACC_Zimu_data.angular_velocity.x self.GYRO_X * 3.1415926 / 180.0 # unit transfer to rad/simu_data.angular_velocity.y self.GYRO_Y * 3.1415926 / 180.0imu_data.angular_velocity.z self.GYRO_Z * 3.1415926 / 180.0imu_data.orientation.x self.Q0imu_data.orientation.y self.Q1imu_data.orientation.z self.Q2imu_data.orientation.w self.Q3self.publisher_node.publish(imu_data) # 发布imu的数据self.get_logger().info(f发布了指令{imu_data.header.frame_id}) #打印一下发布的数据# --------------------------------------------------------# print(读取中)except KeyboardInterrupt:if serial ! None:print(close serial port)self.IMU_Usart.close()def main(argsNone):ros2运行该节点的入口函数编写ROS2节点的一般步骤1. 导入库文件2. 初始化客户端库3. 新建节点对象4. spin循环节点5. 关闭客户端库rclpy.init(argsargs) # 初始化rclpynode IMUPublisher(imu_publisher) # 新建一个节点rclpy.spin(node) # 保持节点运行检测是否收到退出指令CtrlCrclpy.shutdown() # 关闭rclpy2.2 2 编写订阅者 imu_subscribe.py # -*- coding: utf-8 -*- import rclpy from rclpy.node import Node # 话题接口 from sensor_msgs.msg import Imu # imu接口class IMUSubscribe(Node):def __init__(self,name):super().__init__(name)self.get_logger().info(大家好我是%s! % name)self.imu_subscribe_node self.create_subscription(Imu, imu_data,self.imu_callback, 1) # 创建发布imu数据的发布者到话题imu_data上def imu_callback(self, imu_data):self.get_logger().info(f收到[{imu_data.header.frame_id}]命令)def main(argsNone):rclpy.init(argsargs) # 初始化rclpynode IMUSubscribe(imu_subscribe) # 新建一个节点rclpy.spin(node) # 保持节点运行检测是否收到退出指令CtrlCrclpy.shutdown() # 关闭rclpy2.2.3 运行测试 修改下setup.py entry_points{console_scripts: [imu_publisherimu_py.imu_publisher:main, imu_subscribeimu_py.imu_subscribe:main,],},发布节点 colcon build --packages-select imu_py source install/setup.bash ros2 run imu_py imu_publisher订阅节点 source install/setup.bash ros2 run imu_py imu_subscribe可视化 rqt上图中的节点名称取决于下图 3 ROS2服务 服务分为客户端和服务端服务-客户端模型也可以称为请求-响应模型不同于话题是没有返回的适用于单向或大量的数据传递。而服务是双向的客户端发送请求服务端响应请求。 注意 同一个服务名称相同有且只能有一个节点来提供 同一个服务可以被多个客户端调用 3.1 ROS2服务指令 启动服务端 ros2 run examples_rclpy_minimal_service service 1.查看所有服务 ros2 service list2.手动调用服务 ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts {a: 5,b: 10}3.查看服务接口类型 ros2 service type service_name 4.查找使用某一接口的服务 ros2 service find example_interfaces/srv/AddTwoInts3.2 服务之RCLPY实现 创建节点文件 cd ROS_WS/colcon_ws/src/imu_py touch imu_client.py touch imu_server.py3.2.1 编写客户端 imu_client.py # -*- coding: utf-8 -*- import rclpy from rclpy.node import Node from example_interfaces.srv import AddTwoIntsclass ServiceClient(Node):def __init__(self,name):super().__init__(name)self.get_logger().info(节点已启动%s! % name)self.client_ self.create_client(AddTwoInts,add_two_ints_srv) def result_callback_(self, result_future):response result_future.result()self.get_logger().info(f收到返回结果{response.sum})def send_request(self, a, b):while rclpy.ok() and self.client_.wait_for_service(1)False:self.get_logger().info(f等待服务端上线....)request AddTwoInts.Request()request.a arequest.b bself.client_.call_async(request).add_done_callback(self.result_callback_)def main(argsNone):rclpy.init(argsargs) # 初始化rclpynode ServiceClient(service_client) # 新建一个节点# 调用函数发送请求node.send_request(3,4)rclpy.spin(node) # 保持节点运行检测是否收到退出指令CtrlCrclpy.shutdown() # 关闭rclpy3.2 2 编写服务端 imu_server.py # -*- coding: utf-8 -*- import rclpy from rclpy.node import Node # 导入接口 from example_interfaces.srv import AddTwoIntsclass ServiceServer(Node):def __init__(self,name):super().__init__(name)self.get_logger().info(节点已启动%s! % name)self.add_ints_server_ self.create_service(AddTwoInts,add_two_ints_srv, self.handle_add_two_ints) def handle_add_two_ints(self,request, response):self.get_logger().info(f收到请求计算{request.a} {request.b})response.sum request.a request.breturn responsedef main(argsNone):rclpy.init(argsargs) # 初始化rclpynode ServiceServer(service_server) # 新建一个节点rclpy.spin(node) # 保持节点运行检测是否收到退出指令CtrlCrclpy.shutdown() # 关闭rclpy3.2.3 运行测试 修改下setup.py entry_points{console_scripts: [imu_clientimu_py.imu_client:main, imu_serverimu_py.imu_server:main],},发布节点 colcon build --packages-select imu_py source install/setup.bash ros2 run imu_py imu_client订阅节点 source install/setup.bash ros2 run imu_py imu_server可视化 rqt
http://www.zqtcl.cn/news/666294/

相关文章:

  • 育才网站建设网站访问慢原因
  • 网站建设方案 备案品牌网站推广软件
  • 桓台县建设局网站前端开发入门培训
  • 前端怎么在猪八戒网站接单做烟台网站开发技术
  • 济南烨铭网站建设做英文网站2014
  • 哪个餐饮店微网站做的有特色3d动画制作收费标准
  • h5旅游网站开发wordpress的站点地址如何配置
  • 网站正在维护中 模板招远网站建设
  • 福田欧曼银河报价seo文章是什么
  • 古云网站建设模具培训网站建设
  • 帮助企业做网站的销售卫浴洁具公司网站模板
  • 解释seo网站推广网站域名和空间费用
  • 深圳市珠宝网站建设手机网站框架
  • 晋城推广型网站开发dw做网站模板
  • 万网一个ip建立多个网站网页设计注册页面代码
  • 网站建设6000元地方门户网站有哪些
  • 十大SEO网站外链建设误区排版设计教程入门初学者
  • 网站基本维护网站设计软件下载
  • 网站开发的需求文档大型网站外链是怎么建设的
  • 网站建设实训心得与建议网站建设一般需要多少费用
  • 国内怎么打开WordPress网站wordpress制作api文件路径
  • 义乌网站开发公司wordpress段子模板
  • 国外有没有专门做靶材的网站做网站用哪个电脑
  • 郑州网站制作郑州网站制作上海网站建设免费推荐
  • php电子商务网站开发建设企业网站都需要啥
  • 从零学做网站如何让客户做网站
  • 关于销售网站建设的短文菜单宣传网站怎么做
  • 学网站开发有前途吗淮南服装网站建设费用
  • 网站外包附近临时工500元一天
  • 国外做logo的网站深圳有哪些软件外包公司