问题标签 [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 回答
357 浏览

ros - 是否可以从 ROS2 (Crystal) 中的不同包启动多个节点?

我有 5 个 ros2 包,每个包包含一个或两个节点。是否可以一次从不同的包启动所有节点?如果可能的话,我该怎么做?是否有任何带有示例的git repo?

提前致谢

0 投票
1 回答
2138 浏览

c++ - 如何在 Ament Tool ROS 中链接共享库

我正在使用 ROS ament 工具构建我的包。结构如下

在 LibB 的 package.xml 中。我将依赖项指定为...

在 AppB 的 package.xml 中。我将依赖项指定为...

现在构建顺序是正确的,因为..

现在问题在构建 AppB 时开始,它找不到 LibA 和 LibB 的链接。

问题

如何将 LibA 链接到 LibB ?(我应该使用什么语法)

如何将 LibA、LibB 链接到 AppB ?

0 投票
1 回答
2234 浏览

python - 使用 docker-compose up 运行时如何优雅地停止 Dockerized Python ROS2 节点?

我有一个在 Docker 容器内运行的基于 Python 的 ROS2 节点,我试图通过捕获SIGTERM/SIGINT信号和/或捕获KeyboardInterrupt异常来处理节点的正常关闭。

问题是当我使用docker-compose. 当容器被停止/杀死时,我似乎无法捕捉到“时刻”。我已经STOPSIGNAL 在 Dockerfile 和 docker stop_signal-compose 文件中明确添加了 。

这是节点代码的示例:

这是一个用于重新创建映像的示例 Dockerfile:

这是示例 docker-compose.yml:

这是 run-node.sh 脚本:

当我手动运行容器内的节点(使用python3 mynode.py或通过/run-node.sh)或当我这样做时docker run -it mynode /bin/bash -c "/run-node.sh",我收到“正在停止节点..”消息。但是当我这样做时docker-compose up,当我停止容器时,我永远不会看到该消息,通过Ctrl+C 或docker-compose down.

我试过了:

  • 将呼叫转移到signal.signal
  • 使用atexit而不是signal
  • 使用docker stopdocker kill --signal

我还在docker 容器中检查了这个 Python,优雅地停止了问题,但那里没有明确的解决方案,而且我不确定使用 ROS/rclpy 是否会使我的设置有所不同(另外,我的主机是 Ubuntu 18.04,而那个用户是在 Windows 上)。

是否可以在我的方法中捕获容器的停止stop_node

0 投票
1 回答
1059 浏览

ros2 - 如何在 ROS2 dashing 中启动带有参数的节点?

当我在寻找解决方案时,我在这篇文章如何使用 ROS2 中的参数启动节点?.

不幸的是,这似乎在 ROS2 dashing 下不起作用。我创建了 ROS2 realsense 驱动程序的一个分支(https://github.com/AndreasAZiegler/ros2_intel_realsense/tree/serial_no_param/realsense_ros2_camera),我的目标是能够通过参数传递序列号。和

传递参数工作正常,但是当我使用启动 python 文件启动节点时

它忽略参数。parameters.yaml 的路径是正确的(我在启动 python 脚本中打印它)。

0 投票
1 回答
787 浏览

ros - 如何使用字符串读取任何 ros 消息

我正在尝试编写一个订阅者类,它订阅一个主题并阅读为该主题发布的消息。据我所知,我需要传递一个带有消息结构的回调函数来读取收到的消息。但这种方法并不通用。有什么办法可以让我以字符串的形式读取任何 ros 消息并将其发送到可以相应解析它们的客户端类

0 投票
1 回答
817 浏览

python - libboost_python3 缺少到 Python 的动态链接?

几天来,我一直在image_proc为 ROS2 的运行而苦苦挣扎。它链接到vision_opencvwhich 又链接到libboost_python3.

现在尝试运行它,我很熟悉:

nm使用该工具进行进一步调查会产生:

_PyBaseObject_Type在 libboost_python37 中确实是未定义的。

我们来看看libboost_python37链接了哪些库:

它缺少任何指向 Python 的动态链接,这导致我提出第一个问题:

  • python应该链接libboost_python37到?

我在网上的其他地方看到过,一个老问题,有人从otool -L它包含的地方发布了他们的输出(虽然它是针对 -mt 文件的,但我的 mt 也没有它。)

(他们的输出)

我的第二个问题:

  • 有谁知道问题是什么或如何解决这个问题?

事情变得有点复杂,因为我使用的是 ROS2 构建工具colcon,而不仅仅是直接编译。

一些附加信息:有人建议通过将 libboost_python37.dylib 链接到 libboost_python3.dylib 来解决此错误,因为它无法被拾取。这不是问题,也没有解决它。

我还从 Brew 安装了 boost 和 boost-python3,并自己编译了它,这两个地方都一样。Python命令是最新的 python 3.7.3,它是“默认”,如python --version给出 3.7.3。

0 投票
0 回答
400 浏览

linux - 无法在 ROS2 中构建自定义操作

我想在 Ubuntu 18.04 中为我的 ROS2 项目创建一个自定义 Action 客户端/服务器。我正在关注https://answers.ros.org/question/3234 ... 的答案,以便为自定义操作创建 ROS2 pkg。

我的包裹看起来像这样:

我的文件如下: PlanAid.action

CMakeLists.txt

package.xml

当我尝试使用以下方式构建我的工作区时:

我收到以下错误:

我怎么解决这个问题?

0 投票
1 回答
3627 浏览

python - 在 ROS2 的包中导入模块

我为 ROS2 创建了一个包,并添加了一个我下载的 Python 存储库。我遇到的问题是,在原始存储库中,直接导入了来自自己存储库的模块,而在我的存储库中,我必须导入它们,在模块之前添加 ROS2 包名称,即使我从同一个存储库导入模块,例如:

import planner_pkg.SimpleOneTrailerSystem as SimpleOneTrailerSystem

虽然我想:

import SimpleOneTrailerSystem

我的 ROS2 项目结构如下:

包.xml

设置.py:

0 投票
1 回答
277 浏览

c++ - 具有奇怪类型的成员函数导致回调函数不匹配

我有一个类,其中声明和实现在 .cpp 文件中。它有一个名为 的成员函数imageCallback(),在构造函数中使用,如下所示

对我来说,这看起来不错,但它不起作用。

期待回调的create_camera_subscription这个签名:

但它得到了这个签名

这个签名是什么意思?namespace::classname::pointer? 为什么不是函数?

(回调签名与他们在文档https://github.com/ros-perception/image_common/wiki/ROS2-Migration中使用的完全相同,如果有兴趣)

0 投票
1 回答
2815 浏览

python - ROS2:如何将参数从一个启动文件传递到子启动文件

我有一个主bringup.launch.py启动文件,其中启动描述符包含child.launch.py作为启动文件,如下所示:

如何从bringup.launch.pyto传递参数child.launch.py