- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对ROS2中rclcpp的CallbackGroups有疑问。我正在尝试让rclcpp::TimerBase以指定的更新速率运行更新周期,同时该节点应侦听订阅中的传入消息。据我所知,这样做的方法是将MultiThreadExceutor与CallbackGroups一起使用。因此,我创建了一个可重入类型CallbackGroup,在其中添加了计时器和订阅。但是,一旦将计时器添加到CallbackGroup,计时器就会停止工作。也许我忘记了什么? CallbackGroups或Node是否需要在指定的上下文中?还是我完全误解了CallbackGroups的概念?会很高兴收到您的任何帮助!
到目前为止,我尝试过的操作:SingleThreadExecutor出现了相同的问题,删除CallbackGroup则显示了预期的行为,计时器正在运行,并且调用了update()。试图找出问题所在,并发现它是在MTE的run(...)方法期间,在wait_for_work()的父类(rclcpp::executor::Executor)的get_next_executable(:: :)中进行的。 ...)执行器在447-448行中的功能:
rcl_ret_t status = rcl_wait(&wait_set_, std::chrono::duration_cast<std::chrono::nanoseconds>(timeout).count());
memory_strategy_->number_of_ready_timers()
#ifndef CONTROLLER_NODE_H
#define CONTROLLER_NODE_H
#include "rclcpp/rclcpp.hpp"
#include "controller_node_test/multi_threaded_executor.hpp"
#include "chrono"
#include <ctime>
using std::placeholders::_1;
namespace controller_node
{
class ControllerNode : public rclcpp::Node {
public:
ControllerNode();
~ControllerNode();
private:
rclcpp::TimerBase::SharedPtr update_timer_;
void update();
};
} // namespace controller_node
#include "controller_node_test/controller_node_test.h"
namespace controller_node
{
ControllerNode::ControllerNode() : rclcpp::Node("controller_node"){
rclcpp::callback_group::CallbackGroup::SharedPtr update_group = this->create_callback_group(rclcpp::callback_group::CallbackGroupType::Reentrant);
update_timer_ = this->create_wall_timer(
std::chrono::milliseconds(100),
std::bind(&ControllerNode::update, this),
update_group);
}
ControllerNode::~ControllerNode(){
}
void ControllerNode::update(){
std::cout << "Timer: " << std::this_thread::get_id() << std::endl;
}
} // namespace controller_node
int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
rclcpp::executors::MultiThreadedExecutor exec;
auto controller_node = std::make_shared<controller_node::ControllerNode>();
exec.add_node(controller_node);
exec.spin();
rclcpp::shutdown();
return 0;
}
std::cout << "Timer: " << std::this_thread::get_id() << std::endl;
最佳答案
您已正确了解如何使用CallbackGroups。
您发布的示例不起作用的原因:在ControllerNode构造函数中,声明一个局部变量rclcpp::callback_group::CallbackGroup::SharedPtr cbg
当构造函数返回时,指针的引用计数变为0,并且CallbackGroup
被销毁。您需要保留对CallbackGroup的引用,您的示例应该可以使用。
例如
class ControllerNode : public rclcpp::Node {
public:
ControllerNode() : rclcpp::Node("controller_node") {
cbg_ = create_callback_group(rclcpp::callback_group::CallbackGroupType::Reentrant);
update_timer_ = create_wall_timer(
100ms, std::bind(&ControllerNode::update, this), cbg_);
}
private:
rclcpp::TimerBase::SharedPtr update_timer_;
rclcpp::callback_group::CallbackGroup::SharedPtr cbg_;
void update() {
std::cout << "Timer: " << std::this_thread::get_id() << std::endl;
}
};
关于c++ - 包括CallbackGroups后ROS通信未响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57893546/
我正在实现一个基于 ROS 的机器人系统。我有不同的节点,每秒发送多次数据。但是,我不需要那个。我只想在机器人处于新位置时发送它的状态。您建议使用哪种 ROS 技术? 最佳答案 根据您的要求,您可以使
我希望我的 ROS 包中的特定节点在 DEBUG 详细级别显示输出,而其他节点在 INFO 级别显示。我知道 rosconsole configuration file ,并且能够为包设置详细程度:
我正在使用 ros indigo。当我做映射然后通过以下方式保存它: map_server map_server -f 'location' 它给了我一个警告... Using deprecated
我正在使用 ros indigo。当我做映射然后通过以下方式保存它: map_server map_server -f 'location' 它给了我一个警告... Using deprecated
我有一个用 Python 编写的 ROS 节点,它捕获消息并将它们写入磁盘(例如使用 pickle)。我想稍后在 ROS 之外的另一个 Python 脚本中使用这些文件,但我需要导入消息类。 这可能吗
ROS 和网络新手。在这里需要一些帮助来理解我应该采取的最佳方法。我正在尝试将 Ros 消息从 ROS PC 发送到另一台非 ROS PC。我研究了几种方法可以做到这一点。 在非 ROS 机器上安装
我可以在ROS的catkin工作区中编译安装ROS包。如何将 catkin 工作区中的包导出到 .deb 文件,以便我可以在其他机器上安装和使用它? 我的 ROS 版本是 ROS Indigo,操作系
我一直在尝试安装 ROS 旋律。我需要它来运行一些启动文件。目前,当我通过运行以下命令检查 ros 版本(在运行 Ubuntu 20.04 的树莓派 4 上)时: rosversion -d 它输出:
我正在尝试使用以下公式将 Twist 转换为左右轮的速度: float speed_wish_right = (cmd_vel.angle*WHEEL_DIST)/2 + cmd_vel.speed;
我已经在 Ubuntu 18.04 上安装了带有 ROS melodic 的 Gazebo 9。我不断遇到以下问题: 启动 Gazebo 向世界添加一些对象 文件 -> 另存为... 程序卡住,保存窗
我使用什么程序来使用 ROS 框架进行编程,我可以使用 Visual Studio 吗? 我是 ROS 的新手,任何教程或教程程序将不胜感激。 谢谢。 最佳答案 用于 ROS 开发的最常见 IDE 是
我的问题是如何将一个值从一个订阅者的回调函数传递给另一个订阅者。 这有意义吗? import rospy from sensor_msgs.msg import LaserScan, Int32 fr
我正在关注有关如何创建 ROS 自定义消息的“WS Newman”教程。编译时出现以下错误“消息/服务'example_msg/Num'的依赖关系已更改。请重新运行cmake” Num.msg 有 H
我想在catkin工作区之外创建一个ROS发布者节点。可以创建吗? 最佳答案 当然可以。像对待任何其他 cpp 库或 python 包一样对待 ROS。 在Python中,你必须保持PYTHONPAT
PointCloud2的内容在ROS中是什么意思? fields.offset? fields.datatype? fields.count? point_step? row_step? 它的 d
PointCloud2的内容在ROS中是什么意思? fields.offset? fields.datatype? fields.count? point_step? row_step? 它的 d
我实现了一个依赖于其他包的ros包。 这些包依赖于更多的包等等...... 在我的包中构建和运行节点时,如何找出实际使用了哪些包? (除了手动查看所有 package.xml 文件,因为有多种情况,其
我正在做一个关于 ROS 的类(class)项目,并且被困在相当简单的任务上。 我的机器人模型有一个激光扫描仪,我在凉亭中使用我的机器人模型生成了一个包文件 我被要求像在 SLAM 中一样生成占用网格
在做 roslaunch .launch 时我希望在该文件中启动的所有节点仅在它们尚未运行时启动。我该怎么做呢?如果不可能,是否至少可以为每个节点单独执行此操作?如果有人有想法,那么如果您将该代码添
有没有办法获得从Realsense获得的点云中的点到深度图中的像素的映射?点云是从深度图中获得的,但是没有有效深度数据的像素被排除在外。 Realsense API 仅提供将点映射到 RGB 像素的例
我是一名优秀的程序员,十分优秀!