问题标签 [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 投票
0 回答
353 浏览

python - Turtlebot 3 中不存在 Frame[map]?

逐步完成 Turtlebot 3 教程。在使用 python 启动第一个脚本时(如教程中所示),我看不到固定框架(显示和错误),而导航 2 也不允许我按照网站上的说明激活启动。有人可以指导我哪里出错了吗?参考,这从https://navigation.ros.org/getting_started/index.html#installation 固定帧错误开始

0 投票
0 回答
729 浏览

python-3.x - 如何使用 ros2 服务触发 asyncio 非阻塞功能(无 Actions)

我遇到的问题是:

  • 要在后台启动异步函数,我需要一个 asycio 事件循环。

  • 这个事件循环通常存在于主线程中,并且在启动时会阻塞该线程的执行(即,在事件循环开始后的代码行直到事件循环被取消才会运行)。

  • 然而,ROS2 有它自己的事件循环(执行器),它通常也运行在主线程中并阻止执行。这意味着很难同时运行两个事件循环

我尝试的解决方案是在单独的线程中启动 asyncio 事件循环。这在 Node 构造函数中启动,并在 Node 解构后停止。

这看起来像这样:

这是一种明智的做法吗?有没有更好的办法?我将如何start_incrementing使用其他服务取消该服务?(我知道这是动作的用途,但我不能在这种情况下使用它们)。

0 投票
1 回答
1020 浏览

bash - 在 bash 中终止 ros2 节点

我目前有一个启动我的 ros2 节点的 bash 脚本。这工作得很好。我现在尝试将脚本作为后台任务启动并将输出写入文件。这样做时,我无法在以后终止节点。以前我通过点击Ctrl + C终端来终止它,所有节点都停止了。我尝试通过在启动脚本时保存 PID 然后将其杀死来做同样的事情,但是节点继续运行。

是否有可能停止脚本启动的所有节点?停止所有 ros2 节点是不可能的,因为我并行启动了多个节点。

开始

停止

0 投票
2 回答
2475 浏览

python - 安装程序应该是本地项目的路径或以 svn+、git+、hg+ 或 bzr+ 开头的 VCS url

我正在尝试使用以下命令通过 pip 进行本地安装:

并收到以下错误:

0 投票
1 回答
995 浏览

docker - 与 docker 容器中的 ROS2 节点通信的问题

我正在学习ROS2。我有一个 docker 容器,里面安装了 ROS2 foxy。

这个容器安装了很多其他的东西,所以我最好处理它而不是从 DockerHub 下载的东西。

容器基于 Ubuntu 18.04,我的主机运行 Ubuntu 20.04。

以下不起作用:

在主机上:$ docker run --net host -it <container name>

内部容器:

在另一个终端的同一主机上:

订阅者没有输出。

同时,我看到开放的 UDP 端口:

186xxxx开头的PID属于主机上的ros2_daemon,210xxxx开头的PID属于python,在容器中运行。

如果我/bin/bash在容器中的另一个执行订阅者,它可以工作,即订阅者打印它从发布者接收到的消息。

多播 UDP 数据报也可以工作:

在容器中:

在主机上:

更新。我试过拉标准容器 osrf/ros:foxy-desktop ... 并且示例按预期工作。

容器中的发布者:

主机上的订阅者:

更新 2

回到原来的容器。我在 netstat 中看到两个具有相同端口号 7400 的 UDP 套接字。可以吗?

更新:是的,它是:https ://stackoverflow.com/a/1694148

在上面netstat的输出中观察到同样的现象,但是端口号不同。

和流程:

ID 为 2319288 的进程正在从主机运行,我不小心切断了 ps 的输出。

更新 3

  1. 如果我在没有 的情况下运行 docker 容器--net=host,那么我的订阅者会看到来自发布者的消息。我买不起这个,因为在网络中看不到 docker 容器。

  2. 我已将容器中的订阅者替换为 netcat ( netcat -l -u 42900) - 容器中的 netcat 已收到来自在其外部工作的发布者的消息。容器运行--net=host

它表明容器中的网络一切正常,但 ROS2 以某种方式错误地使用它。

我该如何纠正?

0 投票
0 回答
1804 浏览

c++ - 在 C++ 中为 ROS2 寻找 cv_bridge 示例

我一直在尝试在 C++ 中找到一些示例代码,以深入了解如何将 cv_bridge 用于 ROS2,但是我得到的唯一示例是来自 ROS1 的示例。鉴于它使用 sharedPtr 而不是默认值。任何人都可以通过分享如何执行从 sensor_msgs::msg::Image 订阅的 cv_bridge 教程中所说的类似任务并将其转换为可以由 openCV 函数操作的东西来启发我吗?任何建议表示赞赏,我在这封邮件中附上了我的代码。

0 投票
1 回答
503 浏览

simulation - “ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py​​”导致找不到包

这些是使用的命令:

0 投票
0 回答
112 浏览

c++ - 传递给类初始化时 std::string 的值发生变化

这个错误不容易复制,因为我在 Windows 上使用 ROS 2 并且安装不是那么简单,但我认为这是一个 Visual Studio 问题,所以也许你们知道这里发生了什么。

我想在 Visual Studio 2019 项目中使用 ROS 2。为此,我做了以下事情:

  • C/C++ > 附加包含目录 = C:\dev\ros2_foxy\include
  • 链接器 > 附加库目录 = C:\dev\ros2_foxy\Lib
  • Linker > Input > Additional Dependencies = 所有 .lib 文件在
  • C:\dev\ros2_foxy\Lib 将所有 .dll 文件复制到 bin 输出

我将路径 C:/ros2_foxy/install/bin 添加到我的环境路径中。

调用 ROS init 函数可以正常工作,因此与 ROS 的连接应该没问题。在 ROS 中,您使用节点进行通信。您自己的节点是从“节点”父类继承的类,并使用节点名称(此处为“pub”)进行初始化,如下所示:

在 ROS 的 node.cpp 中,节点类的定义如下:

当我通过代码进行调试时,node_name 不包含“pub”,而是包含一些随机字符(它们每次都会更改),然后是“p”“u”“b”和“\0”。

在此处输入图像描述

因此,我收到“无效节点名称”错误。我试图找出添加随机字符的确切位置,但老实说,我无法找到比这更早的对 node_name 的引用。

我很高兴知道问题可能出在哪里。

编辑:节点类的定义并不简单,因为它来自 ROS。当使用 colcon 和命令行构建时,所有这些都可以正常工作,只有在使用 Visual Studio 构建和运行代码时才会出现问题。但是,如果您有兴趣,可以在此处找到文档并在此处找到实现。

我的测试代码来自“编写发布者”示例教程

0 投票
0 回答
281 浏览

c++ - 如何理解我的 clion 性能分析报告?

我有一个应用程序,某些部分花费的时间太长,现在我对其进行了分析,我编写的所有功能只占总时间的一小部分,大约 20%。从分析报告中可以看出,大部分 80% 用于调用 libc-2.31.so__clone。问题是,我不知道我在哪里以及如何调用这个函数。可能我正在创建的很多对象都在调用它。但是如何确定呢?有没有办法加快这部分的速度?如果我什至现在都不知道这些电话发生在哪里,我该如何加快速度?“外部范围”只是全部,这并没有真正的帮助。 在此处输入图像描述

我查看了本指南:https ://www.jetbrains.com/help/idea/read-the-profiling-report.html#profiler-flame-chart ,基于此,我发现了以下调用列表: 在此处输入图像描述

但这也对我没有帮助。如何正确确定我的代码的哪一部分使用 clion profiler 需要多长时间?在python中是这样的:

0 投票
2 回答
467 浏览

opencv - 如何在 LXC 容器中使用 OpenCV (Python) 访问网络摄像头

我在主机上运行 Ubuntu 18.04,在 LXC 容器内运行 Ubuntu 20.04。我的目标是在 LXC 容器内运行 ROS2(需要 Ubuntu 20.04),然后用它连接两个 dynamixel 伺服电机和一个 USB Logitech 网络摄像头。我还在容器内安装了 miniconda,以便我可以安装 OpenCV 和 dlib。我还在容器内使用 conda 虚拟环境。

所有提到的软件都可以正常工作。现在我需要使用 OpenCV 访问网络摄像头,我使用此命令进行测试

python -c "import cv2;print(cv2.VideoCapture(0).isOpened())"

True在主机上返回但返回

从容器内部。

到目前为止,我尝试过:

  1. lxc config device add rosfoxy video0 unix-char path=/dev/video0,并且仍然得到相同的错误video0video1video2
  2. lxc config device add rosfoxy logitech usb vendorid=046d productid=082b导致 Device logitech added to rosfoxy,但仍然是同样的错误。
  3. 然后我尝试lxc profile device add ros logitech usb vendorid=046d productid=082b了哪个结果 Device logitech added to ros。测试时我得到同样的错误。
  4. 在主机上进行了测试glxgears,都可以正常工作。glxinfo但是,当从 LXC 容器内部测试它们时,它工作正常,但首先出现此错误:
  1. 在主机上测试guvcview,工作正常。但是在容器上,它不起作用,它给出:

你会建议怎么做吗?

更新1: 尝试过lxc config device add rosfoxy video0 unix-char path=/dev/video0 gid=1000,但似乎没有用。

他们从容器内部尝试过

但是当我添加时,sudo我得到了:

在我看来,网络摄像头已被检测到!

但我仍然得到

更新 2:

我应该先lxc config device remove rosfoxy video0发出lxc config device add rosfoxy video0 unix-char path=/dev/video0 gid=1000

感谢 Simos https://discuss.linuxcontainers.org/t/cant-open-camera-by-index-on-lxc-container/10452/8