问题描述
今天发现了一个ROS工程中python包很坑的一个地方,就是难以直接import自己写的.py文件。
直接用命令
python3 test.py
运行是没问题的,但是一但使用rosrun或者roslaunch命令就会报错:
rosrun control test.py
roslaunch control xxx.launch
错误提示如下:
Traceback (most recent call last):
File "/home/lanx/Program/robot/devel/lib/control/test.py", line 15, in <module>
exec(compile(fh.read(), python_script, 'exec'), context)
File "/home/lanx/Program/robot/src/control/scripts/test.py", line 5, in <module>
import Agent
ModuleNotFoundError: No module named 'Agent'
问题原因
试了网上的各种方法,比如
- 添加setup.py配置catkin_python_setup(),失败
- 将需要import的.py文件放到子文件夹内,并添加__init__.py,失败
- 将需要import的.py文件也编译成ROS的node,然后import,失败
折腾了一天,后面发现根本不用在ROS包的CMakeLists.txt里面声明:
catkin_install_python(PROGRAMS
scripts/test.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
需要创建成ROS节点的.py文件,只需要给予权限即可在source后,通过rosrun命令找到
chmod +x test.py
使用时将test.py换成你自己对应的.py文件