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

2024-06-26 05:56:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我将ROS2与一个用于Python的本地RTI-DDS连接器连接,在这里我将在RTI-Connector中发布消息并在ROS2中订阅。你知道吗

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

int16 id
// An array of objects of another message type
DetectedObject[ ] objects

这在IDL中被解释为无界序列。你知道吗

另一个名为DetectedObject的消息:

int16 id
string name
int16 x
int16 y

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

由于ROS2中的订户正在订阅int16类型的id和DetectedObject[]类型的对象,如何从RTI connector发布对象?你知道吗

RTI连接器中的通常流量为:

  • 获取输出的实例:

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

  • 发布实例:

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

    output.write()

如何编写类型为DetectedObject而不是setNumber的对象?你知道吗


Tags: of对象实例id消息类型outputconnector
1条回答
网友
1楼 · 发布于 2024-06-26 05:56:13

我没有ROS方面的经验,但我会尽力帮助您处理DDS/连接器部分。你知道吗

据我所知,在DDS中不能指定无界数组。可以有无界序列,但不能有数组。因此,如果您使用的类型如下所示:

struct DetectedObject {
  short id;
  string name;
  short x;
  short y;
};


struct MyMessage {
  short id;
  DetectedObject objects[10];
};

或者有一个无界序列:

struct DetectedObject {
  short id;
  string name;
  short x;
  short y;
};


struct MyMessage {
  short id;
  sequence<DetectedObject> objects;
};

那么连接器代码如下所示:

connector = rti.Connector("MyParticipantLibrary::PubParticipant",
                          filepath + "/ROS.xml")
outputDDS = connector.getOutput("MyPub::MyTopicWriter")

for i in range(1, 500):
    # There are two ways to set values in an instance:

    # 1. Field by Fields:
    outputDDS.instance.setNumber("id", 1)
        #note index, for now, starts from 1. This may change in the future
    outputDDS.instance.setNumber("objects[1].id", 2)
    outputDDS.instance.setString("objects[1].name", "aName")
    outputDDS.instance.setNumber("objects[1].x", 3)
    outputDDS.instance.setNumber("objects[1].y", 4)
    outputDDS.write()

        # OR

    # 2. By first creating a dictionary and then setting it all at once:
    myDict = {'id': 5, 'objects': [{'id': 6, 'name': '', 'x': 7, 'y': 8}]}
    outputDDS.instance.setDictionary(myDict)
    outputDDS.write()
    sleep(2)

当涉及到无界数组时,也许其他人可以提供更多关于ROS<;gt;DDS映射的信息。你知道吗

我希望这有帮助, 詹皮罗

相关问题 更多 >