使用 colcon 在 Robomaker ROS 工作区中安装 python 模块

Installing python module in Robomaker ROS workspace with colcon

我正在使用 AWS RoboMaker 开发基于云的机器人应用程序。我正在使用 ROS Kinetic, with the build tool colcon.

我的机器人应用程序依赖于自定义 python 模块,该模块必须在我的工作区中。这个 python 模块是由 colcon 作为 python 包构建的,而不是 ROS 包。 This page explains how to do that with catkin, but this example 展示了如何使其适应 colcon。所以最后我的工作区看起来像这样:

my_workspace/
        |--src/
            |--my_module/
            |     |--setup.py
            |     |--package.xml
            |     |--subfolders and python scripts...
            |--some_ros_pkg1/  
            |--some_ros_pkg2/
            |...    

但是命令:colcon build <my_workspace> 构建了所有 ROS 包,但未能将我的 python 模块构建为包。

这是我得到的错误:

Starting >>> my-module
[54.297s] WARNING:colcon.colcon_ros.task.ament_python.build:Package 'my-module' doesn't explicitly install a marker in the package index (colcon-ros currently does it implicitly but that fallback will be removed in the future)
[54.298s] WARNING:colcon.colcon_ros.task.ament_python.build:Package 'my-module' doesn't explicitly install the 'package.xml' file (colcon-ros currently does it implicitly but that fallback will be removed in the future)



--- stderr: my-module                                                                     
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: setup.py --help [cmd1 cmd2 ...]
   or: setup.py --help-commands
   or: setup.py cmd --help

error: invalid command 'egg_info'
---
Failed   <<< my-module [0.56s, exited with code 1]

我发现 this issue 似乎相关,因此尝试了:pip install --upgrade setuptools ...失败并显示错误消息:

Collecting setuptools
  Using cached https://files.pythonhosted.org/packages/7c/1b/9b68465658cda69f33c31c4dbd511ac5648835680ea8de87ce05c81f95bf/setuptools-50.3.0.zip
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "setuptools/__init__.py", line 16, in <module>
        import setuptools.version
      File "setuptools/version.py", line 1, in <module>
        import pkg_resources
      File "pkg_resources/__init__.py", line 1365
        raise SyntaxError(e) from e
                                ^
    SyntaxError: invalid syntax
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-uwFamt/setuptools/

然后 pip3 install --upgrade setuptools,我得到:

Defaulting to user installation because normal site-packages is not writeable
Requirement already up-to-date: setuptools in /home/ubuntu/.local/lib/python3.5/site-packages (50.3.0)

我有 Python 3.5.2 和 Python 2.7,但我不知道 colcon 使用哪个。

所以我不知道接下来要尝试什么,真正的问题是什么。欢迎任何帮助!

我设法正确安装了我的包及其依赖项。我开发了下面的方法,以防有一天它能对某人有所帮助!

我的灵感主要来自 this old DeepRacer repository

问题中的工作区树是错误的。它应该是这样的:

my_workspace/
        |--src/
            |--my_wrapper_package/
            |     |--setup.py
            |     |--my_package/
            |          |--__init__.py
            |          |--subfolders and python scripts...
            |--some_ros_pkg1/  
            |--some_ros_pkg2/
  • my_wrapper_package 可能包含多个 python 自定义包。
  • 一个很好的 setup.py 例子是 this one.
  • 你不应该把 package.xml 放在 setup.py 旁边:colcon 只会查看 package.xml 中声明的依赖项,而不会收集 pip 包。
  • 有时删除由 colcon 在 install/build/ 中生成的文件夹 my_wrapper_package 可能会有帮助。这样做会强制 colcon 从头开始​​重建和捆绑。