【ROS 踩坑记录】ImportError: No module named yaml - Introduction to tf

文章目录

  • 前言
  • 报错
  • 解决方案
    • 详细过程
    • 最终解决——可直接跳转到此处
  • 后记

前言

本期 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),无语。

由下面几个博客得到启发,看看是不是系统内的python2python3冲突的问题:

  • 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包到底做了什么
    【ROS 踩坑记录】ImportError: No module named yaml - Introduction to tf_第1张图片

最终解决——可直接跳转到此处

解决方案是:

sudo apt install python-is-python3

果不其然,安装python-is-python3的时候提示我:Ubuntu20.04将卸载python-is-python2
【ROS 踩坑记录】ImportError: No module named yaml - Introduction to tf_第2张图片
重新执行:

roslaunch turtle_tf turtle_tf_demo.launch

然后在终端窗口中按动键盘上下左右,一只乌龟就会自动跟随受我们控制的另外一只小乌龟了,实验demo运行成功!

后记

想要炼丹跑深度学习就要conda,但是ROS又是一套自己的Python环境,还希望语义分割能结合SLAM,真不容易啊。能坚持看我啰嗦到这里的就给我一个赞吧!

你可能感兴趣的:(ROS,SLAM,ROS,Ubuntu20.04,tf,yaml,turtlesim)