问题标签 [rti-dds]

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 回答
142 浏览

c++ - 当我将 unique_ptr 或 shared_ptr 传递给引用指向对象的第三方函数时崩溃

我不确定是否可以生成可编译的示例,因为我的问题是调用第三方库,因此很难看到发生了什么(除非您安装了 RTI DDS)。但我会尽量使它成为一个完整的例子:

我正在使用带有 C++11 的 RTI DDS 库。这是一个可以工作的代码片段:

所以这只是一个有效的片段,但我想让我的状态条件成为一个成员变量,以便它存在于类范围内,我可以在不同的地方使用它。我还想将智能指针用于它们的自动销毁属性。

但是,如果我使用 unique_ptr 而不是原始指针,我会收到错误 - 所以我认为这是因为 unique_ptr 有一些防止被复制等的保护。

所以我想也许在这里可以使用共享指针:

这崩溃 - 抛出一个低级 RTI 异常,堆栈跟踪真的没有帮助我,因为它在 RTI 库的内部深处:(

StatusCondition 的构造函数的 API 在这里:

获取对实体中 StatusCondition 的引用。参数。

entity 我们获得其状态条件的引用的实体。每个实体只有一个 StatusCondition,每个 StatusCondition 有一个实体。注意此构造函数不会创建新的条件。它获得对每个实体拥有的 StatusCondition 的引用。您可以根据需要多次使用此构造函数来获取对同一 StatusCondition 的引用。

所以看起来它正在引用由 shared_ptr 指向的 DataReader 的一些内部。

所以我的问题是,与原始指针相比,shared_ptr 在这种情况下是否不起作用?

0 投票
2 回答
470 浏览

java - Java DDS 无界序列导致内存不足错误

我是 DDS 的新手,并尝试在 Intellij-IDEA 中编写一个简单的 Java 程序,该程序由 3 个部分组成:

  1. 发送数据的客户端模拟器。
  2. 我的程序模拟器从客户端接收数据,对其进行操作并将其发送回客户端。
  3. 读取操作数据的客户端模拟器。

我在示例中尝试发送的所有数据都是一个简单的字符串。

我正在使用 RTI Code Gen 自动生成大部分代码。

没有和unboundedSupport标志(字符串限制为 255 个字符)一切正常。但是,在应用unboundedSupport标志时,我收到以下内存不足错误:

我正在激活首先读取数据的客户端模拟器。

这是我的 .idl 文件:

这是我的主程序(第 10 行是 的初始化subscriber1):

这是我的 ClientResultsConsumer 类:

这是我的 JsonMessageSubscriber 类(第 71 行是subscriber.create_datareader():

不幸的是,除了限制序列大小之外,我没有找到解决方案,但我知道将它限制在足够大的数量会解决我的问题,它也需要大量内存,我宁愿它不要占用更多超过每条消息所需的最小值。

任何帮助将不胜感激,谢谢

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 投票
1 回答
755 浏览

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

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

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

0 投票
1 回答
147 浏览

subscriber - RTI DDS 两个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?

我有两个发布者和订阅者应用程序。

  • App1 -> 发布 -> 学生(1,ABC),学生(2,EFG)。之后我运行第二个应用程序。应用程序都在同一个域上订阅和发布
  • App2能够订阅学生(1,ABC),学生(2,EFG),由App1发布,然后我发布数据。App2-> publish -> Teacher(1,AAA),Teacher(2,BBB) 现在我得到了 Student (1,ABC), Student(2,EFG),Teacher(1,AAA),Teacher(2,BBB)应用程序2
  • 当我关闭 app2 并再次重新打开时,我无法订阅此数据 如何订阅我在关闭应用程序之前发布的数据? DDS Spy 显示同一域上的数据仍然可用。

有人可以帮助理解吗?

0 投票
2 回答
432 浏览

networking - DDS 可以通过 Internet 用于在线游戏吗?

我想知道 DDS 是否可以在互联网上使用,以及它是否是在线游戏的好选择。

我在 RTI 网站上看到他们支持 WAN,但这是否意味着我可以订阅来自世界另一端的另一个参与者的主题?

如果是这种情况,QoS 保证会发生什么情况?

谢谢。

0 投票
1 回答
1523 浏览

docker - 使用主机网络启动 Docker 容器,同时保持 SSH 进入容器的能力?

我正在启动一个本地 docker 容器作为运行我的应用程序的环境,并且我使用 CLion 的远程主机功能来管理工具链。我的应用程序在特定的网络接口上通过各种端口和 IP 地址进行通信。

在一个完美的世界中,我将能够在本地运行我的应用程序,然后还可以通过 CLion 在 docker 容器中启动一个应用程序,并与本地运行的应用程序进行通信。

我知道我可以启动一个 docker 容器,--network=host但这似乎消除了 SSH 进入 docker 容器的能力,这是使用 CLion 和 docker 的先决条件。有没有办法同时保持两者?使用主机网络但也启用 ssh'ing 到 docker 容器?

我的 Dockerfile 中配置 SSH 代理的片段

更新: 使用 CLion 2021.3,您不再需要 ssh 进入您的 docker 容器。现在支持它作为自己的工具链类型https://blog.jetbrains.com/clion/2021/10/clion-2021-3-eap-new-docker-toolchain/#new_docker_toolchain

0 投票
2 回答
309 浏览

c++ - 使用现代 c++ API 时 RTI DDS 中未定义的引用错误

我使用以下方法生成 RTI 代码:

我的 CMake 文件:

现在在编译时,我收到以下错误:

有什么我想念的吗?

0 投票
1 回答
83 浏览

cmake - 如何让 CMake 生成 TypeSupport 文件,例如支持。[cxx,h]?

我正在使用 CMake 从 IDL 生成文件并将它们放在 RedHat 上的库中。问题是,未生成 <idl_file>Support[c,h] 文件,因此我无法注册类型支持。在 CMake 中,我有以下行生成 <idl_file>Plugin.[c,h] 和 <idl_file>.[cxx,h] 文件。问题是,它没有生成任何 <idl_file>Support.[cxx,h] 文件。

据我所知,我不是通过在内部创建一个库来独立使用它们,对吗?我没有使用 NDDS_STANDALONE_TYPE,也没有添加 ndds_standalone_type.cxx。

如果我使用以下命令行,将显示 <idl_file>Support[c,h] 文件。

但是,如果我手动添加 *Plugin.[c,h]、*Support.[c,h] 和 *.[ch] 文件并编译成一个库,然后用我的程序链接它,就会有一个许多未定义的引用,例如:

所以我试图让 CMake 为我完成这项工作,希望能有更好的结果。我将如何让 CMake 生成这些 TypeSupport 文件?