前言
本期 ROS 踩坑记录:tf
学习系列
目前搭建的测试环境为:Ubuntu20.04 ROS-Noetic
报错
按照ROS官网教程,学习tf
系列的第一个Tutorial
:tf/Tutorials/Introduction to tf - ROS Wiki,不料出师不利,运行
roslaunch turtle_tf turtle_tf_demo.launch
上来就报错,
ImportError: No module named yaml
虽然官网有给出一个报错的解决方案的链接[turtle_pointer-6] process has died when running tf tutorial - ROS Answers: Open Source Q&A Forum,但是这个报错和我的报错不一样,我看有人出现了和我一样的问题module yaml not found - ROS Answers: Open Source Q&A Forum,但是这个问题至今还没有被解决。
这里也先记录下来,等我解决之后再来填坑。
解决方案
更新解决日期:2022-03-05
。
详细过程
注意到评论区给出的回答有:
sudo apt install python3-yaml
我执行完后再次运行
roslaunch turtle_tf turtle_tf_demo.launch
这次果然没有再次报错ImportError: No module named yaml
,而是出现了新的报错:
ImportError: No module named rospkg
我寻思这是不是因为Anaconda
的python环境和ROS
的不兼容,摸索了一圈发现不是因为这个,那咱就直接安装rospkg
,官网rospkg - ROS Wiki的建议是用apt而不是pip因为能够自动更新并且更快:
sudo apt install python-rospkg
执行完出现:Requirement already satisfied: rospkg in /usr/lib/python3/dist-packages (1.4.0)
,无语。
由下面几个博客得到启发,看看是不是系统内的python2
和python3
冲突的问题:
- python error exception :Solve the ImportError: No module named rospkg problem by specifying a python interpreter
- 通过指定python解释器解决ImportError: No module named rospkg的问题_m0_37627986的博客-CSDN博客——把上面那篇翻译了一下
- ImportError: No module named rospkg · Issue #33 · floatlazer/semantic_slam
直接敲python
,显示版本python2.7.18
,敲python3
,显示版本python3.8.10
;并且在python2.7.18
环境中执行import rospkg
报错,而在python3.8.10
环境中执行import rospkg
可以正常导入,结合另一个信息的判断:ROS Noetic不再维护Python2全面使用Python3(Python3.8)
,我估计就是roslauch
的时候是在Python2
的环境中执行import rospkg
的。
接下来参考ROS学习笔记报错篇(一):Publisher与Subscriber两种编程实现中报错解决_LacyExsale的博客-CSDN博客一文对于ImportError: No module named rospkg
报错原因的分析,发现这也恰是我存在的问题:
报错原因:ROS noetic 使用的是python3.x版本,我的Ubuntu默认使用python2.7版本
更深层次的解读参考:
- ImportError: No module named rospkg - ROS Answers: Open Source Q&A Forum
- python-is-python3 package in Ubuntu 20.04 - what is it and what does it actually do? - Ask Ubuntu——解读了
Ubuntu20.04
中的python-is-python3
包到底做了什么
最终解决——可直接跳转到此处
解决方案是:
sudo apt install python-is-python3
果不其然,安装python-is-python3
的时候提示我:Ubuntu20.04
将卸载python-is-python2
重新执行:
roslaunch turtle_tf turtle_tf_demo.launch
然后在终端窗口中按动键盘上下左右,一只乌龟就会自动跟随受我们控制的另外一只小乌龟了,实验demo运行成功!
后记
想要炼丹跑深度学习就要conda
,但是ROS
又是一套自己的Python
环境,还希望语义分割能结合SLAM,真不容易啊。能坚持看我啰嗦到这里的就给我一个赞吧!