问题标签 [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.
ros - 是否可以从 ROS2 (Crystal) 中的不同包启动多个节点?
我有 5 个 ros2 包,每个包包含一个或两个节点。是否可以一次从不同的包启动所有节点?如果可能的话,我该怎么做?是否有任何带有示例的git repo?
提前致谢
c++ - 如何在 Ament Tool ROS 中链接共享库
我正在使用 ROS ament 工具构建我的包。结构如下
在 LibB 的 package.xml 中。我将依赖项指定为...
在 AppB 的 package.xml 中。我将依赖项指定为...
现在构建顺序是正确的,因为..
现在问题在构建 AppB 时开始,它找不到 LibA 和 LibB 的链接。
问题
如何将 LibA 链接到 LibB ?(我应该使用什么语法)
如何将 LibA、LibB 链接到 AppB ?
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 stop
和docker kill --signal
我还在docker 容器中检查了这个 Python,优雅地停止了问题,但那里没有明确的解决方案,而且我不确定使用 ROS/rclpy 是否会使我的设置有所不同(另外,我的主机是 Ubuntu 18.04,而那个用户是在 Windows 上)。
是否可以在我的方法中捕获容器的停止stop_node
?
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 脚本中打印它)。
ros - 如何使用字符串读取任何 ros 消息
我正在尝试编写一个订阅者类,它订阅一个主题并阅读为该主题发布的消息。据我所知,我需要传递一个带有消息结构的回调函数来读取收到的消息。但这种方法并不通用。有什么办法可以让我以字符串的形式读取任何 ros 消息并将其发送到可以相应解析它们的客户端类
python - libboost_python3 缺少到 Python 的动态链接?
几天来,我一直在image_proc
为 ROS2 的运行而苦苦挣扎。它链接到vision_opencv
which 又链接到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。
linux - 无法在 ROS2 中构建自定义操作
我想在 Ubuntu 18.04 中为我的 ROS2 项目创建一个自定义 Action 客户端/服务器。我正在关注https://answers.ros.org/question/3234 ... 的答案,以便为自定义操作创建 ROS2 pkg。
我的包裹看起来像这样:
我的文件如下: PlanAid.action:
CMakeLists.txt
和package.xml:
当我尝试使用以下方式构建我的工作区时:
我收到以下错误:
我怎么解决这个问题?
python - 在 ROS2 的包中导入模块
我为 ROS2 创建了一个包,并添加了一个我下载的 Python 存储库。我遇到的问题是,在原始存储库中,直接导入了来自自己存储库的模块,而在我的存储库中,我必须导入它们,在模块之前添加 ROS2 包名称,即使我从同一个存储库导入模块,例如:
import planner_pkg.SimpleOneTrailerSystem as SimpleOneTrailerSystem
虽然我想:
import SimpleOneTrailerSystem
我的 ROS2 项目结构如下:
包.xml
设置.py:
c++ - 具有奇怪类型的成员函数导致回调函数不匹配
我有一个类,其中声明和实现在 .cpp 文件中。它有一个名为 的成员函数imageCallback()
,在构造函数中使用,如下所示
对我来说,这看起来不错,但它不起作用。
期待回调的create_camera_subscription
这个签名:
但它得到了这个签名
这个签名是什么意思?namespace::classname::pointer
? 为什么不是函数?
(回调签名与他们在文档https://github.com/ros-perception/image_common/wiki/ROS2-Migration中使用的完全相同,如果有兴趣)
python - ROS2:如何将参数从一个启动文件传递到子启动文件
我有一个主bringup.launch.py
启动文件,其中启动描述符包含child.launch.py
作为子启动文件,如下所示:
如何从bringup.launch.py
to传递参数child.launch.py
?