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

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

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

【问题讨论】:

  • (1) 请显示您的项目结构(2) 显示您在导入失败时获得的完整回溯。

标签: python ros


【解决方案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 工作区流程,现在就导入而言一切正常。也就是说,您的项目是一项有价值的健全性检查,所以我投了赞成票并感谢您。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多