- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在将 ROS2 与用于 Python 的 native RTI DDS 连接器连接,我在 RTI 连接器中发布消息并在 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 连接器发布对象?
RTI 连接器中的通常流程是:
获取输出实例:
output = connector.getOutput("MyPublisher::MyDataWriter")
发布实例:
output.instance.setNumber("id", 5)
output.write()
我如何写一个 DetectedObject
类型的对象而不是 setNumber
?
最佳答案
我没有使用 ROS 的经验,但我会尝试在 DDS/Connector 部分提供帮助。
据我所知,在 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 <--> DDS 映射做出更多贡献。
希望对你有所帮助 詹皮耶罗
关于python - 通过 RTI Conector 将序列/对象发布到 ROS2 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673951/
我正在实现一个基于 ROS 的机器人系统。我有不同的节点,每秒发送多次数据。但是,我不需要那个。我只想在机器人处于新位置时发送它的状态。您建议使用哪种 ROS 技术? 最佳答案 根据您的要求,您可以使
我希望我的 ROS 包中的特定节点在 DEBUG 详细级别显示输出,而其他节点在 INFO 级别显示。我知道 rosconsole configuration file ,并且能够为包设置详细程度:
我正在使用 ros indigo。当我做映射然后通过以下方式保存它: map_server map_server -f 'location' 它给了我一个警告... Using deprecated
我正在使用 ros indigo。当我做映射然后通过以下方式保存它: map_server map_server -f 'location' 它给了我一个警告... Using deprecated
我有一个用 Python 编写的 ROS 节点,它捕获消息并将它们写入磁盘(例如使用 pickle)。我想稍后在 ROS 之外的另一个 Python 脚本中使用这些文件,但我需要导入消息类。 这可能吗
ROS 和网络新手。在这里需要一些帮助来理解我应该采取的最佳方法。我正在尝试将 Ros 消息从 ROS PC 发送到另一台非 ROS PC。我研究了几种方法可以做到这一点。 在非 ROS 机器上安装
我可以在ROS的catkin工作区中编译安装ROS包。如何将 catkin 工作区中的包导出到 .deb 文件,以便我可以在其他机器上安装和使用它? 我的 ROS 版本是 ROS Indigo,操作系
我一直在尝试安装 ROS 旋律。我需要它来运行一些启动文件。目前,当我通过运行以下命令检查 ros 版本(在运行 Ubuntu 20.04 的树莓派 4 上)时: rosversion -d 它输出:
我正在尝试使用以下公式将 Twist 转换为左右轮的速度: float speed_wish_right = (cmd_vel.angle*WHEEL_DIST)/2 + cmd_vel.speed;
我已经在 Ubuntu 18.04 上安装了带有 ROS melodic 的 Gazebo 9。我不断遇到以下问题: 启动 Gazebo 向世界添加一些对象 文件 -> 另存为... 程序卡住,保存窗
我使用什么程序来使用 ROS 框架进行编程,我可以使用 Visual Studio 吗? 我是 ROS 的新手,任何教程或教程程序将不胜感激。 谢谢。 最佳答案 用于 ROS 开发的最常见 IDE 是
我的问题是如何将一个值从一个订阅者的回调函数传递给另一个订阅者。 这有意义吗? import rospy from sensor_msgs.msg import LaserScan, Int32 fr
我正在关注有关如何创建 ROS 自定义消息的“WS Newman”教程。编译时出现以下错误“消息/服务'example_msg/Num'的依赖关系已更改。请重新运行cmake” Num.msg 有 H
我想在catkin工作区之外创建一个ROS发布者节点。可以创建吗? 最佳答案 当然可以。像对待任何其他 cpp 库或 python 包一样对待 ROS。 在Python中,你必须保持PYTHONPAT
PointCloud2的内容在ROS中是什么意思? fields.offset? fields.datatype? fields.count? point_step? row_step? 它的 d
PointCloud2的内容在ROS中是什么意思? fields.offset? fields.datatype? fields.count? point_step? row_step? 它的 d
我实现了一个依赖于其他包的ros包。 这些包依赖于更多的包等等...... 在我的包中构建和运行节点时,如何找出实际使用了哪些包? (除了手动查看所有 package.xml 文件,因为有多种情况,其
我正在做一个关于 ROS 的类(class)项目,并且被困在相当简单的任务上。 我的机器人模型有一个激光扫描仪,我在凉亭中使用我的机器人模型生成了一个包文件 我被要求像在 SLAM 中一样生成占用网格
在做 roslaunch .launch 时我希望在该文件中启动的所有节点仅在它们尚未运行时启动。我该怎么做呢?如果不可能,是否至少可以为每个节点单独执行此操作?如果有人有想法,那么如果您将该代码添
有没有办法获得从Realsense获得的点云中的点到深度图中的像素的映射?点云是从深度图中获得的,但是没有有效深度数据的像素被排除在外。 Realsense API 仅提供将点映射到 RGB 像素的例
我是一名优秀的程序员,十分优秀!