Ubuntu 18.04.05 LTS配置ROS Melodic各种问题详细解决

  • 前言
  • 安装过程介绍
  • 案例使用


前言

ROS包括多个版本,适应于各不同版本的Linux系统。(查看各版本对应关系
本文主要针对:
操作系统:Ubuntu 18.04.05 LTS
ROS版本:Melodic

进行处理。

安装过程主要参考:ROS官方教程

安装过程介绍

对ROS官方教程简单介绍如下:

1) 打开“软件与更新(soft & update)”,选择"restricted," “universe,” and “multiverse.”,详细说明可见(链接)。

ros1中python的cmakelist ros melodic python3_python


2) 设置下载源

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

为了避免后续出现无法定位软件包的错误可以把deb http://packages.ros.org/ros/ubuntu替换为deb http://mirrors.ustc.edu.cn/ros/ubuntu

3) 设置秘钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

如果出现错误可以尝试把上述命令中""部分替换为
hkp://pgp.mit.edu:80 或 hkp://keyserver.ubuntu.com:80

或者还可以通过下述命令:

curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add

4) 安装ROS

首先:

sudo apt update

接着使用

sudo apt install ros-melodic-desktop-full

上述命令是安装完整的ROS,若想进行选择还可以参考下述命令:(若没有选择直接安装完整版,可以忽略以下内容)

Desktop Install: ROS, rqt, rviz, and robot-generic libraries

sudo apt install ros-melodic-desktop

ROS-Base: (Bare Bones) ROS package, build, and communication libraries. No GUI tools.

sudo apt install ros-melodic-ros-base

Individual Package: You can also install a specific ROS package (replace underscores with dashes of the package name):

sudo apt install ros-melodic-PACKAGE

e.g.

sudo apt install ros-melodic-slam-gmapping

To find available packages, use:

apt search ros-melodic

5) 环境设置(添加ros环境变量)

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

6) 生成包的依赖项
安装建立ROS的工具:

sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

7) 初始化rosdep

先安装一个rosdep

sudo apt install python-rosdep

接着进行初始化:

sudo rosdep init

这一步可能会出现下面的错误:
ERROR: cannot download default sources list from:
https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list Website may be down.
这是因为国内访问外网比较慢。
**解决方法(1)**为:

#打开hosts文件
sudo gedit /etc/hosts
#在文件末尾添加
151.101.84.133  raw.githubusercontent.com
#保存后退出再尝试,可以多尝试几次

出现下述界面则代表成功:

ros1中python的cmakelist ros melodic python3_ubuntu_02

如果不行,使用解决方法(2) 为:20-default.list文件中的内容进行替换,主要是网址https://raw.githubusercontent.com 替换文件可以从这里下载,然后使用命令进行替换:

sudo cp ./20-default.list /etc/ros/rosdep/sources.list.d

#注意上述命令为:sudo cp 本机路径/20-default.list /etc/ros/rosdep/sources.list.d

或者打开20-default.list文件进行编辑

sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list

把全部内容修改为以下内容:

# os-specific listings first
# yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
yaml file:/etc/ros/rosdep/sources.list.d/rosdistro-master/rosdep/osx-homebrew.yaml osx

# generic
# yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
# yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
# yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
# gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte

yaml file:/etc/ros/rosdep/sources.list.d/rosdistro-master/rosdep/base.yaml
yaml file:/etc/ros/rosdep/sources.list.d/rosdistro-master/rosdep/python.yaml
yaml file:/etc/ros/rosdep/sources.list.d/rosdistro-master/rosdep/ruby.yaml
gbpdistro file:/etc/ros/rosdep/sources.list.d/rosdistro-master/releases/fuerte.yaml fuerte


# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

修改后接着使用rosdep update命令进行更新,若出现time out的错误,还是因为访问外网的速度太慢或不能访问。
解决方案(1):增加允许尝试的时间,修改 /usr/lib/python2.7/dist-packages/rosdep2/下的三个文件sources_list.py、gbpdistro_support.py、rep3.py 中的DOWNLOAD_TIMEOUT = 15.0值。打开对应的文件:

sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py

修改DOWNLOAD_TIMEOUT = 15.0的值为DOWNLOAD_TIMEOUT = 1500.0 然后进行多次尝试,看是否能够成功,若不能则尝试解决方案(2)。

解决方案(2):采用离线下载的方式,把rosdistro-master这个文件下载到本地,然后把修改 /usr/lib/python2.7/dist-packages/rosdep2/中三个文件sources_list.py、gbpdistro_support.py、rep3.py中的位置指向本地位置。

把下载的文件解压,然后移动到对应位置:

ros1中python的cmakelist ros melodic python3_ubuntu_03

sudo cp -r ./rosdistro-master/ /etc/ros/rosdep/sources.list.d

#注意上述命令为:sudo cp -r 本机路径/rosdistro-master/ /etc/ros/rosdep/sources.list.d

接着修改 /usr/lib/python2.7/dist-packages/rosdep2/中三个文件sources_list.py、gbpdistro_support.py、rep3.py中指向的位置:

第一个文件:

sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
# 修改DEFAULT_SOURCES_LIST_URL为离线路径
DEFAULT_SOURCES_LIST_URL = 'file:/etc/ros/rosdep/sources.list.d/20-default.list'

第二个文件:

sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
# 修改REP3_TARGETS_URL为离线路径
REP3_TARGETS_URL = 'file:/etc/ros/rosdep/sources.list.d/rosdistro-master/releases/targets.yaml'

第三个文件:

sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
# 修改DEFAULT_INDEX_URL为离线路径
DEFAULT_INDEX_URL = 'file:/etc/ros/rosdep/sources.list.d/rosdistro-master/index-v4.yaml'

最后使用rosdep update命令,出现以下界面代表成功:

ros1中python的cmakelist ros melodic python3_github_04

注意:上述rosdep init与rosdep update出现错误时,上下两个解决方案(1)是对应的(还是尝试通过访问外网实现),解决方案(2)也是对应的(把文件下载到本地,修改链接指向)

案例使用

完成上述步骤后,我们已经完成了ros安装的全过程,接着进行一个案例测试:
终端中使用命令:

roscore

Ctrl+Alt+T 快捷键打开一个新的终端,并使用命令:

rosrun turtlesim turtlesim_node

出现一个静止的小海龟界面:

ros1中python的cmakelist ros melodic python3_python_05


Ctrl+Alt+T 快捷键再次打开一个新的终端,并使用命令:启用启动turtlesim的键盘控制节点turtle_teleop_key

rosrun turtlesim turtle_teleop_key

把鼠标放在第三个终端界面上,能够键盘上的上下左右进行控制小海龟的移动,轨迹如下。

ros1中python的cmakelist ros melodic python3_github_06

好了,至此ROS的安装过程就全部完成了。