0. 前言

0.1 ROS python环境不兼容问题

之前一直用Ubuntu 18.04双系统跑ROS,但是发现如果我想用python3(比如pytorch),ROS自带的2.7是不兼容的(尤其是tf和tf2),总是报错。于是找了一些解决办法,最主要的就是拿自己的python3(例如anaconda里创建的环境或者pycharm创建的虚拟环境中的python3)来去编译ROS中的包(例如geometry2)。

ROS Melodic 上部署python3 环境

catkin_make --cmake-args -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/home/yunlong/Projects/multi_explore/venv/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so

编译(catkin_make)的时候也有很多奇奇怪怪的错,调了之后编译能过去了,但是我roslaunch rviz和gazebo世界的时候又报tf的错了:

Traceback (most recent call last):
  File "/opt/ros/melodic/lib/gazebo_ros/spawn_model", line 34, in <module>
    from tf.transformations import quaternion_from_euler
  File "/opt/ros/melodic/lib/python2.7/dist-packages/tf/__init__.py", line 30, in <module>
    from tf2_ros import TransformException as Exception, ConnectivityException, LookupException, ExtrapolationException
  File "/home/yunlong/Projects/multi_explore/devel/lib/python3/dist-packages/tf2_ros/__init__.py", line 34, in <module>
    exec(__fh.read())
  File "<string>", line 38, in <module>
  File "/home/yunlong/Projects/multi_explore/devel/lib/python3/dist-packages/tf2_py/__init__.py", line 34, in <module>
    exec(__fh.read())
  File "<string>", line 38, in <module>
ImportError: dynamic module does not define init function (init_tf2)

这就很难顶了。于是决定换Ubuntu 20.04,因为它内置的ROS就是python3版本支持的。

0.2 Ubuntu 18.04内置升级到 Ubuntu 20.04 新旧软件包冲突和dpkg警告问题

由于原来的双系统版本是18.04,我又不想重装系统,于是便想到一个朴素的办法,就是和Windows或者手机系统一样,自己从内部升级上去。也确实可以这么做,但是随即而来的,就是每次我要apt安装软件包时,就会有警告:

dpkg:警告:无法找到软件包 XXX的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

于是照着这篇笔记的方法做了一遍,还是不管用。。。

dpkg:警告:无法找到软件包 XXX的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。(详细的解决过程)_dpkg:警告:无法找到软件包 libjsoncpp1:amd64 的文件名列表文件,现假定该软件包-CSDN博客

感觉就是因为内置升级上去的,就会有很多问题,所以不如自己重新安装。

1. 卸载Ubuntu 18.04

Win10+Ubuntu20双系统从安装到卸载,UEFI+GPT_ubuntu20卸载-CSDN博客

其实Ubuntu是个文件系统,除了文件之外,能让它启动的就是引导项和其所在的EFI系统分区。所以除了按照安装时所记录下的Ubuntu系统各个分区格式化(其实都不用格式化,后续安装的时候自动就格式化了)之外,最重要的就是删除Ubuntu的EFI系统分区,可以用命令行操作,也可以用EasyUEFI操作(好像DiskGenius也能看到这个分区):