在ROS2中使用Python虚拟环境

前言

在ROS2开发中,我们经常需要使用不同的Python包和依赖。使用Python虚拟环境可以帮助我们更好地管理这些依赖,避免包冲突,同时保持系统Python环境的清洁。本文将介绍如何在ROS2中配置和使用Python虚拟环境。

创建虚拟环境

  1. 首先,确保ROS2的环境已经被成功source:

    1
    source /opt/ros/foxy/setup.sh
  2. 在你的ROS2工作空间中创建虚拟环境

    1
    2
    cd ~/ros2_ws
    python3 -m venv venv --system-site-packages --symlinks
  • 第二个venv 是虚拟环境的名称
  • 如果venv 创建在了workspace中,那么需要创建COLCON_IGNORE文件,避免被colcon编译
    1
    touch COLCON_IGNORE
  1. 激活虚拟环境

    1
    source venv/bin/activate
  2. 在虚拟环境中安装必要的Python包

    1
    pip install torch # etc.

在ROS2中使用虚拟环境

  1. 在每一个package的setup.cfg文件中,添加以下代码:

    1
    2
    [build_scripts]
    executable = /usr/bin/env python3
  2. 编译你的package

    1
    colcon build
  3. 运行你的package

    1
    2
    source install/setup.bash
    ros2 run my_package my_node

注意事项

  • 每次打开新终端都需要重新激活虚拟环境
  • 确保在虚拟环境中安装了所有必要的Python依赖
  • 如果遇到找不到ROS2包的问题,检查是否正确source了ROS2和工作空间的setup文件

其他问题

解决方案:

  1. 在虚拟环境中强制重新安装colcon。
    1
    2
    3
    4
    5
    6
    source venv/bin/activate
    pip install --force-reinstall colcon-core setuptools==$(pip list --no-index --format=json | jq -r '.[] | select(.name=="setuptools").version')
    pip install colcon-common-extensions
    pip install -U pip
    pip install -U setuptools
    pip install -U importlib_metadata
  2. 使用当前环境的colcon编译ROS2包。
    1
    python -m colcon build --symlink-install

2. 使用anaconda虚拟环境。

思路与使用venv类似。

  1. 创建虚拟环境
    1
    conda create -n myenv python=3.8
  • 保证Python版本与系统Python版本一致。比如:ROS2 foxy 对应 Python 3.8
  1. 激活虚拟环境

    1
    conda activate myenv
  2. 在虚拟环境中安装必要的Python包

    1
    pip install torch # etc.
  3. 在ROS2的package中,添加以下代码:

    1
    2
    [build_scripts]
    executable = /usr/bin/env python3
  4. 编译你的package

    1
    colcon build
  5. 运行你的package

    1
    2
    source install/setup.bash
    ros2 run my_package my_node

参考资料

  1. Running ROS2 Nodes in a Python Virtual Environment - ROS2虚拟环境配置指南
  2. ROS2 官方文档:使用Python包 - Python包管理最佳实践
  3. ROS2 Issue: Python环境问题讨论 - 社区解决方案
  4. Setuptools Issue: 虚拟环境兼容性 - Setuptools相关问题解决