杂文(20)一个究极sima问题:pycharm中报错:rospkg.common.ResourceNotFound tf2_ros

最后更新于2021年6月29日 14:38:56
首先说明,我的tf2_ros这个包是有的,位于/opt/ros/kinetic/lib/python2.7/dist-packages文件夹下,这个没问题,然后用rospack find tf2_ros也是能找到它的位置的,网上翻了一圈,没有一个是我这种情况的,难受。

  File "/opt/ros/kinetic/lib/python2.7/dist-packages/tf_conversions/__init__.py", line 28, in <module>
    from posemath import *
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/tf_conversions/posemath.py", line 29, in <module>
    from tf import transformations
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/tf/__init__.py", line 28, in <module>
    from tf2_ros import TransformException as Exception, ConnectivityException, LookupException, ExtrapolationException
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/tf2_ros/__init__.py", line 39, in <module>
    from .buffer_interface import *
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/tf2_ros/buffer_interface.py", line 32, in <module>
    import roslib; roslib.load_manifest('tf2_ros')
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslib/launcher.py", line 62, in load_manifest
    sys.path = _generate_python_path(package_name, _rospack) + sys.path
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/roslib/launcher.py", line 93, in _generate_python_path
    m = rospack.get_manifest(pkg)
  File "/home/jiayu/.local/lib/python2.7/site-packages/rospkg/rospack.py", line 171, in get_manifest
    return self._load_manifest(name)
  File "/home/jiayu/.local/lib/python2.7/site-packages/rospkg/rospack.py", line 215, in _load_manifest
    retval = self._manifests[name] = parse_manifest_file(self.get_path(name), self._manifest_name, rospack=self)
  File "/home/jiayu/.local/lib/python2.7/site-packages/rospkg/rospack.py", line 207, in get_path
    raise ResourceNotFound(name, ros_paths=self._ros_paths)
rospkg.common.ResourceNotFound: tf2_ros

这段是探索过程,不想看可以不看:
如上述报错所示,tf2_ros的__init__.py中 import 了roslib 库并且调用了load_manifest函数,我在阅读源码的过程中发现该函数是根据’tf2_ros’这个参数,去名为self的rospack实例(抱歉不是很会python,不知道这种术语叫什么,应该叫实例吧)下,根据_location_cache去找。在这个过程中由于没有相应的资料,并且对语言本身知之甚少,我没搞明白所谓的location cache和load manifest是干嘛的。


但是我注意到self.ros_path这个属性是空的,按理来说应该是有东西的才对,于是我从此处继续往里阅读源码,发现这里的ros_path是从os.environ这个函数中获取环境变量’ROS_ROOT’和’ROS_PACKAGE_PATH’并组成ros_path属性,我无论在export | grep ROS 还是在env | grep ROS 中都能查到这两个环境变量,但是os.environ却找不到。现在问题变成了如何在os.environ中加入上述两个环境变量


又折腾了半天,真没搞出来,我尝试在ubuntu的terminal中输入:

import os
os.system('export ROS_ROOT=/opt/ros/kinetic/share/ros')

这样在terminal里面是能找到了,但是我无论在pycharm的terminal里查询、还是直接跑程序,都找不到。
最后我找到个好方法:在pycharm的run->Edit Configration中添加环境变量(environment variables),两个环境变量都添加好之后,成功解决。

这一点点破事折腾一天半,服了服了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值