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

string - 修改 ROS2 IDL 中的最大字符串长度

我目前正在通过 RTI Connector for python 将 ROS2 与本机 RTI DDS Connext 连接。

在我的 ROS2 节点中,我有一个自定义消息类型,它使用header来自std_msgs包的消息。现在标题有一个成员string frame_id_。当为这个 msg 生成 idl 时,字符串的大小被分配为2147483647 bytes. 我可以在RTI Admin console. 现在为了匹配原生 DDS 和 ROS2 中的类型,我需要通过 QoS.xml 文件在 RTI Connext 中提供相同的字符串大小。但问题是,这对于 RTI 来说太大而无法处理并且程序崩溃。

作为一种解决方法,我修改了header_.idlROS2 中的内容,ROS2_base_ws/install/std_msgs/dds_connext/Header_.idl因为string<255> frame_id_我限制了这个字符串的最大大小。

我重新编译它并运行相同的节点,但它始终具有以前的大小,即2147483647 bytes

还有其他解决方法吗?

0 投票
1 回答
186 浏览

python - 通过 RTI Conector 将序列/对象发布到 ROS2 应用程序

我正在将 ROS2 与 Python 的本机 RTI DDS 连接器连接,我在 RTI 连接器中发布消息并在 ROS2 中订阅。

对于名为的消息,我有以下消息结构DetectedObjectList

这在 IDL 中被解释为无界序列。

另一条消息名为DetectedObject

假设用于通信的主题是“ objects ”,消息类型是“ DetectedObjectList ”。

由于 ROS2 中的订阅者订阅了 int16类型的 id 和 DetectedObject[] 类型的对象,我如何从 RTI 连接器发布对象?

RTI 连接器中的通常流程是:

  • 获取输出实例:

    output = connector.getOutput("MyPublisher::MyDataWriter")

  • 发布一个实例:

    output.instance.setNumber("id", 5)

    output.write()

我怎样才能写一个类型的对象DetectedObject而不是setNumber

0 投票
0 回答
96 浏览

timer - 如何查看ROS2中发布消息的频率?

我正在将 ROS2 与外部工具集成,并且需要同步消息交换。我如何知道 ROS2 中发布消息的频率?

0 投票
1 回答
35 浏览

data-distribution-service - DDS 参与者在终止时不会立即取消注册

我观察到,即使我通过按 ctr + C 停止节点或参与者,即终止它...它仍然显示在管理控制台或 2 分钟左右。为什么不立即删除。有没有办法这样做?

0 投票
1 回答
889 浏览

udp - 基于 DDS 的通信是否需要多播?

我有一个配置,其中 3 个应用程序在 3 个不同的虚拟机上运行,​​它们必须通过 DDS 即 RTPS 协议进行通信。配置如下:

  1. 基于 ROS2 的 ADAS 功能
  2. 模拟工具
  3. 基于 Python/Tensorflow 的机器学习函数

所有 3 个都需要在不同的虚拟机上。

在我们这一端,不允许 MS AZURE VM 和我们的网络进行多播是不可能的。这里有一些问题:

  1. 是否仍然可以通过 DDS 进行通信?
  2. 如果是,通过单播,即点对点连接?
  3. 如果我已经可以选择基本的 UDP 套接字编程,那么在这种情况下使用 DDS 通信是否有益?
  4. 您能想到将 DDS 用于此类配置的任何限制/进一步问题吗?
0 投票
2 回答
2097 浏览

multicast - 具有多播和单播的 DDS 配置

我仍在尝试了解 DDS 及其概念。我有一个配置,其中 2 台笔记本电脑运行基于 dds 的应用程序。我的环境不允许多播,所以我决定进行点对点连接(单播)。为了将两台笔记本电脑放在同一个网络中,我使用以太网电缆连接它们(不确定是否有必要)。

现在我没有更改 QoS 中的任何内容,即我没有为单播做任何设置。但现在我的应用程序正在相互通信。

问题 :

  1. 参与者是如何被发现的?多播?因为我没有为单播做任何设置。
  2. 如果我想使用单播,是否有必要将它们置于一个网络下,即用以太网电缆连接?

编辑 :

配置如下:

  • 第一台笔记本电脑:Windows 操作系统:基于本机 DDS 的应用程序:发布者:不允许多播。
  • 第二台笔记本电脑:Linux:基于 ROS2 的用户:多播没问题
0 投票
1 回答
755 浏览

data-distribution-service - 在 ROS2 中设置 RTI DDS 配置文件

我正在使用 xml 应用程序创建将 ROS2 与本机 RTI DDS 连接,即意味着所有 QoS 设置都在此 xml 文件中。

现在,对于本机 DDS 应用程序,我可以设置这个 .xml 文件,但是如何为基于 ROS2 的功能设置类似的配置文件?

0 投票
2 回答
368 浏览

cmake - 如何从工作区外部构建基于 ROS2 的应用程序

我创建了一个可以通过 cmake 构建的 qt 应用程序。我的应用程序使用了一些 ros2 服务,所以我需要用 ros 构建它。为此,我需要将我的代码放在 ros2_ws/src/ 下。我想避免这件事。我想使用 ament 工具从任何文件夹(不放在 ros2_wc 下)通过应用程序构建。我该怎么做 ?

0 投票
2 回答
504 浏览

ros - 什么是 ROS linting 解决方案

linting ros 代码的 ros 方式是什么?

对于 ros1,我找到了 roslint,但我不清楚这是否是 lint ros 代码的推荐方法,以及它是否仍然得到维护/支持(三年前的最后一次提交)。

对于 ros2,我找不到任何官方的 lint 解决方案。

0 投票
1 回答
113 浏览

compilation - 如何为另一个操作系统编译 ROS2

我正在写关于 ROS2 的计算机工程硕士论文。感谢https://index.ros.org/doc/ros2/Tutorials/上的教程,我学到了很多东西。我在我的 Ubuntu 18 和 16 机器上尝试了 ROS2,但我想在我的论文中插入一个为其他操作系统编译 ros2 的一般指南(不具体)。我想知道在哪里可以找到有关“为其他操作系统编译 ros2”的指南。