鱼香ros学习:服务之RCLCPP实现 笔记整理

前言

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

补充知识点

1、共享指针

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

2、日志记录函数RCLCPP_INFO等

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

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

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));
  }

看这个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;
  };
};

感想

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值