我正在使用ROS包,来自this教程。考虑到当前工作目录或路径中列出的任何其他目录中没有AddTwoIntsResponse
,这个导入语句出人意料地有效。还有,为什么要导入.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
会抛出一个导入错误
我的理解哪里出了问题
使用catkin_make构建包时,“catkin”会为.srv文件中定义的服务类型生成相关的python文件,并将它们放在catkin_ws/devel/lib/您的python版本下/dist packages/包名/srv
如果您的工作区是源代码,那么catkin_ws/devel/lib/您的python版本/dist packages/已经添加到您的PYTHONPATH中,这就是您能够成功导入它们的方式
对于您正在使用的教程包,如果您安装了教程的二进制文件,则即使您尚未获取当前catkin目录的源代码,导入也可能会起作用。通过这种方式,python模块驻留在/opt/ros/ros版本/lib/您的python版本/dist包/下,这也是PYTHONPATH的一部分。(如果ROS env可用)
相关问题 更多 >
编程相关推荐