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

做个网站网站需要多少钱wordpress支持国内视频的编辑器

做个网站网站需要多少钱,wordpress支持国内视频的编辑器,深圳网站建设大概多少钱,昆明云南微网站制作目录 0 专栏介绍1 服务通信模型2 服务模型实现(C)3 服务模型实现(Python)4 自定义服务5 话题、服务通信的异同 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。…

目录

  • 0 专栏介绍
  • 1 服务通信模型
  • 2 服务模型实现(C++)
  • 3 服务模型实现(Python)
  • 4 自定义服务
  • 5 话题、服务通信的异同

0 专栏介绍

本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。

🚀详情:《ROS2从入门到精通》


1 服务通信模型

服务是 ROS 图中节点之间的另一种通信方法。服务基于服务器-客户端模型,不同于话题的发布者-订阅者模型。话题允许节点订阅数据流并获取持续更新,而服务只在客户端特别调用时才提供数据。二者更详细的对比请参考第5节

在这里插入图片描述

在这里插入图片描述

2 服务模型实现(C++)

实验目标:客户端提交请求给turtlesim功能包的/spawn服务,在界面上生成新的乌龟。

  • 服务器

    本实验中无需编程,为turtlesim::Spawn定义的/spwan服务

  • 客户端

    void OnResultCallBack(rclcpp::Client<turtlesim::srv::Spawn>::SharedFuture result) {auto response = result.get();RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "Request service successfully! [turtle id: %s]", response->name.c_str());
    }void request() {auto spawn = std::make_shared<turtlesim::srv::Spawn::Request>();          spawn->name = "winter_turtle";spawn->x = 1.0;spawn->y = 1.0;spawn->theta = 1.57;while (!client_->wait_for_service(std::chrono::seconds(1))) {                                                   if (!rclcpp::ok()) {RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "Interrupted while waiting for the service. Exiting.");return;}RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "service not available, waiting again...");}auto result = client_->async_send_request(spawn, std::bind(&ClientNode::OnResultCallBack, this, std::placeholders::_1));
    }
    

服务通信的效果如下所示:

在这里插入图片描述

3 服务模型实现(Python)

实验目标:客户端提交请求给turtlesim功能包的/spawn服务,在界面上生成新的乌龟。

  • 服务器

    本实验中无需编程,为turtlesim::Spawn定义的/spwan服务

  • 客户端

    class ClientNode(Node):def __init__(self, name):super().__init__(name)self.client = self.create_client(Spawn, '/spawn') while not self.client.wait_for_service(timeout_sec=1.0):self.get_logger().info('service not available, waiting again...') self.request = Spawn.Request()def sendRequest(self):self.request.name = "winter_turtle"self.request.x = 1.0self.request.y = 1.0self.request.theta = 1.57self.future = self.client.call_async(self.request)
    

服务通信的效果如下所示:

在这里插入图片描述

4 自定义服务

自定义服务的通用流程如下:

  • 功能包下新建srv文件夹,在其中添加自定义服务xxx.srv,注意请求和响应数据结构使用---分割
  • 功能包package.xml中添加编译依赖与执行依赖
    <buildtool_depend>rosidl_default_generators</buildtool_depend>
    <exec_depend>rosidl_default_runtime</exec_depend>
    <member_of_group>rosidl_interface_packages</member_of_group>
    
  • 功能包CMakeLists.txt中添加编译消息相关依赖
    find_package(rosidl_default_generators REQUIRED)
    rosidl_generate_interfaces(${PROJECT_NAME}"xxx.srv"DEPENDENCIES xxx_srvs
    )ament_export_dependencies(rosidl_default_runtime)
    
  • 编译自定义消息,在install/<pkg_name>/include中生成由xxx.srv编译的C++可识别的xxx.hpp头文件
  • 引入xxx.hpp即可调用自定义服务

下面给出一个实例

添加如下自定义服务实现一个加法服务,并按上面步骤配置依赖

# client
int32 a
int32 b
---
# server
int32 sum

定义一个服务器、一个客户端,限于篇幅只贴出部分代码,完整代码见文末。

  • 服务器
    class ServerNode : public rclcpp::Node
    {public:ServerNode() : Node("lab_srv_server_own") {server_ = create_service<own_srv_lab::srv::Add>("/add_service",std::bind(&ServerNode::OnAddSrvCallBack, this, std::placeholders::_1, std::placeholders::_2)); }private:rclcpp::Service<own_srv_lab::srv::Add>::SharedPtr server_;void OnAddSrvCallBack(const std::shared_ptr<own_srv_lab::srv::Add::Request> request, std::shared_ptr<own_srv_lab::srv::Add::Response> response) {response->sum = request->a + request->b;RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "Incoming request\na: %d" " b: %d", request->a, request->b);RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "sending back response: [%d]", response->sum);}
    };
    
  • 客户端
    ClientNode() : Node("lab_srv_client_own") {client_ = create_client<own_srv_lab::srv::Add>("/add_service"); 
    }void request(int a, int b) {auto add_srv = std::make_shared<own_srv_lab::srv::Add::Request>();add_srv->a = a;          add_srv->b = b;while (!client_->wait_for_service(std::chrono::seconds(1))) {                                                   if (!rclcpp::ok()) {RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "Interrupted while waiting for the service. Exiting.");return;}RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "service not available, waiting again...");}auto result = client_->async_send_request(add_srv, std::bind(&ClientNode::OnResultCallBack, this, std::placeholders::_1));
    }
    

服务通信效果如下所示:

在这里插入图片描述

5 话题、服务通信的异同

对比话题服务
通信模式发布-订阅请求-响应
同步性异步同步
缓冲区
实时性
节点关系多对多一对多(1个server对应一个服务)
通信格式.msg.srv
使用场景连续高频的数据传输,例如激光雷达、里程计传输数据偶尔调用的功能,例如图像识别

完整代码通过下方博主名片联系获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇
http://www.yayakq.cn/news/992900/

相关文章:

  • 织梦网站空间如何清理网站规范建设情况
  • 普洱网站建设优化中建八局一公司官网
  • 淘宝做网站的合肥做网站推荐 晨飞网络
  • 四川瑞通工程建设有限公司网站wordpress 动态文字
  • 虚拟主机怎么发布网站吗wordpress悬浮导航栏
  • 面试学校网站开发做网站每天更新两篇文章
  • 网站建设.龙兵盐城网站建设推广
  • 项目网站建设业务分析建筑工程施工招聘信息
  • 网站建设图片改不了手机端做的优秀的网站设计
  • 百度打网站名称就显示 如何做seo优化排名软件
  • 南通网站建设空间专业建设网站
  • 做防水网站百度搜索网址大全
  • 网上服装商城网站建设方案策划网站建设与管理专业就业方向
  • cms做淘宝客网站辽宁建设工程信息网官方网站
  • 网站都是h5响应式公司网站html模板
  • 知名企业网站例子wordpress 目录404
  • 建设部职业资格注册网站网站上传视频教程
  • 学风建设网站洛阳有做网站开发的吗
  • 建设模板网站报价常用网站开发语言优缺点
  • 网站商城建设合同免费下载js 下载服务器wordpress
  • 基于企业网站的网络营销方法wordpress 近期评论
  • 2022腾讯云网站建设方案书公众号投票怎么制作
  • 雄安新区网站建设网站分几个类型
  • 网址导航2345关键词优化公司网站
  • 免费制作购物网站整站优化和关键词优化的区别
  • 网站源码提取支付宝网站支付接口
  • 下沙开发区建设局网站杭州建设局网站首页 柳
  • 杭州网站定制开发哪家好做网站应怎么缴税
  • 网站空间不足网站单页在线
  • 化妆品行业网站开发聊城专业网站建设