Ubuntu18.04安装ROS Melodic
前言
由于近期的工作需要用到机器人操作系统(ROS),故写下此文章来记录学习安装ROS的过程。我用到的Linux系统为Ubuntu18.04,所以我选择了ROS Melodic版本。
前期准备
将你的 Ubuntu 存储库配置为允许“restricted”、“universe”和“multiverse”。同时,你也可以把下载源替换为国内的源,这里我选择了清华源。
打开software&updata
确保图片上的四项全部选中,就可以开始安装ros了。
下载安装
本次安装主要参考ROS官网安装教程:ROS官网教程
1.设置ROS下载源
设置你计算机的下载源以接受来自 packages.ros.org 的软件,下面给出了三种ROS下载源,可以根据情况,自己选择。
国外源:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
国内源:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
清华源:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
2.设置公钥
sudo apt install curl
# if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
3.安装ROS
首先,确保你的 Debian 软件包索引是最新的:
sudo apt update
安装桌面完整版ROS:
sudo apt install ros-melodic-desktop-full
安装完成后,可以通过以下命令查找可用的ROS包:
apt search ros-melodic
4.设置环境变量
每次启动新的 shell 时自动将 ROS 环境变量添加到你的 bash 会话中是很方便的:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
5.安装包的依赖项
到此为止,你已经安装了运行核心 ROS 软件包所需的东西。 要创建和管理你自己的 ROS 工作区,有多种工具和要求是分开分发的。 例如,rosinstall 是一种常用的命令行工具,它使您能够通过一个命令轻松下载许多 ROS 包的源代码树。要安装此工具和其他依赖项以构建 ROS 包,请运行:
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
6.初始化rosdep
在使用 ROS 工具之前,你需要初始化 rosdep。 rosdep 是在 ROS 中运行一些核心组件所必需的,并使你能轻松地为要编译的源安装系统依赖项。 如果您尚未安装 rosdep,请执行以下操作。
sudo apt install python-rosdep
你可以通过以下命令,初始化rosdep:
sudo rosdep init
rosdep update
若执行sudo rosdep init出错,可更换网络多次尝试,听说使用手机热点可以解决这个问题,我是一步直接过的。出现下图所示结果,则可以执行rosdep update。
我在执行rosdep update时,多次出现“time out”错误,具体如下图:
解决rosdep update超时问题
由于近期国内Github Raw的可用IP越来越少,通过修改hosts文件解决rosdep update超时问题的方法已经不太好用,我们通过修改rosdep源码中下载资源的函数来解决这一问题。网站https://ghproxy.com/支持github的资源代理,我们将用此代理加速rosdep对Github Raw的访问,进而解决rosdep update超时问题。
我们需要对以下5个Python文件进行修改:
/usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
/usr/lib/python2.7/dist-packages/rosdistro/__init__.py
/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
/usr/lib/python2.7/dist-packages/rosdep2/rep3.py
/usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py
1.修改sources_list.py的可执行权限并打开,修改download_rosdep_data函数,添加一行代码来url="https://ghproxy.com/"+url
应用ghproxy的代理服务,并在第72行的github地址前添加前缀https://ghproxy.com/
来应用代理服务。
在终端输入以下命令打开sources_list.py:
sudo chmod 777 /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
第一处修改:
第二处修改:
2.修改__init__.py的可执行权限并打开,对里面的DEFAULT_INDEX_URL进行如下替换来应用代理服务。
DEFAULT_INDEX_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
在终端输入以下命令打开__init__.py:
sudo chmod 777 /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
替换DEFAULT_INDEX_URL:
3.修改gbpdistro_support.py的可执行权限并打开,对里面的FUERTE_GBPDISTRO_URL进行如下替换来应用代理服务:
FUERTE_GBPDISTRO_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/' \ 'master/releases/fuerte.yaml'
在终端输入以下命令打开gbpdistro_support.py:
sudo chmod 777 /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
gedit /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
替换FUERTE_GBPDISTRO_URL:
在第204行添加一行代码gbpdistro_url = "https://ghproxy.com/" + gbpdistro_url
。
4.修改rep3.py的可执行权限并打开,对里面的REP3_TARGETS_URL进行如下替换来应用代理服务。
REP3_TARGETS_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml'
在终端输入以下命令打开rep3.py:
sudo chmod 777 /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
替换REP3_TARGETS_URL:
5.修改github.py的可执行权限并打开,在第68行和第119行的github地址前添加前缀https://ghproxy.com/
来应用代理服务。
在终端输入以下命令打开github.py:
sudo chmod 777 /usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py
gedit /usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py
第一处修改:
第二处修改:
再次尝试执行rosdep update,成功!!!
小海龟测试
打开三个终端,分别在三个终端中输入以下命令:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
现在,可以通过键盘来控制小海龟了。