【问题标题】:Using ROS message classes outside of ROS在 ROS 之外使用 ROS 消息类
【发布时间】:2016-09-05 20:46:54
【问题描述】:

我有一个用 Python 编写的 ROS 节点,它捕获消息并将它们写入磁盘(例如,使用 pickle)。我想稍后在 ROS 之外的另一个 Python 脚本中使用这些文件,但我需要导入消息类。

这可能吗?

谢谢!

【问题讨论】:

  • 同时,我正在从 ROS 运行另一个脚本,将数据提取到一个平面文件中。有效,但不是那么优雅,真的:-(
  • “ROS 之外”到底是什么意思?如果您的意思是,应该可以使用任何 python 脚本中的消息类(可能必须获取 setup.bash)。毕竟:你为什么不试试呢?
  • 我想在任何(unix)系统上运行脚本,而不仅仅是那些安装了 ROS 的系统。至于消息类,我找到了 C++ 标头,但没有找到 Python 文件。不过,以一个有趣的想法采购 setup.bash。
  • 好吧,由于消息定义是 ROS 的一部分,显然在没有安装 ROS 的系统上是不可能的。我不知道消息是如何为 Python 端实现的,但我猜它只是 C++ 代码的包装器。

标签: python ros rospy


【解决方案1】:

不幸的是,我认为不可能只导入任何 ROS 依赖项之外的消息文件。例如,如果您查看生成的消息类文件之一:

---/your_catkin_ws/devel/lib/python2.7/dist-packages/your_package/msg/_Message.py

您会发现它至少取决于您的消息中包含的 genpy 和其他消息类型。基本消息相同(/opt/ros/indigo/lib/python2.7/dist-packages/std_msgs/msg)。

虽然您可以尝试复制最少数量的依赖项,直到它最终工作(!),但它有点不优雅,可能会成为一个脆弱的解决方案。

我相信最好的解决方案是将您的消息转换为通用的非 ROS 类型,然后将其存储在您的 pickle 中(基本上就是您已经在做的事情)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多