赞
踩
1、多线程执行器
2、回调组
执行器回调时线程产生
:
收到请求后,单独开一个线程来处理。
// 声明回调组
rclcpp::CallbackGroup::SharedPtr callback_group_service_;
// 实例化回调组,类型为:互斥的
callback_group_service_ = this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);
// 声明占位符
using std::placeholders::_1;
using std::placeholders::_2;
// 声明服务端
// 声明一个服务端
rclcpp::Service<village_interfaces::srv::SellNovel>::SharedPtr server_;
// 实例化卖二手书的服务
server_ = this->create_service<village_interfaces::srv::SellNovel>("sell_novel",
std::bind(&SingleDogNode::sell_book_callback,this,_1,_2),
rmw_qos_profile_services_default,
callback_group_service_);
callback_group_service_
回调组,前面创建回调组是在这里使用的,告诉ROS2的执行器,当你要调用回调函数处理请求时,请把它放到单独线程的回调组中。
将单线程执行器换为多线程执行器
auto node = std::make_shared<SingleDogNode>("wang2");
/* 运行节点,并检测退出信号*/
rclcpp::executors::MultiThreadedExecutor exector;
exector.add_node(node);
exector.spin();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。