当前位置:   article > 正文

鱼香ros学习:服务之RCLCPP实现 笔记整理_ros中 placeholder是什么意思

ros中 placeholder是什么意思

前言

这段教程看了很久,中间也看自闭了很多次。究其原因还是很多之前不会的C语言的知识点,以及部分没看懂的地方(也可能是自己基础原因没看懂)

补充知识点

1、共享指针

shared_ptr
说实话这玩意现在也没太搞明白,大概他就是一个类型的东西吧。

2、日志记录函数RCLCPP_INFO等

我是把这个东西理解成函数的。

 RCLCPP_INFO(this->get_logger(), "节点已启动:%s.", name.c_str());
  • 1

RCLCPP_INFO
RCLCPP_ERROR
等函数,他们是一个通知函数,类似printf,将信息输出。而这些函数在类中时,第一个参数需要是this->get_logger()

参考了这篇文章

3、bind函数

这个东西是与回调函数一块用的。小鱼说回调函数可以看基础篇,但我实在没找到讲基础篇讲“回调函数”的地方在哪。。
但是在搜索placeholder(占位符)的资料时,终于有了点理解。
资料在此
bind绑定类成员函数时,第二个参数必须是this

代码分析

主要分析一些我费好大劲看明白的。。。

class ServiceServer01 : public rclcpp::Node {
public:
  ServiceServer01(std::string name) : Node(name) {
    RCLCPP_INFO(this->get_logger(), "节点已启动:%s.", name.c_str());
    // 创建服务
    add_ints_server_ =
      this->create_service<example_interfaces::srv::AddTwoInts>(
        "add_two_ints_srv",
        std::bind(&ServiceServer01::handle_add_two_ints, this,
                  std::placeholders::_1, std::placeholders::_2));
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

看这个add_ints_server,等于了一连串的东西,也就是这个语句创造了服务。所以应该可以看成这个“服务”是寄托在add_ints_server这个“变量”上的。(如果把此变量删了,服务就无了可能?)

private:
  // 声明一个服务
  rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtr
    add_ints_server_;

// 收到请求的处理函数
  void handle_add_two_ints(
    const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request,
    std::shared_ptr<example_interfaces::srv::AddTwoInts::Response> response) {
    RCLCPP_INFO(this->get_logger(), "收到a: %ld b: %ld", request->a,
                request->b);
    response->sum = request->a + request->b;
  };
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

感想

感觉很多地方小鱼也没特别细致地讲,需要不间断地自己查找资料,也需要根据代码自己理解一下。
最近赶进度赶得也有点急,这时候遇到看不懂的地方反而会更烦躁。哎,戒骄戒躁,求稳,保持好心态,加油!

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/727232
推荐阅读
相关标签
  

闽ICP备14008679号