赞
踩
这段教程看了很久,中间也看自闭了很多次。究其原因还是很多之前不会的C语言的知识点,以及部分没看懂的地方(也可能是自己基础原因没看懂)
shared_ptr
说实话这玩意现在也没太搞明白,大概他就是一个类型的东西吧。
我是把这个东西理解成函数的。
RCLCPP_INFO(this->get_logger(), "节点已启动:%s.", name.c_str());
RCLCPP_INFO
RCLCPP_ERROR
等函数,他们是一个通知函数,类似printf,将信息输出。而这些函数在类中时,第一个参数需要是this->get_logger()
参考了这篇文章
这个东西是与回调函数一块用的。小鱼说回调函数可以看基础篇,但我实在没找到讲基础篇讲“回调函数”的地方在哪。。
但是在搜索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;
};
};
感觉很多地方小鱼也没特别细致地讲,需要不间断地自己查找资料,也需要根据代码自己理解一下。
最近赶进度赶得也有点急,这时候遇到看不懂的地方反而会更烦躁。哎,戒骄戒躁,求稳,保持好心态,加油!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。