当前位置:   article > 正文

ROS2的多线程_ros2 创建额外的线程

ros2 创建额外的线程

条件

1、多线程执行器
2、回调组

执行器回调时线程产生

实例化时被使用
回调组
服务端
在执行器里面运行
服务端
多线程

收到请求后,单独开一个线程来处理。

回调组

// 声明回调组
rclcpp::CallbackGroup::SharedPtr callback_group_service_;
// 实例化回调组,类型为:互斥的
callback_group_service_ = this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);
  • 1
  • 2
  • 3
  • 4

服务端

// 声明占位符
using std::placeholders::_1;
using std::placeholders::_2;
// 声明服务端
// 声明一个服务端
rclcpp::Service<village_interfaces::srv::SellNovel>::SharedPtr server_;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
// 实例化卖二手书的服务
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_);
  • 1
  • 2
  • 3
  • 4
  • 5

callback_group_service_回调组,前面创建回调组是在这里使用的,告诉ROS2的执行器,当你要调用回调函数处理请求时,请把它放到单独线程的回调组中。

执行器

将单线程执行器换为多线程执行器

auto node = std::make_shared<SingleDogNode>("wang2");
/* 运行节点,并检测退出信号*/
rclcpp::executors::MultiThreadedExecutor exector;
exector.add_node(node);
exector.spin();
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/797828
推荐阅读
相关标签
  

闽ICP备14008679号