Ubuntu18.04LTS离线安装ROS Melodic(解决rosdep init与rosdep update问题)

  • 制作 ROS Melodic 的离线 apt 源
  • 使用离线apt源
  • 安装 ROS
  • 解决 rosdep init 与 rosdep update 问题
  • 测试ROS功能


制作 ROS Melodic 的离线 apt 源

因为公司调试电脑无法连接互联网,所以安装 ROS 很让人头疼。但安装 ROS 无非就是安装一些 deb 包与其对应的依赖,既然这样只要下载好需要的 deb 包,再离线安装就可以。在联网电脑上使用 apt install 安装 ROS 时候,会在 /var/cache/apt/archives/ 下保存下载的安装包和依赖包,但如果使用 dpkg -i *.deb 来安装的话,会因为安装 A.deb 时候提示依赖 B.deb ,安装 B.deb 又提示缺少 C.deb ,整个过程很折腾人,这时候就需要配置离线apt源,配置完成后就能直接使用 apt install 命令自动安装所依赖的其他包。离

ubuntu18 离线 zabbix ubuntu离线安装deb_机器人

ubuntu18 离线 zabbix ubuntu离线安装deb_linux_02


资源内容如下,deb 包合集,公钥文件,说明文件,rosdep 需要的文件,apt 离线源的配置文件。

ubuntu18 离线 zabbix ubuntu离线安装deb_机器人_03

使用离线apt源

localdeb.tar.gz 放到 /opt 下,执行命令解压:
tar -xf /opt/localdeb.tar.gz

添加源对应的公钥,命令如下:
apt-key add mevol.pub

然后修改/etc/apt/sources.list,将原来的内容注释掉,在最后添加一行如下:
deb file:///opt/localdeb/archives/ /

也可以直接用资源中的 sources.list 替换默认文件,最好先备份默认文件。

然后执行sudo apt-get update,结果如下则配置离线apt源成功。

ubuntu18 离线 zabbix ubuntu离线安装deb_无人机_04

安装 ROS

在上一步配置好离线apt源之后,执行 sudo apt install ros-melodic-desktop-full 等待解包安装完成,安装结束如下图所示。

ubuntu18 离线 zabbix ubuntu离线安装deb_linux_05


然后配置环境变量,个人用户,非 root ,命令如下:

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

source ~/.bashrc

接着可以安装一些 python 功能组件,命令如下:

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

等待安装完成。

ubuntu18 离线 zabbix ubuntu离线安装deb_linux_06

解决 rosdep init 与 rosdep update 问题

一般情况下 rosdep initrosdep update 需要联网才能执行成功,网络不通情况下执行结果大概率如下图所示。

ubuntu18 离线 zabbix ubuntu离线安装deb_linux_07


看了不少博客总算搞清楚这个过程,现在用离线方式解决这两个问题。

首先是 rosdep init ,这个过程相对简单,主要就是下载 20-default.list 文件到 /etc/ros/rosdep/sources.list.d/ 路径下。这一步我是在联网环境下用虚拟机完成该步骤,然后将 /etc/ros 文件夹导出,再放到离线的ubuntu主机中。这里直接将上文资源包中的 ros.tar.gz 放到 /etc 下,再执行 tar -xf ros.tar.gz 将其解压到 /etc/ros 下。

因为 rosdep initrosdep update 是普通用户终端执行命令,所以刚刚的 /etc/ros 文件夹需要赋予用户权限,命令为:
sudo chown -R username /etc/ros

因为解压后的 /etc/ros/rosdep/sources.list.d/ 文件夹里已经放了 20-default.list 文件,所以 rosdep init 这一步骤就不需要再执行了。然后以个人用户(不建议root)执行 rosdep updaterosdep update 这一步是去 20-default.list 文件中指定的 URL 地址更新 ROS 信息,所以离线安装就需要将需要联网连接的 URL 改成本地的链接地址。更改后的文件内容如下(资源包内的已修改,不需要改动了)。

ubuntu18 离线 zabbix ubuntu离线安装deb_机器人_08

可以看到链接 githubusercontent.com 的链接已经注释
然后执行 rosdep update 结果如下:

ubuntu18 离线 zabbix ubuntu离线安装deb_linux_09


虽然 /etc/ros/rosdep/sources.list.d/20-default.list 中下载地址已经改为本地了,但可以看到此时还有部分文件无法下载,这是因为 ROS Melodic 基于 python2 (ROS Noetic 基于 python3 ) ,所以需要在 /usr/lib/python2.7/ 下修改部分文件(如果 ROS 版本基于 python3 ,则是去 python3 对应路径),然后同样道理,将这些文件中涉及的URL改成链接本地文件。

先执行:
sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py 将文件里
DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml' 改为
DEFAULT_INDEX_URL = 'file:///etc/ros/ros_github/index-v4.yaml'

再执行
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py 然后将
REP3_TARGETS_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml' 改为
REP3_TARGETS_URL = 'file:///etc/ros/ros_github/releases/targets.yaml'

再次以个人用户执行 rosdep update ,执行成功。

ubuntu18 离线 zabbix ubuntu离线安装deb_ubuntu18 离线 zabbix_10

测试ROS功能

运行 roscore 查看 ROS 核心服务是否可以正常开启,如下图所示则正常。

ubuntu18 离线 zabbix ubuntu离线安装deb_无人机_11

再测试 ROS 功能是否正常,新开一个终端输入rosrun turtlesim turtlesim_node 运行乌龟模拟器节点;
再开一个终端输入rosrun turtlesim turtle_teleop_key 运行键盘控制节点,在键盘控制节点使用箭头按键,可以控制海龟模拟器移动,则 ROS 功能正常。

ubuntu18 离线 zabbix ubuntu离线安装deb_ubuntu_12

至此,恭喜你已成功安装 ROS !