问题标签 [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.
python - 使用启动文件动态设置 ROS2 参数?
有一堆资源描述了使用启动文件在节点启动时设置参数。(如何在 ROS2 中使用参数启动节点?)
但是,这不会触发动态重新配置回调:set_on_parameters_set_callback
。有没有办法在触发此回调的节点上的启动文件中指定操作?
相当于运行一个ros2 param set ...
命令(这将触发回调)
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
问题是,那
永远不会被调用,所以计时器根本不工作。
我删除了代码中所有不必要的部分,以使您更清楚,所以如果它没有编译,请告诉我。非常感谢任何帮助!我只是不明白那里到底发生了什么,现在我需要你的帮助......谢谢!
c++ - 如何使用 Fast-RTPS 大数组消息发送(大于 10 MB)
我正在尝试使用 Fast-Rtps 发送和接收大消息。我采用了 HelloworldExample 代码并更改了它的 idl 消息(我添加了一个不同大小的 char 数组)我设法发送的最大大小是 8370000。
我已经找到并将这一行添加到 init() 方法中: Wparam.qos.m_publishMode.kind = ASYNCHRONOUS_PUBLISH_MODE; 它有帮助,但我仍然停留在 8MB
将消息更改为:
我得到:分段错误(核心转储)
c++ - 如何正确初始化事件
我是一名学生,目前正在试验 ROS 2 中的 QoS 设置。我正在尝试实现 (RMW_EVENT_REQUESTED_DEADLINE_MISSED) 事件。
首先我声明订阅和事件:
之后我尝试初始化事件:
但我得到一个错误(没有匹配函数调用'rmw_subscription_event_init')
该程序建议我将订阅和事件声明更改为:
但随后我收到以下错误(标量初始化程序中的多余元素)。
我该如何解决这个问题,这两种情况中哪一种是最好的?或者有没有完全其他的方式来创建这个事件?
提前致谢 !
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
我有以下问题:
如果我理解正确,头文件被用作某种库。因此,如果您将它们包含在您的程序中,您就可以使用您想要的所有功能。这意味着我不需要在我的程序中使用此代码,但我只需要实现这些功能?以下文件:qos_event.cpp / rcl event.c / rmw event.c 是我可以在自己的程序中使用的代码示例吗?
服务质量 (QoS) 设置在 Ros 中间件 (rmw) 中声明。如果我想使用其中一个事件,我可以直接使用 rmw/event.h 头文件,还是需要尊重架构,是否只能在程序中实现 rclcpp 代码?
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).
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
python-3.6 - ros2 rclpy.spin_once() 在线程中产生“生成已经执行”异常
我的项目中有一个要求,我在其中创建 ros2 节点(使用 rclpy)我必须创建订阅特定主题的发布者和订阅者,但我必须根据收到的 msg 将 msg 发布到主题在回调中。
我需要在项目的其他部分使用上述对象。
由于 rclpy.spin() 将阻止我试图在线程中运行它的进程,但我得到“生成器已经在执行”运行时异常。
你能告诉我如何解决这个问题或者我的用例的替代解决方案是什么
macos - 在 OS X 上安装 ROS2 - 错误:没有名为“rclpy._rclpy”的模块
我正在尝试在 Mac 中安装 ros2 env。我为它创建了一个 conda env。
我已经安装conda install -c anaconda sphinx
和conda install -c conda-forge sphinx-autodoc-typehints
.
运行时出现错误ros2 run demo_nodes_cpp talker
:
任何想法?先感谢您
c++ - 从 CMake 中的 lib 目录加载共享库?
我已经从示例存储库下载了一个 ROS2 演示。
具体来说,我使用了minimum_subscriber和minimum_publisher。
我安装了 ROS2 /opt/ros2
,当我使用 构建这两个示例时colcon build
,它会生成一个install/
带有 的目录lib/
,shared/
以及其他常见的目录结构。
我可以在我的机器上使用我当前的设置完美地执行和运行这些演示,但是这些可执行文件链接到存在的库/opt/ros2
,所以当我想在另一台没有安装 ROS2 的机器上执行它们或者我将我的 ROS2 安装移动到我的机器中时,可执行文件找不到共享对象。
我添加了一个非常简单的脚本,该脚本install/lib
在构建时添加了所有依赖项,但可执行文件似乎并不关心,他们并没有在生成的lib
目录中寻找共享库,他们一直试图在/opt/ros2
.
我相信这是我应该在 CMake 中解决的问题,它不是 ROS2 特定的,所以,有什么办法可以告诉我生成的可执行文件在不同的目录中搜索?(../lib
或者./lib
在我的情况下)