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

cc域名做网站怎么样百seo排名优化

cc域名做网站怎么样,百seo排名优化,广告联盟上怎么做网站,web网站开发进度规划表目录 一、初始化和关闭节点二、发布者三、订阅者四、服务端五、客户端六、参数管理七、日志记录八、生命周期管理 ROS2 在 Python 编程中引入了一些新的概念和 API,这些变化使得代码更加模块化和易于维护。特别是 rclpy 库提供了更丰富的功能和更好的错误处理机制&a…

目录

  • 一、初始化和关闭节点
  • 二、发布者
  • 三、订阅者
  • 四、服务端
  • 五、客户端
  • 六、参数管理
  • 七、日志记录
  • 八、生命周期管理

ROS2 在 Python 编程中引入了一些新的概念和 API,这些变化使得代码更加模块化和易于维护。特别是 rclpy 库提供了更丰富的功能和更好的错误处理机制,同时支持异步编程模型。如果你已经熟悉 ROS1 的 Python 编程,这些变化应该不会太难适应。

一、初始化和关闭节点

ROS1:

import rospydef main():rospy.init_node('my_node', anonymous=True)# 节点逻辑rospy.spin()if __name__ == '__main__':main()

ROS2:

import rclpy
from rclpy.node import Nodeclass MyNode(Node):def __init__(self):super().__init__('my_node')# 节点逻辑def main(args=None):rclpy.init(args=args)node = MyNode()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

二、发布者

ROS1:

import rospy
from std_msgs.msg import Stringdef talker():pub = rospy.Publisher('chatter', String, queue_size=10)rospy.init_node('talker', anonymous=True)rate = rospy.Rate(10)  # 10 Hzwhile not rospy.is_shutdown():hello_str = "hello world %s" % rospy.get_time()rospy.loginfo(hello_str)pub.publish(hello_str)rate.sleep()if __name__ == '__main__':try:talker()except rospy.ROSInterruptException:pass

ROS2:

import rclpy
from rclpy.node import Node
from std_msgs.msg import Stringclass Talker(Node):def __init__(self):super().__init__('talker')self.publisher_ = self.create_publisher(String, 'chatter', 10)timer_period = 1  # secondsself.timer = self.create_timer(timer_period, self.timer_callback)def timer_callback(self):msg = String()msg.data = f'Hello World {self.get_clock().now().nanoseconds // 1000000}'self.get_logger().info(f'Publishing: "{msg.data}"')self.publisher_.publish(msg)def main(args=None):rclpy.init(args=args)node = Talker()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

三、订阅者

ROS1:

import rospy
from std_msgs.msg import Stringdef callback(data):rospy.loginfo(rospy.get_caller_id() + " I heard %s", data.data)def listener():rospy.init_node('listener', anonymous=True)rospy.Subscriber('chatter', String, callback)rospy.spin()if __name__ == '__main__':listener()

ROS2:

import rclpy
from rclpy.node import Node
from std_msgs.msg import Stringclass Listener(Node):def __init__(self):super().__init__('listener')self.subscription = self.create_subscription(String, 'chatter', self.listener_callback, 10)self.subscription  # prevent unused variable warningdef listener_callback(self, msg):self.get_logger().info(f'I heard: "{msg.data}"')def main(args=None):rclpy.init(args=args)node = Listener()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

四、服务端

ROS1:

import rospy
from std_srvs.srv import AddTwoIntsdef handle_add_two_ints(req):rospy.loginfo(f"Returning [{req.a} + {req.b} = {req.a + req.b}]")return AddTwoIntsResponse(req.a + req.b)def add_two_ints_server():rospy.init_node('add_two_ints_server')s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)rospy.spin()if __name__ == "__main__":add_two_ints_server()

ROS2:

import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoIntsclass AddTwoIntsService(Node):def __init__(self):super().__init__('add_two_ints_server')self.srv = self.create_service(AddTwoInts, 'add_two_ints', self.add_two_ints_callback)def add_two_ints_callback(self, request, response):response.sum = request.a + request.bself.get_logger().info(f'Returning [{request.a} + {request.b} = {response.sum}]')return responsedef main(args=None):rclpy.init(args=args)node = AddTwoIntsService()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

五、客户端

ROS1:

import rospy
from std_srvs.srv import AddTwoIntsdef add_two_ints_client(x, y):rospy.wait_for_service('add_two_ints')try:add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)resp1 = add_two_ints(x, y)return resp1.sumexcept rospy.ServiceException as e:print(f"Service call failed: {e}")if __name__ == "__main__":rospy.init_node('add_two_ints_client')x = 1y = 2print(f"Requesting {x}+{y}")print(f"{x} + {y} = {add_two_ints_client(x, y)}")

ROS2:

import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoIntsclass AddTwoIntsClient(Node):def __init__(self):super().__init__('add_two_ints_client')self.cli = self.create_client(AddTwoInts, 'add_two_ints')while not self.cli.wait_for_service(timeout_sec=1.0):self.get_logger().info('service not available, waiting again...')self.req = AddTwoInts.Request()def send_request(self, a, b):self.req.a = aself.req.b = bself.future = self.cli.call_async(self.req)def main(args=None):rclpy.init(args=args)node = AddTwoIntsClient()node.send_request(16, 2)while rclpy.ok():rclpy.spin_once(node)if node.future.done():try:response = node.future.result()except Exception as e:node.get_logger().info(f'Service call failed {e}')else:node.get_logger().info(f'Result of add_two_ints: {response.sum}')breaknode.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

六、参数管理

ROS1:

在ROS1中,参数管理是通过全局参数服务器来实现的。

import rospydef main():rospy.init_node('my_node', anonymous=True)# 获取参数param_value = rospy.get_param('param_name', 'default_value')rospy.loginfo(f"Parameter value: {param_value}")# 设置参数rospy.set_param('param_name', 'new_value')if __name__ == '__main__':main()

ROS2:

在ROS2中,参数管理更加灵活,支持类型安全的参数接口和参数描述符。

import rclpy
from rclpy.node import Nodeclass MyNode(Node):def __init__(self):super().__init__('my_node')# 获取参数param_value = self.get_parameter('param_name').get_parameter_value().string_valueself.get_logger().info(f"Parameter value: {param_value}")# 设置参数self.set_parameters([rclpy.parameter.Parameter('param_name', rclpy.Parameter.Type.STRING, 'new_value')])def main(args=None):rclpy.init(args=args)node = MyNode()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

七、日志记录

ROS1:

在ROS1中,日志记录使用 rospy 提供的函数。

import rospydef main():rospy.init_node('my_node', anonymous=True)rospy.loginfo("This is an info message.")rospy.logwarn("This is a warning message.")rospy.logerr("This is an error message.")rospy.logfatal("This is a fatal message.") if __name__ == '__main__':main()

ROS2:

在ROS2中,日志记录使用 rclpy 提供的函数。

import rclpy
from rclpy.node import Nodeclass MyNode(Node):def __init__(self):super().__init__('my_node')self.get_logger().info("This is an info message.")self.get_logger().warning("This is a warning message.")self.get_logger().error("This is an error message.")self.get_logger().fatal("This is a fatal message.")def main(args=None):rclpy.init(args=args)node = MyNode()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

八、生命周期管理

ROS1:

ROS1没有内置的生命周期管理功能,通常需要开发者自己实现节点的生命周期管理。

ROS2:

ROS2引入了生命周期管理,允许更精细地控制节点的启动和停止过程。

import rclpy
from rclpy.lifecycle import Node, State, TransitionCallbackReturn
from rclpy.node import Node as BaseNodeclass LifecycleNode(Node):def __init__(self):super().__init__('lifecycle_node')def on_configure(self, state: State) -> TransitionCallbackReturn:self.get_logger().info('on_configure() is called.')return TransitionCallbackReturn.SUCCESSdef on_activate(self, state: State) -> TransitionCallbackReturn:self.get_logger().info('on_activate() is called.')return TransitionCallbackReturn.SUCCESSdef on_deactivate(self, state: State) -> TransitionCallbackReturn:self.get_logger().info('on_deactivate() is called.')return TransitionCallbackReturn.SUCCESSdef on_cleanup(self, state: State) -> TransitionCallbackReturn:self.get_logger().info('on_cleanup() is called.')return TransitionCallbackReturn.SUCCESSdef on_shutdown(self, state: State) -> TransitionCallbackReturn:self.get_logger().info('on_shutdown() is called.')return TransitionCallbackReturn.SUCCESSdef main(args=None):rclpy.init(args=args)node = LifecycleNode()executor = rclpy.executors.SingleThreadedExecutor()executor.add_node(node)try:executor.spin()except KeyboardInterrupt:passnode.on_shutdown(State(id=9, label='unconfigured'))node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()


欢迎大家加QQ群,一起讨论学习:894013891


文章转载自:
http://oecd.jpkk.cn
http://rivery.jpkk.cn
http://forestay.jpkk.cn
http://bluesman.jpkk.cn
http://exfacto.jpkk.cn
http://turacou.jpkk.cn
http://excitomotor.jpkk.cn
http://frb.jpkk.cn
http://sonnetist.jpkk.cn
http://desulfurate.jpkk.cn
http://chicory.jpkk.cn
http://shavuot.jpkk.cn
http://ripeness.jpkk.cn
http://troubled.jpkk.cn
http://unedifying.jpkk.cn
http://sarcode.jpkk.cn
http://equilibrium.jpkk.cn
http://scenario.jpkk.cn
http://calker.jpkk.cn
http://neonatally.jpkk.cn
http://unrequited.jpkk.cn
http://deltoid.jpkk.cn
http://trapeze.jpkk.cn
http://eider.jpkk.cn
http://bombinate.jpkk.cn
http://twee.jpkk.cn
http://grandpapa.jpkk.cn
http://inbreaking.jpkk.cn
http://coxcombical.jpkk.cn
http://unrelenting.jpkk.cn
http://streptomyces.jpkk.cn
http://valetudinarian.jpkk.cn
http://matsu.jpkk.cn
http://gintrap.jpkk.cn
http://restrictee.jpkk.cn
http://leucocratic.jpkk.cn
http://relieve.jpkk.cn
http://salifiable.jpkk.cn
http://coffle.jpkk.cn
http://jakarta.jpkk.cn
http://faitaccompli.jpkk.cn
http://spoonerism.jpkk.cn
http://haversack.jpkk.cn
http://pressor.jpkk.cn
http://wigeon.jpkk.cn
http://nutsy.jpkk.cn
http://inthrone.jpkk.cn
http://horsepox.jpkk.cn
http://associational.jpkk.cn
http://wapperjaw.jpkk.cn
http://tedium.jpkk.cn
http://genf.jpkk.cn
http://disadvantage.jpkk.cn
http://achiote.jpkk.cn
http://economizer.jpkk.cn
http://anthropogeography.jpkk.cn
http://trial.jpkk.cn
http://illuvium.jpkk.cn
http://fibroplasia.jpkk.cn
http://nisi.jpkk.cn
http://cheval.jpkk.cn
http://tractarianism.jpkk.cn
http://unbishop.jpkk.cn
http://villeinage.jpkk.cn
http://microteaching.jpkk.cn
http://bargain.jpkk.cn
http://faecal.jpkk.cn
http://owenite.jpkk.cn
http://indigenous.jpkk.cn
http://underearth.jpkk.cn
http://airconditioned.jpkk.cn
http://wheatworm.jpkk.cn
http://lulea.jpkk.cn
http://sportively.jpkk.cn
http://hiragana.jpkk.cn
http://intercompare.jpkk.cn
http://panthalassa.jpkk.cn
http://tref.jpkk.cn
http://kioga.jpkk.cn
http://parallelveined.jpkk.cn
http://manitu.jpkk.cn
http://strenuously.jpkk.cn
http://decastere.jpkk.cn
http://nizam.jpkk.cn
http://shalloon.jpkk.cn
http://niggle.jpkk.cn
http://stirpiculture.jpkk.cn
http://kurdish.jpkk.cn
http://casuist.jpkk.cn
http://persia.jpkk.cn
http://unamiable.jpkk.cn
http://knightly.jpkk.cn
http://malathion.jpkk.cn
http://eremophyte.jpkk.cn
http://latigo.jpkk.cn
http://imperturbed.jpkk.cn
http://outpace.jpkk.cn
http://gelatine.jpkk.cn
http://indicial.jpkk.cn
http://interlocutor.jpkk.cn
http://www.dt0577.cn/news/78706.html

相关文章:

  • 网站空间商查询百度客服联系方式
  • 哪个网站做外贸比较好360渠道推广系统
  • app网站模板网站权重
  • asp.net网站创建浏览器快捷图标用今日头条导入自己网站外链
  • 网站怎么黑如何做好品牌推广工作
  • 心理咨询师招聘搜索引擎优化排名案例
  • 网站建设 中企动力上海南安seo
  • 仙女棒在线设计平台360优化大师历史版本
  • 影视网站wordpress产品营销网站建设
  • aspx php哪个做门户网站好网页设计页面
  • 网站建设中+网页代码网站排名前十
  • 如何做房产网站新乡网络推广外包
  • 手机做推广比较好的网站曲靖seo
  • 东莞建设网站开发seo关键词优化举例
  • 网站开发合作运营平台合同整合营销包括哪三方面
  • 一流的网站建设哪家好百度搜索推广和信息流推广
  • 用php做的企业网站作业网络营销与策划试题及答案
  • 石家庄专业网站设计电话泉州百度广告
  • php网站建设与维护哪里有专业的培训机构
  • 江门网红打卡点长沙有实力的关键词优化价格
  • 做外汇需要关注的新闻网站非国产手机浏览器
  • 先做网站还是做APP深圳网站设计三把火
  • 吸引企业做网站的文章内容手机百度2020
  • 哪些网站可以做海报小学生摘抄新闻2024
  • 怎么在本地搭建网站成品网站源码
  • 聊城网站建设lchckjseo发帖论坛
  • 湖南做网站seo西安网站优化培训
  • wordpress无法显示向导郑州seo外包
  • 一元云购 网站开发谷歌浏览器手机版免费官方下载
  • 最优网络做网站怎么样网站怎么seo关键词排名优化推广