从 ROS 包导入时出现 ModuleNotFoundError



我使用了一个仅适用于ROS Indigo的机器人模拟器。我还必须使用Tensorflow和Jupyter Notebook,所以我用Python3.6创建了一个虚拟环境。

我想从笔记本中的模拟器包导入文件。因此,在我为 virtualenv 获取 bin/activate 后,我从我的 catkin 工作区获取 devel/setup.bash。但即使这样做了,我也会收到以下错误

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-8-8370e76446ee> in <module>
----> 1 import herbpy
~/my_workspace/devel/lib/python2.7/dist-packages/herbpy/__init__.py in <module>
33 for __execfile in __execfiles:
34     with open(__execfile, 'r') as __fh:
---> 35         exec(__fh.read())
36     del __fh
37     del __execfile
~/my_workspace/devel/lib/python2.7/dist-packages/herbpy/__init__.py in <module>
ModuleNotFoundError: No module named 'herb'

我尝试运行一个 python 文件导入此模块(在环境中(。它只在python2上运行。但是对于python2,我不能使用Tensorflow。

如何在笔记本中导入此文件?

有几件事。请记住,您可以在脚本中指定要通过 shebang 运行的 python 版本:

#!/usr/bin/env python  # For "both" versions, not recommended for ros
#!/usr/bin/env python2 # For ros, to access the python/pip packages only installed for py2
#!/usr/bin/env python3 # For python3 code, to avoid that 'python' usually selects py2

您可以通过以下方式从启动文件中调用不同的 python 可执行文件:

<?xml version="1.0"?>
<launch>
<!-- py3_ex.launch -->
<node name="call_py3" pkg="my_new_pkg" type="call_py3.py" output="screen">
</node>
</launch>
#!/usr/bin/env python3
# call_py3.py
# Try to print out the python version
import sys
import platform
#import rospy
#rospy.init_node("call_py3");
print("nnPython Version:n")
print(sys.version)
print(platform.python_version())
print("nn")
#rospy.spin()

上面的脚本将运行python3代码(打印版本号(,包括tensorflow。问题是,在尝试在py3而不是py2上import rospy时,它找不到它的一些依赖项(例如rospkg(并给出致命错误。

为了解决这个问题,(假设你没有切换到 Ubuntu 20 + ROS Noetic,支持本机 py3,或者只使用 py2(,你可以从 py2 ros 节点调用 py3 脚本,例如使用子进程和管道。或者更好的是,套接字udp通过本地主机发送您的数据/图像/结果/输入,这可能是最简单的方法。要做到这一点,(它有效!(与两端的本地主机(127.0.0.1(随机端口(例如5050(建立import socketudp连接。启动两个脚本。您的 py3 脚本无法import rospy,但它可以导入 ros msgs:from sensor_msgs.msg import Image。你可以找到一种序列化它的方法(有多种方法可以将 py obj 转换为字符串并返回(。

设置 python3的一个更痛苦的方法(但之后应该更容易使用(是以某种方式替换 python2 包以使用 python3 的 ros。那里有一堆指南,很多人遇到了SO上发布的问题。

相关内容

  • 没有找到相关文章

最新更新