鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    昇腾Atlas 200I DK A2套件 昇腾官方Ubuntu 22.04 安装ROS2 无法import rospy

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    昇腾atlas rospy
    2
    8
    461
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • V
      VanillaKona
      最后由 编辑

      背景(可选):

      昇腾Atlas 200I DK A2 开发套件,通过SD卡烧录的昇腾官方提供的Ubuntu 22.04 系统,系统登录后默认的HwHiAiUser用户已经开放了sudo权限,用鱼总的一键安装ROS安装了 ROS2 humble

      问题描述:

      按照网帖(忘记哪个链接了)pip3安装的rospy,用的指令是:
      sudo pip3 install rospy==1.15.11 --extra-index-url https://rospypi.github.io/simple/

      但是import显示没有rospy这个包。
      (base) HwHiAiUser@davinci-mini:~$ python3 -c "import rospy"
      Traceback (most recent call last):
      File "<string>", line 1, in <module>
      ModuleNotFoundError: No module named 'rospy'

      具体细节和上下文:

      pip3安装rospy终端输出:
      HwHiAiUser@davinci-mini:~$ sudo pip3 install rospy --extra-index-url https://rospypi.github.io/simple/Looking in indexes: https://pypi.doubanio.com/simple, https://rospypi.github.io/simple/
      Collecting rospy
      WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='raw.githubusercontent.com', port=443): Read timed out. (read timeout=15)")': /rospypi/simple/any/rospy/rospy-1.15.11-py2.py3-none-any.whl
      Using cached https://github.com/rospypi/simple/raw/any/rospy/rospy-1.15.11-py2.py3-none-any.whl (116 kB)
      Requirement already satisfied: rospkg in /usr/local/lib/python3.10/dist-packages (from rospy) (1.5.1)
      Requirement already satisfied: rosgraph-msgs in /usr/local/lib/python3.10/dist-packages (from rospy) (1.11.3.post2)
      Requirement already satisfied: std-msgs in /usr/local/lib/python3.10/dist-packages (from rospy) (0.5.13.post0)
      Requirement already satisfied: genpy<2000 in /usr/local/lib/python3.10/dist-packages (from rospy) (0.6.14)
      Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (from rospy) (1.21.5)
      Requirement already satisfied: roslib in /usr/lib/python3/dist-packages (from rospy) (1.15.8)
      Requirement already satisfied: roscpp in /usr/local/lib/python3.10/dist-packages (from rospy) (1.15.11)
      Requirement already satisfied: rosgraph in /usr/local/lib/python3.10/dist-packages (from rospy) (1.15.11)
      Requirement already satisfied: genmsg in /usr/local/lib/python3.10/dist-packages (from genpy<2000->rospy) (0.5.12)
      Requirement already satisfied: PyYAML in /usr/lib/python3/dist-packages (from rospkg->rospy) (5.4.1)
      Requirement already satisfied: catkin-pkg in /usr/local/lib/python3.10/dist-packages (from rospkg->rospy) (1.0.0)
      Requirement already satisfied: distro>=1.4.0 in /usr/lib/python3/dist-packages (from rospkg->rospy) (1.7.0)
      Requirement already satisfied: docutils in /usr/lib/python3/dist-packages (from catkin-pkg->rospkg->rospy) (0.17.1)
      Requirement already satisfied: pyparsing in /usr/lib/python3/dist-packages (from catkin-pkg->rospkg->rospy) (2.4.7)
      Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from catkin-pkg->rospkg->rospy) (70.0.0)
      Requirement already satisfied: python-dateutil in /usr/lib/python3/dist-packages (from catkin-pkg->rospkg->rospy) (2.8.1)
      Installing collected packages: rospy
      Successfully installed rospy-1.15.11

      尝试过的解决方法:

      sudo pip3 uninstall rospy之后,再次用上面指令安装,import的时候依旧显示没有rospy。

      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        问题出在您尝试通过 pip 直接安装 ROS 1 的 rospy 包到 ROS 2 环境中。rospy 是 ROS 1 的 Python 客户端库,而您正在使用 ROS 2(Humble 版本),其对应的 Python 客户端库是 rclpy 而不是 rospy。

        在 ROS 2 中,您不需要安装 rospy,因为 ROS 2 的架构和 API 与 ROS 1 有很大的不同。如果您需要编写 ROS 2 的 Python 节点,您应该使用 rclpy,这是 ROS 2 的 Python 客户端库。

        解决步骤

        1. 确认 ROS 2 安装:
          确保您已经正确安装了 ROS 2 Humble。您可以通过运行 ros2 --version 来检查 ROS 2 是否已安装及其版本。

        2. 使用 rclpy:
          对于 ROS 2,您应该使用 rclpy 而不是 rospy。这里是一个简单的 ROS 2 Python 节点示例:

          # 导入 ROS 2 Python 客户端库
          import rclpy
          from rclpy.node import Node
          
          def main(args=None):
              rclpy.init(args=args)
              my_node = Node("minimal_subscriber")
          
              # 这里可以添加您的节点逻辑
          
              try:
                  rclpy.spin(my_node)
              except KeyboardInterrupt:
                  pass
              finally:
                  my_node.destroy_node()
                  rclpy.shutdown()
          
          if __name__ == '__main__':
              main()
          

          将上面的代码保存为 minimal_subscriber.py,然后在终端中运行 ros2 run --prefix 'python3 -m' your_package_name minimal_subscriber.py(注意替换 your_package_name 为您实际的包名)。

        3. 安装和配置 ROS 2 包:
          如果您打算开发 ROS 2 包,您需要设置一个工作空间,并创建一个包。您可以使用 colcon 来构建和管理 ROS 2 的包。

          • 设置工作空间:

            mkdir -p ~/dev_ws/src
            cd ~/dev_ws
            python3 -m venv .venv
            source .venv/bin/activate
            pip3 install --upgrade pip setuptools wheel
            pip3 install colcon-common-extensions
            pip3 install -U rosdep
            sudo rosdep init
            rosdep update
            rosdep install --from-paths src --ignore-src -r -y
            
          • 创建一个新的 ROS 2 包:

            cd ~/dev_ws/src
            ros2 pkg create --build-type ament_python my_python_package
            
          • 将您的 Python 脚本放入新创建的包中,并在 setup.py 中适当配置。

          • 构建工作空间:

            cd ~/dev_ws
            colcon build --packages-select my_python_package
            
          • 运行您的节点:

            . install/setup.bash
            ros2 run my_python_package minimal_subscriber
            

        希望这些信息能帮助您解决问题!如果您有任何进一步的问题,请随时提问。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        V 1 条回复 最后回复 回复 引用 0
        • V
          VanillaKona @小伊
          最后由 编辑

          @小伊 好的非常感谢,回答很有用,那请问我应该如何在Ubuntu 22.04 安装rclpy呢?除了源码安装之外还有别的方式吗?

          1 条回复 最后回复 回复 引用 0
          • 小伊小
            机器人小伊
            最后由 编辑

            在Ubuntu 22.04中安装rclpy,除了通过源码安装的方式外,还可以考虑使用ROS 2的官方包管理器来安装,这样通常更为简便。ROS 2在Ubuntu 22.04上对应的版本是Humble。以下是一些建议的步骤来安装rclpy:

            1. 设置ROS 2仓库

            首先,你需要设置ROS 2的仓库,以便能够使用apt(高级包管理工具)来安装ROS 2和相关的Python库。

            1. 打开终端。
            2. 设置你的系统以接受来自packages.ros.org的软件包,这可以通过添加ROS 2的密钥和仓库到你的系统中来完成。你可以按照ROS 2的官方文档中的指示来操作,这些文档会详细说明如何根据你的Ubuntu版本和ROS 2的发布版本(在本例中是Humble)来设置仓库。

            2. 安装ROS 2

            在设置了ROS 2仓库之后,你可以使用apt来安装ROS 2的完整版本,这通常也会包括rclpy。

            sudo apt update
            sudo apt install ros-humble-desktop
            

            注意:如果你只需要ROS 2的某些部分(比如仅用于Python开发的部分),你可以只安装相应的包,而不是整个ros-humble-desktop。然而,为了简化安装过程并确保rclpy可用,安装完整的桌面版本通常是一个好的起点。

            3. 初始化rosdep

            rosdep是一个用于安装ROS包依赖项的工具。虽然它不是直接安装rclpy的,但它是ROS 2生态系统中的一个重要部分,因此建议安装并初始化它。

            sudo apt install python3-rosdep
            sudo rosdep init
            rosdep update
            

            4. 环境设置

            每次打开新的终端窗口时,你都需要设置ROS 2的环境变量。你可以通过在.bashrc文件中添加以下行来自动执行此操作:

            echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
            source ~/.bashrc
            

            5. 验证安装

            安装完成后,你可以通过尝试导入rclpy来验证它是否已正确安装:

            python3 -c "import rclpy; print(rclpy.__version__)"
            

            如果这行命令没有返回错误,并且打印出了rclpy的版本号,那么rclpy就已经成功安装在你的系统上了。

            总结

            以上步骤概述了如何在Ubuntu 22.04上通过ROS 2的官方包管理器安装rclpy。这种方法比从源码安装更简单,因为它会自动处理依赖项和配置问题。如果你遇到任何问题,可以查阅ROS 2的官方文档或寻求社区的帮助。


            以上为生成回答,仅供参考~

            我是小伊,已接入ChatGpt,所有回复,仅供参考~

            V 1 条回复 最后回复 回复 引用 0
            • V
              VanillaKona @小伊
              最后由 VanillaKona 编辑

              @小伊 好的。以下是我成功安装rclpy的参考:
              CSDN标题:ROS2安装问题记录
              By:墨水兰亭
              文章链接:
              https://blog.csdn.net/moshuilangting/article/details/138314354

              以及来自百度大模型的答案:

              1. 设置ROS 2环境(以'foxy'为例,大模型用的foxy,我是humble版本)

              source /opt/ros/foxy/setup.bash

              2. 创建一个新的catkin工作空间

              mkdir -p ~/rclpy_workspace/src
              cd ~/rclpy_workspace

              3. 克隆rclpy源代码

              git clone https://github.com/ros2/rclpy.git src/rclpy

              4. 安装构建依赖

              sudo apt update && sudo apt install -y python3-pip python3-colcon-common-extensions python3-rosdep python3-vcstool

              5. 安装pytest(可选,用于运行测试,我跳过了)

              pip3 install pytest

              6. 安装rclpy依赖

              rosdep install --from-paths src -y

              7. 构建rclpy

              colcon build --packages-select rclpy
              第一遍报了很多警告,再来一遍就ok了

              8. 源码设置环境变量

              source install/local_setup.bash

              9. 检查是否安装成功:

              python -c "import rclpy"
              没报错,结束

              1 条回复 最后回复 回复 引用 0
              • 小伊小
                机器人小伊
                最后由 编辑

                你的安装步骤参考非常详细,涵盖了从ROS 2环境设置到rclpy库安装的整个过程。这里我稍微整理并补充一些可能的注意事项,以确保安装过程更加顺利:

                1. 确保ROS 2环境已正确安装

                • 首先,确保你已经按照ROS 2的官方文档(如对于'foxy'版本)正确安装了ROS 2。这通常包括设置环境变量(如source /opt/ros/foxy/setup.bash)和安装必要的依赖。

                2. 创建工作空间

                • 创建一个新的工作空间(rclpy_workspace)是一个好习惯,这有助于保持项目的整洁和组织性。
                • 确保工作空间内的目录结构正确(src目录应位于工作空间内)。

                3. 克隆rclpy源代码

                • 使用git clone命令从GitHub上克隆rclpy的源代码到src目录下。

                4. 安装构建依赖

                • 安装python3-pip、python3-colcon-common-extensions、python3-rosdep和python3-vcstool是必要的,因为这些工具和库将用于后续的安装和构建过程。
                • 确保使用sudo apt update来更新你的包索引,然后再安装这些依赖。

                5. 安装rclpy依赖

                • 使用rosdep来安装rclpy的依赖项。这通常包括C++库和其他Python库,这些库是rclpy正常工作的基础。
                • --from-paths src选项告诉rosdep在src目录下查找需要安装依赖的ROS包。

                6. 构建rclpy

                • 使用colcon build命令来构建rclpy。通过--packages-select rclpy选项,你可以指定仅构建rclpy包,这有助于加快构建过程。
                • 如果第一次构建时遇到警告或错误,尝试再次运行构建命令,有时这是由于网络问题或依赖项的临时状态导致的。

                7. 设置环境变量

                • 构建完成后,需要设置环境变量以便能够使用新构建的rclpy库。这通常通过source install/local_setup.bash命令完成。

                8. 验证安装

                • 使用Python命令行测试是否能够成功导入rclpy来验证安装是否成功。

                注意事项

                • 确保在构建和测试过程中,你的网络连接是稳定的,因为rosdep和git操作可能需要从互联网下载数据。
                • 如果你的ROS 2安装版本不是'foxy',确保所有命令和依赖项都与你安装的ROS 2版本相匹配。
                • 如果在构建过程中遇到特定于平台的错误(如权限问题或库冲突),请检查ROS 2和rclpy的官方文档或社区论坛以获取帮助。

                遵循这些步骤和注意事项,你应该能够成功安装rclpy并开始在ROS 2项目中使用它。


                以上为生成回答,仅供参考~

                我是小伊,已接入ChatGpt,所有回复,仅供参考~

                V 1 条回复 最后回复 回复 引用 0
                • V
                  VanillaKona @小伊
                  最后由 编辑

                  @小伊 今天我尝试 import rclpy 又报错了,我的问题背景请参考这篇帖子之前的回复。
                  终端执行指令:
                  python -c "import rclpy"

                  报错内容如下:
                  Traceback (most recent call last):
                  File "<string>", line 1, in <module>
                  File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/init.py", line 49, in <module>
                  from rclpy.signals import install_signal_handlers
                  File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/signals.py", line 15, in <module>
                  from rclpy.exceptions import InvalidHandle
                  File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/exceptions.py", line 15, in <module>
                  from rclpy.impl.implementation_singleton import rclpy_implementation as _rclpy
                  File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/impl/implementation_singleton.py", line 32, in <module>
                  rclpy_implementation = import_c_library('._rclpy_pybind11', package)
                  File "/opt/ros/humble/lib/python3.10/site-packages/rpyutils/import_c_library.py", line 39, in import_c_library
                  return importlib.import_module(name, package=package)
                  File "/home/HwHiAiUser/archiconda3/lib/python3.7/importlib/init.py", line 127, in import_module
                  return _bootstrap._gcd_import(name[level:], package, level)
                  ModuleNotFoundError: No module named 'rclpy._rclpy_pybind11'
                  The C extension '/opt/ros/humble/lib/python3.10/site-packages/_rclpy_pybind11.cpython-37m-aarch64-linux-gnu.so' isn't present on the system. Please refer to 'https://docs.ros.org/en/humble/Guides/Installation-Troubleshooting.html#import-failing-without-library-present-on-the-system' for possible solutions

                  1 条回复 最后回复 回复 引用 0
                  • 小伊小
                    机器人小伊
                    最后由 编辑

                    这个错误表明 Python 在尝试导入 rclpy 库时,找不到必要的 C 扩展模块 _rclpy_pybind11。这通常是因为几个可能的原因造成的,以下是一些解决这个问题的步骤:

                    1. 确认 ROS 2 和 Python 版本:
                      你的错误信息中提到了两个不同版本的 Python:一个是 /opt/ros/humble/lib/python3.10/ 下的 Python 3.10,另一个是 /home/HwHiAiUser/archiconda3/lib/python3.7/ 下的 Python 3.7。ROS 2 Humble 默认使用 Python 3.10,因此你应该确保你的环境变量(如 PYTHONPATH)没有错误地指向 Python 3.7 的库。

                      你可以通过运行 python --version 和 which python(或 which python3)来检查当前使用的是哪个 Python 解释器。

                    2. 环境隔离:
                      如果你在使用 Anaconda 或其他 Python 虚拟环境管理工具,确保你的 ROS 2 环境与 Python 虚拟环境是分开的。通常,ROS 2 应该在没有虚拟环境的情况下直接运行。

                    3. 重新安装或更新 rclpy:
                      由于可能存在文件损坏或安装问题,尝试重新安装 rclpy 可能会有所帮助。你可以使用 ROS 2 的包管理器 apt 来重新安装:

                      sudo apt update
                      sudo apt install --reinstall python3-rclpy
                      
                    4. 检查环境变量:
                      确保 LD_LIBRARY_PATH 环境变量包含了 ROS 2 的库目录。这通常会自动设置,但如果出现问题,你可以手动添加:

                      export LD_LIBRARY_PATH=/opt/ros/humble/lib:$LD_LIBRARY_PATH
                      
                    5. 使用正确的 Python 解释器:
                      如果你必须使用特定的 Python 版本(如 Python 3.7),你可能需要为 ROS 2 创建一个新的环境,使用与 ROS 2 兼容的 Python 版本。

                    6. 检查 ROS 2 安装:
                      如果上述步骤都不能解决问题,可能需要重新检查你的 ROS 2 安装。你可以按照 ROS 2 的官方安装指南重新安装 ROS 2。

                    7. 查看文档和社区:
                      访问 ROS 2 的官方文档和社区论坛,看看是否有其他人遇到了类似的问题,并找到了解决方案。

                    希望这些步骤能帮助你解决问题!如果问题依旧存在,请提供更多的系统信息,以便进一步诊断。


                    以上为生成回答,仅供参考~

                    我是小伊,已接入ChatGpt,所有回复,仅供参考~

                    1 条回复 最后回复 回复 引用 0
                    • 第一个帖子
                      最后一个帖子
                    皖ICP备16016415号-7
                    Powered by NodeBB | 鱼香ROS