问题标签 [ros2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
914 浏览

python - 使用启动文件动态设置 ROS2 参数?

有一堆资源描述了使用启动文件在节点启动时设置参数。(如何在 ROS2 中使用参数启动节点?

但是,这不会触发动态重新配置回调:set_on_parameters_set_callback。有没有办法在触发此回调的节点上的启动文件中指定操作?

相当于运行一个ros2 param set ...命令(这将触发回调)

0 投票
1 回答
436 浏览

c++ - 包含 CallbackGroups 后 ROS 通信没有响应

我有一个关于 ROS2 中 rclcpp 的 CallbackGroups 的问题。我正在尝试让 rclcpp::TimerBase 以指定的更新速率运行更新周期,同时节点应侦听订阅中的传入消息。据我了解,这样做的方法是将 MultiThreadExceutor 与 CallbackGroups 一起使用。因此,我创建了一个可重入类型 CallbackGroup,我在其中添加了计时器和订阅。但是,一旦我将计时器添加到 CallbackGroup,计时器就会停止工作。也许我忘记了什么?CallbackGroups 或 Node 是否需要在指定的上下文中?还是我完全误解了 CallbackGroups 的概念?很高兴得到您的任何帮助!

到目前为止我尝试了什么:SingleThreadExecutor 显示了同样的问题,删除 CallbackGroup 显示了预期的行为,计时器正在运行并调用了 update()。试图隔离问题并发现,它是在 MTE 的 run(...) 方法期间,在 wait_for_work( ...) 第 447-448 行中 Executor 的功能:

如果我放弃

在 MultiThreadedExecutor 中它向我显示 1,所以计时器似乎已注册,对吧?

头文件:controller_node_test/controller_node_test.h:

源文件:controller_node_test.cpp

问题是,那

永远不会被调用,所以计时器根本不工作。

我删除了代码中所有不必要的部分,以使您更清楚,所以如果它没有编译,请告诉我。非常感谢任何帮助!我只是不明白那里到底发生了什么,现在我需要你的帮助......谢谢!

0 投票
0 回答
156 浏览

c++ - 如何使用 Fast-RTPS 大数组消息发送(大于 10 MB)

我正在尝试使用 Fast-Rtps 发送和接收大消息。我采用了 HelloworldExample 代码并更改了它的 idl 消息(我添加了一个不同大小的 char 数组)我设法发送的最大大小是 8370000。

我已经找到并将这一行添加到 init() 方法中: Wparam.qos.m_publishMode.kind = ASYNCHRONOUS_PUBLISH_MODE; 它有帮助,但我仍然停留在 8MB

将消息更改为:

我得到:分段错误(核心转储)

0 投票
1 回答
50 浏览

c++ - 如何正确初始化事件

我是一名学生,目前正在试验 ROS 2 中的 QoS 设置。我正在尝试实现 (RMW_EVENT_REQUESTED_DEADLINE_MISSED) 事件。

首先我声明订阅和事件:

之后我尝试初始化事件:

但我得到一个错误(没有匹配函数调用'rmw_subscription_event_init')

该程序建议我将订阅和事件声明更改为:

但随后我收到以下错误(标量初始化程序中的多余元素)。

我该如何解决这个问题,这两种情况中哪一种是最好的?或者有没有完全其他的方式来创建这个事件?

提前致谢 !

0 投票
1 回答
381 浏览

c++ - 如何正确实现ROS2架构(rclcpp、rcl、rmw)

我是 ROS2 和 C++ 的初学者,我可以使用一些帮助来理解 ROS 2 的架构是如何工作的。我想在一个简单的聊天程序中实现一个 QoS 事件,并且根据我的基本知识,我可以制作以下图表:

CODE (publisher.cpp) ==> RCLCPP(qos_event.cpp) 这包括 (qos_event.hpp) ==> RCL (event.c) 这包括 (event.h) ==> RMW (event.c) 这包括 ( event.h) ==> DDS

我有以下问题:

  1. 如果我理解正确,头文件被用作某种库。因此,如果您将它们包含在您的程序中,您就可以使用您想要的所有功能。这意味着我不需要在我的程序中使用此代码,但我只需要实现这些功能?以下文件:qos_event.cpp / rcl event.c / rmw event.c 是我可以在自己的程序中使用的代码示例吗?

  2. 服务质量 (QoS) 设置在 Ros 中间件 (rmw) 中声明。如果我想使用其中一个事件,我可以直接使用 rmw/event.h 头文件,还是需要尊重架构,是否只能在程序中实现 rclcpp 代码?

0 投票
1 回答
187 浏览

c++ - Destructor of shared_ptr Object never called

I create an object in a main function as a std::shared_ptr object and want to save some information of it in its destructor. However I found out, that the destructor of the object is never called. Can I manually ensure, that the destructor is called? And does anybody know, why the destructor is never called? Does this has something to do with ros2?

Here some code: main.cpp:

And q_learner_node.cpp:

and q_learner_node.h:

Or is it a problem of base-class / child-class?

EDIT:

I did not know this, so google gave me a hint just now:

I'm using "Ctrl+C" To exit the process in terminal. However rclcpp should provide a signal_handler to handle those signals. This does not seem to work for me. I'm still seaarching, but any hints would be great. I found this github issue from 2018, but it should not make problems in my code (I think/ hope).

0 投票
0 回答
1744 浏览

boost - 尝试在 ros 2、windows 10 上编译 cv_bridge 包时出现“找不到 Boost(缺少:python)(找到版本 1.58.0)”

我一直在尝试在 Windows 上编译包 cv_bridge, Ros 2 dashing(不是我的选择)。起初我有一个错误指出boost lib不存在,所以我boost-msvc-12通过安装choco,现在找到了一个版本但没有python包。尝试colcon build在我的工作区上运行时的输出是:

cv_bridge 的引用 boost 的 cmakeLists.txt 代码看起来像这样(大部分注释的东西来自我已经尝试过的东西):

到目前为止,我已经尝试过:

  • 通过 choco (1.67.0) 安装另一个版本的 Boost,但我无法让 cmake 识别它。
  • 在 cmakelists.txt 文件中或作为环境变量手动设置 BOOST_ROOT。

请帮忙,我还没有找到任何关于这方面的信息,我怀疑你不能在 Windows 上运行 cv_bridge

0 投票
0 回答
519 浏览

python-3.6 - ros2 rclpy.spin_once() 在线程中产生“生成已经执行”异常


我的项目中有一个要求,我在其中创建 ros2 节点(使用 rclpy)我必须创建订阅特定主题的发布者和订阅者,但我必须根据收到的 msg 将 msg 发布到主题在回调中。
我需要在项目的其他部分使用上述对象。
由于 rclpy.spin() 将阻止我试图在线程中运行它的进程,但我得到“生成器已经在执行”运行时异常。
你能告诉我如何解决这个问题或者我的用例的替代解决方案是什么

0 投票
1 回答
1262 浏览

macos - 在 OS X 上安装 ROS2 - 错误:没有名为“rclpy._rclpy”的模块

我正在尝试在 Mac 中安装 ros2 env。我为它创建了一个 conda env。

我已经安装conda install -c anaconda sphinxconda install -c conda-forge sphinx-autodoc-typehints.

运行时出现错误ros2 run demo_nodes_cpp talker

任何想法?先感谢您

0 投票
1 回答
449 浏览

c++ - 从 CMake 中的 lib 目录加载共享库?

我已经从示例存储库下载了一个 ROS2 演示。

具体来说,我使用了minimum_subscriberminimum_publisher

我安装了 ROS2 /opt/ros2,当我使用 构建这两个示例时colcon build,它会生成一个install/带有 的目录lib/shared/以及其他常见的目录结构。

我可以在我的机器上使用我当前的设置完美地执行和运行这些演示,但是这些可执行文件链接到存在的库/opt/ros2,所以当我想在另一台没有安装 ROS2 的机器上执行它们或者我将我的 ROS2 安装移动到我的机器中时,可执行文件找不到共享对象。

我添加了一个非常简单的脚本,该脚本install/lib在构建时添加了所有依赖项,但可执行文件似乎并不关心,他们并没有在生成的lib目录中寻找共享库,他们一直试图在/opt/ros2.

我相信这是我应该在 CMake 中解决的问题,它不是 ROS2 特定的,所以,有什么办法可以告诉我生成的可执行文件在不同的目录中搜索?(../lib或者./lib在我的情况下)