用roslaunch试图调用py写的节点时出现错误,无法import自定义包
Traceback (most recent call last):
File "/home/kagami/workspace/ws_test/devel/lib/vtest/image_feature.py", line 15, in <module>
exec(compile(fh.read(), python_script, 'exec'), context)
File "/home/kagami/workspace/ws_test/src/vtest/scripts/image_feature.py", line 4, in <module>
import pose_est
ModuleNotFoundError: No module named 'pose_est'
原因是在调包时候搜索到了devel/lib/package_name文件夹里的同名py文件(cmakelists里install生成的),尝试了很多方法试图解决都失败,看到了下面一个强制该权限rosrun启动的方法,但对于我要roslaunch启动多个节点的情况也不适用
最后是靠launch文件里修改PYTHONPATH成功的,直接rosrun应该也是这个原理,因为rosrun会自动生成当前文件文件的PYTHONPATH。
解决方法如下:
1.节点py文件和要调用的自定义包py文件都放在scripts文件夹下
2..Cmakelists里正常添加节点py文件,your_node改成自己节点的名字
catkin_install_python(PROGRAMS
scripts/your_node.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
3.launch文件里添加以下内容,your_package改成自己的包名
<!-- 在你的 .launch 文件中 -->
<launch>
<env name="PYTHONPATH" value="$(find your_package)/src:$(env PYTHONPATH)"/>
<!-- 其他节点启动 -->
</launch>
成功解决