问题标签 [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.
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_.idl
ROS2 中的内容,ROS2_base_ws/install/std_msgs/dds_connext/Header_.idl
因为string<255> frame_id_
我限制了这个字符串的最大大小。
我重新编译它并运行相同的节点,但它始终具有以前的大小,即2147483647 bytes
还有其他解决方法吗?
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
?
timer - 如何查看ROS2中发布消息的频率?
我正在将 ROS2 与外部工具集成,并且需要同步消息交换。我如何知道 ROS2 中发布消息的频率?
data-distribution-service - DDS 参与者在终止时不会立即取消注册
我观察到,即使我通过按 ctr + C 停止节点或参与者,即终止它...它仍然显示在管理控制台或 2 分钟左右。为什么不立即删除。有没有办法这样做?
udp - 基于 DDS 的通信是否需要多播?
我有一个配置,其中 3 个应用程序在 3 个不同的虚拟机上运行,它们必须通过 DDS 即 RTPS 协议进行通信。配置如下:
- 基于 ROS2 的 ADAS 功能
- 模拟工具
- 基于 Python/Tensorflow 的机器学习函数
所有 3 个都需要在不同的虚拟机上。
在我们这一端,不允许 MS AZURE VM 和我们的网络进行多播是不可能的。这里有一些问题:
- 是否仍然可以通过 DDS 进行通信?
- 如果是,通过单播,即点对点连接?
- 如果我已经可以选择基本的 UDP 套接字编程,那么在这种情况下使用 DDS 通信是否有益?
- 您能想到将 DDS 用于此类配置的任何限制/进一步问题吗?
multicast - 具有多播和单播的 DDS 配置
我仍在尝试了解 DDS 及其概念。我有一个配置,其中 2 台笔记本电脑运行基于 dds 的应用程序。我的环境不允许多播,所以我决定进行点对点连接(单播)。为了将两台笔记本电脑放在同一个网络中,我使用以太网电缆连接它们(不确定是否有必要)。
现在我没有更改 QoS 中的任何内容,即我没有为单播做任何设置。但现在我的应用程序正在相互通信。
问题 :
- 参与者是如何被发现的?多播?因为我没有为单播做任何设置。
- 如果我想使用单播,是否有必要将它们置于一个网络下,即用以太网电缆连接?
编辑 :
配置如下:
- 第一台笔记本电脑:Windows 操作系统:基于本机 DDS 的应用程序:发布者:不允许多播。
- 第二台笔记本电脑:Linux:基于 ROS2 的用户:多播没问题
data-distribution-service - 在 ROS2 中设置 RTI DDS 配置文件
我正在使用 xml 应用程序创建将 ROS2 与本机 RTI DDS 连接,即意味着所有 QoS 设置都在此 xml 文件中。
现在,对于本机 DDS 应用程序,我可以设置这个 .xml 文件,但是如何为基于 ROS2 的功能设置类似的配置文件?
cmake - 如何从工作区外部构建基于 ROS2 的应用程序
我创建了一个可以通过 cmake 构建的 qt 应用程序。我的应用程序使用了一些 ros2 服务,所以我需要用 ros 构建它。为此,我需要将我的代码放在 ros2_ws/src/ 下。我想避免这件事。我想使用 ament 工具从任何文件夹(不放在 ros2_wc 下)通过应用程序构建。我该怎么做 ?
ros - 什么是 ROS linting 解决方案
linting ros 代码的 ros 方式是什么?
对于 ros1,我找到了 roslint,但我不清楚这是否是 lint ros 代码的推荐方法,以及它是否仍然得到维护/支持(三年前的最后一次提交)。
对于 ros2,我找不到任何官方的 lint 解决方案。
compilation - 如何为另一个操作系统编译 ROS2
我正在写关于 ROS2 的计算机工程硕士论文。感谢https://index.ros.org/doc/ros2/Tutorials/上的教程,我学到了很多东西。我在我的 Ubuntu 18 和 16 机器上尝试了 ROS2,但我想在我的论文中插入一个为其他操作系统编译 ros2 的一般指南(不具体)。我想知道在哪里可以找到有关“为其他操作系统编译 ros2”的指南。