在ROS之外使用ROS消息类

3

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

这可行吗?

谢谢!


同时,我正在从ROS运行另一个脚本,将数据提取到一个平面文件中。虽然可行,但并不是很优雅 :-( - Michael Bar-Sinai
你所说的“ROS之外”具体是什么意思?如果你指的是可以使用消息类从任何Python脚本中调用(setup.bash可能需要被源化),那应该是可行的。毕竟,为什么不试一下呢? - luator
我想在任何(Unix)系统上运行脚本,而不仅仅是已安装ROS的系统。至于消息类,我找到了C ++头文件,但没有Python文件。在有趣的想法中,引用setup.bash。 - Michael Bar-Sinai
1
既然消息定义是ROS的一部分,那么在没有安装ROS的系统上显然是不可能实现的。我不知道Python端的消息是如何实现的,但我猜测它只是C++代码的一个包装器。 - luator
1个回答

4
很抱歉,我认为无法在任何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中(因此基本上是您已经在做的事情)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接