问题标签 [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.
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 在这种情况下是否不起作用?
java - Java DDS 无界序列导致内存不足错误
我是 DDS 的新手,并尝试在 Intellij-IDEA 中编写一个简单的 Java 程序,该程序由 3 个部分组成:
- 发送数据的客户端模拟器。
- 我的程序模拟器从客户端接收数据,对其进行操作并将其发送回客户端。
- 读取操作数据的客户端模拟器。
我在示例中尝试发送的所有数据都是一个简单的字符串。
我正在使用 RTI Code Gen 自动生成大部分代码。
没有和unboundedSupport
标志(字符串限制为 255 个字符)一切正常。但是,在应用unboundedSupport
标志时,我收到以下内存不足错误:
我正在激活首先读取数据的客户端模拟器。
这是我的 .idl 文件:
这是我的主程序(第 10 行是 的初始化subscriber1
):
这是我的 ClientResultsConsumer 类:
这是我的 JsonMessageSubscriber 类(第 71 行是subscriber.create_datareader(
):
不幸的是,除了限制序列大小之外,我没有找到解决方案,但我知道将它限制在足够大的数量会解决我的问题,它也需要大量内存,我宁愿它不要占用更多超过每条消息所需的最小值。
任何帮助将不胜感激,谢谢
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
?
data-distribution-service - 在 ROS2 中设置 RTI DDS 配置文件
我正在使用 xml 应用程序创建将 ROS2 与本机 RTI DDS 连接,即意味着所有 QoS 设置都在此 xml 文件中。
现在,对于本机 DDS 应用程序,我可以设置这个 .xml 文件,但是如何为基于 ROS2 的功能设置类似的配置文件?
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 显示同一域上的数据仍然可用。
有人可以帮助理解吗?
networking - DDS 可以通过 Internet 用于在线游戏吗?
我想知道 DDS 是否可以在互联网上使用,以及它是否是在线游戏的好选择。
我在 RTI 网站上看到他们支持 WAN,但这是否意味着我可以订阅来自世界另一端的另一个参与者的主题?
如果是这种情况,QoS 保证会发生什么情况?
谢谢。
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
c++ - 使用现代 c++ API 时 RTI DDS 中未定义的引用错误
我使用以下方法生成 RTI 代码:
我的 CMake 文件:
现在在编译时,我收到以下错误:
有什么我想念的吗?
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 文件?