昇腾Atlas 200I DK A2套件 昇腾官方Ubuntu 22.04 安装ROS2 无法import rospy
-
背景(可选):
昇腾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。
-
问题出在您尝试通过 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 客户端库。解决步骤
-
确认 ROS 2 安装:
确保您已经正确安装了 ROS 2 Humble。您可以通过运行ros2 --version
来检查 ROS 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
为您实际的包名)。 -
安装和配置 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
-
希望这些信息能帮助您解决问题!如果您有任何进一步的问题,请随时提问。
以上为生成回答,仅供参考~
-
-
@小伊 好的非常感谢,回答很有用,那请问我应该如何在Ubuntu 22.04 安装rclpy呢?除了源码安装之外还有别的方式吗?
-
在Ubuntu 22.04中安装
rclpy
,除了通过源码安装的方式外,还可以考虑使用ROS 2的官方包管理器来安装,这样通常更为简便。ROS 2在Ubuntu 22.04上对应的版本是Humble。以下是一些建议的步骤来安装rclpy
:1. 设置ROS 2仓库
首先,你需要设置ROS 2的仓库,以便能够使用
apt
(高级包管理工具)来安装ROS 2和相关的Python库。- 打开终端。
- 设置你的系统以接受来自
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的官方文档或寻求社区的帮助。
以上为生成回答,仅供参考~
-
@小伊 好的。以下是我成功安装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_workspace3. 克隆
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"
没报错,结束 -
你的安装步骤参考非常详细,涵盖了从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项目中使用它。
以上为生成回答,仅供参考~
- 首先,确保你已经按照ROS 2的官方文档(如对于'foxy'版本)正确安装了ROS 2。这通常包括设置环境变量(如
-
@小伊 今天我尝试 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 -
这个错误表明 Python 在尝试导入
rclpy
库时,找不到必要的 C 扩展模块_rclpy_pybind11
。这通常是因为几个可能的原因造成的,以下是一些解决这个问题的步骤:-
确认 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 解释器。 -
环境隔离:
如果你在使用 Anaconda 或其他 Python 虚拟环境管理工具,确保你的 ROS 2 环境与 Python 虚拟环境是分开的。通常,ROS 2 应该在没有虚拟环境的情况下直接运行。 -
重新安装或更新 rclpy:
由于可能存在文件损坏或安装问题,尝试重新安装rclpy
可能会有所帮助。你可以使用 ROS 2 的包管理器apt
来重新安装:sudo apt update sudo apt install --reinstall python3-rclpy
-
检查环境变量:
确保LD_LIBRARY_PATH
环境变量包含了 ROS 2 的库目录。这通常会自动设置,但如果出现问题,你可以手动添加:export LD_LIBRARY_PATH=/opt/ros/humble/lib:$LD_LIBRARY_PATH
-
使用正确的 Python 解释器:
如果你必须使用特定的 Python 版本(如 Python 3.7),你可能需要为 ROS 2 创建一个新的环境,使用与 ROS 2 兼容的 Python 版本。 -
检查 ROS 2 安装:
如果上述步骤都不能解决问题,可能需要重新检查你的 ROS 2 安装。你可以按照 ROS 2 的官方安装指南重新安装 ROS 2。 -
查看文档和社区:
访问 ROS 2 的官方文档和社区论坛,看看是否有其他人遇到了类似的问题,并找到了解决方案。
希望这些步骤能帮助你解决问题!如果问题依旧存在,请提供更多的系统信息,以便进一步诊断。
以上为生成回答,仅供参考~
-