前言
ROS包括多个版本,适应于各不同版本的Linux系统。(查看各版本对应关系)
本文主要针对:
操作系统:Ubuntu 18.04.05 LTS
ROS版本:Melodic
进行处理。
安装过程主要参考:ROS官方教程
安装过程介绍
对ROS官方教程简单介绍如下:
1) 打开“软件与更新(soft & update)”,选择"restricted," “universe,” and “multiverse.”,详细说明可见(链接)。
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
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 #保存后退出再尝试,可以多尝试几次
出现下述界面则代表成功:
如果不行,使用解决方法(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中的位置指向本地位置。
(下载方式1 github,下载方式2 csdn)
把下载的文件解压,然后移动到对应位置:
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命令,出现以下界面代表成功:
注意:上述rosdep init与rosdep update出现错误时,上下两个解决方案(1)是对应的(还是尝试通过访问外网实现),解决方案(2)也是对应的(把文件下载到本地,修改链接指向)
案例使用
完成上述步骤后,我们已经完成了ros安装的全过程,接着进行一个案例测试:
终端中使用命令:
roscore
Ctrl+Alt+T 快捷键打开一个新的终端,并使用命令:
rosrun turtlesim turtlesim_node
出现一个静止的小海龟界面:
Ctrl+Alt+T 快捷键再次打开一个新的终端,并使用命令:启用启动turtlesim的键盘控制节点turtle_teleop_key
rosrun turtlesim turtle_teleop_key
把鼠标放在第三个终端界面上,能够键盘上的上下左右进行控制小海龟的移动,轨迹如下。
好了,至此ROS的安装过程就全部完成了。