ROS用python发布节点调用自定义.py包方法,解决No module named ‘xxx’问题

 用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启动多个节点的情况也不适用

http://t.csdnimg.cn/ognzs

 最后是靠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>

成功解决

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值