在 ROS catkin 工作区中定义和使用 Python 类

Posted

技术标签:

【中文标题】在 ROS catkin 工作区中定义和使用 Python 类【英文标题】:Defining and using a Python class within a ROS catkin workspace 【发布时间】:2017-01-06 19:35:46 【问题描述】:

我正在运行 ROS Indigo。我有一个应该很简单的问题:我的包中有一个实用程序类,我希望可以从我们的脚本中调用它。它只需要在我们自己的包中调用即可;我不需要它对其他 ROS 包可用。

我在文件 HandControl.py 中定义了一个名为 HandControl 的类。我所有尝试导入它或在不导入的情况下使用它都失败了。我应该把它放在 catkin 工作区的什么位置——包的根目录,还是放在脚本中?我在任何地方都需要__init.py__吗(我已经尝试了几个地方)?

【问题讨论】:

(1) 请显示您的项目结构(2) 显示您在导入失败时获得的完整回溯。 【参考方案1】:

在这里遵循 Python 和 ROS 的标准是一个很好的做法。脚本通常放置在/script 目录中,它们不应该被导入到其他python 脚本中。可重用的 Python 代码是 Python 模块的标志。 Python 模块应该放在/src/package_name 中,你也应该在那里创建__init__.py。该模块将在您的 catkin 工作区中随处可用。这种结构很有可能会在未来帮助您构建事物,即使您目前似乎不需要它。项目通常会增长,遵循指南有助于维护良好的代码。更多具体细节请查看python doc。

【讨论】:

【参考方案2】:

艾丽卡,

请参阅this school 项目,它是用 Python 编写并在 ROS Indigo 上运行的。如果您查看/scripts 文件夹,您可以看到从其他脚本调用的自定义类的示例。如果您查看 /launch 中的启动文件,您可以看到配置 ROS 节点的示例 - 这可能是您的问题。

【讨论】:

自定义类是哪个?我在这里看到不少,它们看起来像标准的 ROS 节点。我的班级不是节点。 好的,原来我的问题出在其他地方;我重做了 catkin 工作区流程,现在就导入而言一切正常。也就是说,您的项目是一项有价值的健全性检查,所以我投了赞成票并感谢您。

以上是关于在 ROS catkin 工作区中定义和使用 Python 类的主要内容,如果未能解决你的问题,请参考以下文章

如何编写ros的python程序

ROS catkin 工作区中的 Python 模块和子模块

在 ROS 工作空间中使用 catkin_make 时 Qt 出现的问题

命令行无法在 Ubuntu 14.04 中为 ROS 创建 catkin 工作区

ROS 工作空间、package 及 catkin 编译系统

可以在 catkin 工作空间之外创建 ROS 节点吗?