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

Posted

技术标签:

【中文标题】ROS catkin 工作区中的 Python 模块和子模块【英文标题】:Python Modules and submodules in ROS catkin workspace 【发布时间】:2018-06-25 20:28:20 【问题描述】:

我正在尝试在 ROS 中运行 python 代码,它包含一个我必须 pip 安装的模块(不是为 ROS 制作的模块)。当我尝试在运行 roscore 的 catkin 工作区中运行代码时,它找不到我安装的模块并给我一个 ImportError。知道如何使用 rospy 在 ROS 上运行已经创建的模块吗?

【问题讨论】:

你试过像python filename.py一样直接运行吗?这可能会奏效。但是,实际上您必须在 CMakelists.txt 文件中包含该库。 @akshayk07 CMakeLists.txt 中无需提及 Python 模块。只要 Python 包安装正确,它应该可以使用,无需对 ROS 包进行任何额外配置。 @Priyal Gosar:可以在 ROS 包之外使用 Python 模块吗?例如。你能在交互式 Python 终端中导入它吗?正如我上面写的,应该不需要在 ROS 包中做任何特殊的事情。 把你的源代码和错误完全追溯。 【参考方案1】:

确保您可以找到该模块

这里有 3 个选项。它们都应该工作并且按照hackiness的顺序排列。

    您可以像 ros numpy tutorial 一样将模块添加到 package.xml。

    <build_depend>python-numpy</build_depend>    
    <run_depend>python-numpy</run_depend>
    

    在 .bashrc 中设置 $PTYHONPATH 环境变量:

    export PYTHONPATH=$PYTHONPATH:/path/to/your/package_or_module
    

    在你的python代码中导入模块之前注入一个路径:

    import sys
    sys.path.insert(0, "/path/to/your/package_or_module")
    

确保您正确运行程序

    在运行程序之前为您的 .bashrc 和 catkin 工作区提供资源。

    如果您尝试使用rosrun package_name filename.py,则需要确保该文件是可执行文件:

    chmod +x pythonfile.py
    

    并且python文件的顶部应该有代码:

    #!/usr/bin/env python
    

    考虑直接使用 python 来运行文件,就像提到的 akshayk07 一样

    python filename.py
    

【讨论】:

以上是关于ROS catkin 工作区中的 Python 模块和子模块的主要内容,如果未能解决你的问题,请参考以下文章

完成 catkin 构建后,ROS Python 脚本不可执行

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

ROS环境中的构建错误(catkin)

通过 CMake 在 catkin 工作场所外使用 ROS 自定义消息

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

如何编写ros的python程序