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
命令自动安装所依赖的其他包。离
资源内容如下,deb 包合集,公钥文件,说明文件,rosdep 需要的文件,apt 离线源的配置文件。
使用离线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源成功。
安装 ROS
在上一步配置好离线apt源之后,执行 sudo apt install ros-melodic-desktop-full
等待解包安装完成,安装结束如下图所示。
然后配置环境变量,个人用户,非 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
等待安装完成。
解决 rosdep init 与 rosdep update 问题
一般情况下 rosdep init
和 rosdep update
需要联网才能执行成功,网络不通情况下执行结果大概率如下图所示。
看了不少博客总算搞清楚这个过程,现在用离线方式解决这两个问题。
首先是 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 init
和 rosdep update
是普通用户终端执行命令,所以刚刚的 /etc/ros
文件夹需要赋予用户权限,命令为:sudo chown -R username /etc/ros
因为解压后的 /etc/ros/rosdep/sources.list.d/
文件夹里已经放了 20-default.list 文件,所以 rosdep init
这一步骤就不需要再执行了。然后以个人用户(不建议root)执行 rosdep update
,rosdep update
这一步是去 20-default.list 文件中指定的 URL 地址更新 ROS 信息,所以离线安装就需要将需要联网连接的 URL 改成本地的链接地址。更改后的文件内容如下(资源包内的已修改,不需要改动了)。
可以看到链接 githubusercontent.com
的链接已经注释
然后执行 rosdep update
结果如下:
虽然 /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
,执行成功。
测试ROS功能
运行 roscore
查看 ROS 核心服务是否可以正常开启,如下图所示则正常。
再测试 ROS 功能是否正常,新开一个终端输入rosrun turtlesim turtlesim_node
运行乌龟模拟器节点;
再开一个终端输入rosrun turtlesim turtle_teleop_key
运行键盘控制节点,在键盘控制节点使用箭头按键,可以控制海龟模拟器移动,则 ROS 功能正常。
至此,恭喜你已成功安装 ROS !