我正在使用 ROS 软件包,并且来自 this 教程。鉴于当前工作目录或 PATH 中列出的任何其他目录中任何地方都没有
AddTwoIntsResponse
,这个 import 语句令人惊讶地有效。另外,为什么会导入 .srv?
# add_two_ints_server.py
from beginner_tutorials.srv import AddTwoInts, AddTwoIntsResponse
当前工作目录是
~/catkin_ws/src/beginner_tutorials/srv
这是我的ROS目录布局:
catkin_ws
|-- src
| `-- beginner_tutorials
| |-- scripts
| | `-- add_two_ints_server.py
| `-- srv
| `-- AddTwoInts.srv
|-- build
`-- devel
AddTwoInts.srv的内容是:
int64 a
int64 b
---
int64 sum
根据我的理解,这应该抛出一个
ImportError: cannot import name 'AddTwoIntsResponse'
,但事实并非如此。导入任何其他文件时说: from beginner_tutorials.srv import foo
会抛出ImportError。 我的理解哪里出了问题?
|-- src
| `-- beginner_tutorials
| |-- scripts
| | `-- add_two_ints_server.py
| `-- srv
| `-- AddTwoInts.srv
|-- build
|-- devel // this is where your modules are imported from
当您使用catkin_make构建包时,'catkin`会为.srv文件中定义的服务类型生成相关的python文件,并将它们放在catkin_ws/devel/lib/your-python-version/dist-packages/package下-名称/srv。
如果您的工作区已获取,则 catkin_ws/devel/lib/your-python-version/dist-packages/ 已添加到您的 PYTHONPATH 中,这就是您成功导入它们的方式。
对于您正在使用的教程包,如果您安装了教程的二进制文件,即使您没有获取当前的 catkin 目录,导入也可能会起作用。这样,python 模块就位于 /opt/ros/ros-version/lib/your-python-version/dist-packages/ 下,这又是 PYTHONPATH 的一部分。 (如果ROS环境可用)
https://perfect-dev.tistory.com/62 了解此博客。它是韩语的,但您可能会发现将其翻译成英语会很有帮助。
这是我自己解决的。