关于ROS的安装,网上大大小小已经有很多的教程了,虽然大部分都是PC上Ubuntu内ROS的安装,但是总体来说arm版本的Ubuntu Mate上ROS的安装也是完全类似的。我这里写的内容仅是把自己踩过的坑以及总结的方法和经验归纳一下,方便以后自己回顾用,当然,如果能给大家有所帮助自然是最好不过~
首先我们用ssh远程连接树莓派(关于树莓派3B+上如何开启远程ssh可以参考我的上一篇博文),如果有显示屏的同学也可以直接在树莓派上面进行操作。
也可以直接参照Wiki官网给出的安装教程:Ubuntu install of ROS Melodic
以下是我的安装过程以及踩坑实录:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
上面是ROS Wiki上给出的官方软件源,当然也可以用国内的镜像源,这样下载速度上可能会快一点
易科实验室的源
sudo sh -c '. /etc/lsb-release && echo "deb http://ros.exbot.net/rospackage/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
科大源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
以上选一个即可
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
树莓派官网给出了3种安装方式 Desktop-Full Install,Desktop Install和ROS-Base。
由于树莓派自身性能有限,而且一般我们都是将树莓派安装在机器人上,然后通过PC的ROS直接发布消息给树莓派上的ROS达到控制机器人的目的,所以我们只需要安装最后一种ROS-Base即可。
sudo apt install ros-melodic-ros-base
这一步坑比较多,基本上大部分人都是倒在了这一步,反正我为了在Ubuntu Mate上安装ROS花了将近一星期,其中大部分时间都是在跟这玩意作斗争,基本该踩的坑我都踩了。。。
按照官网的说法,这步只需执行2步命令即可
sudo rosdep init
rosdep update
然而就是这两步,难于上青天。接下来是我个人的踩坑爬坑经验,请各位大神和能在Raspberry Pi上科学上网的同志移步。
首先是“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.
网上给出的解决方法大致如下:
① 证书问题
需要重新安装认证证书,执行
sudo apt-get install ca-certificates
如果执行完这步能够成功运行,那么我恭喜你,但是,极大几率你得到的会是证书已经安装无需更新的反馈。
② ssl certs
sudo c_rehash /etc/ssl/certs
sudo -E rosdep init
如果还是不行,没事,我们还有后手,下一步绝对行
③ 直接建立文件
科学上网,我们直接登录这个“https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list”网站看看是什么东西
这是我连接到该网站之后看见的内容,代码内容给出如下:
# os-specific listings first
yaml https://raw.githubusercontent.com/ros/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
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
因此实际上“sudo rosdep init”的过程就是从这个网址获取到“20-default.list”文件及里面的内容。但是当我们连不上这个网址的时候,我们就自己新建一个这个文件,然后把网址的内容拷贝进去。过程如下
sudo mkdir -p /etc/ros/rosdep/sources.list.d
sudo vim /etc/ros/rosdep/sources.list.d/20-default.list
然后把上面的内容拷贝进去,然后保存即可。这个过程可能会显示权限不足等,可以进入root用户进行操作。
当然,吃鱼不忘养鱼人,以上方法,我参考的博文如下,希望大家多多支持原博主~
参考1:sudo rosdep init ERROR: cannot download default sources list from:
参考2:安装ROS:sudo rosdep init报错,ERROR: cannot download default sources list from:
前面的只是小问题,真正的麻烦在这里,因为这一步就是玄学,完全看脸的过程(非洲人哭了。。。),不过,我们依然有办法能够帮助我们更好地执行这一步。
当我们配置完“20-default.list”这个文件之后,不需要执行“sudo rosdep init”,我们先直接使用“rosdep update”,大概率你会得到
ERROR: unable to process source “XXXXXXX”
或者
ERROR: error loading sources list:
The read operation timed out
以下是一些我踩坑时爬坑用过方法,在使用这些方法之前,先确保你处于一个信号良好的地方。
① 更改内容 20-default.list 内容
这种方法同样来自上面的博文,就是把“20-default.list”内部的内容替换,替换内容如下:
# os-specific listings first
yaml https://raw.github.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
# generic
yaml https://raw.github.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://raw.github.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://raw.github.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://raw.github.com/ros/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
原文博主是成功了,但是我还是没成功,依旧是满屏的ERROR
② 更换源
更换Ubuntu Mate的源:Ubuntu–更换软件源
更换ROS的源:移步本文“1.添加软件源”
更换完成之后,执行
sudo apt-get update
rosdep update
③ 修改域名服务器
sudo vim /etc/resolv.conf
nameserver改为
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
然后继续执行“rosdep update”
④ 安装python-rosdep
执行以下命令
sudo apt-get update
sudo apt-get install python-rosdep
rosdep update
反正都安不上,多试试也不会咋样。。。
④ 增加TIMEOUT时间
首先cd到/usr/lib/python2.7/dist-packages/rosdep2/目录
cd /usr/lib/python2.7/dist-packages/rosdep2/
然后找到 sources_list.py、gbpdistro_support.py、rep3.py 这三个文件,把这三个文件内的 “DOWNLOAD_TIMEOUT = 15.0” 的值改得大一点,记住三个文件都要改。
如果文件只有只读权限,执行
sudo chmod 777 sources_list.py
sudo chmod 777 gbpdistro_support.py
sudo chmod 777 rep3.py
这个方法经测试是很有效的,毕竟改完之后满屏ERROR的我也能有一两个Hit了呢(╮(╯▽╰)╭)
⑤ 连接手机热点
确保自己处于一个信号比较好的地方,然后树莓派连接手机热点,基本上多试几次就成了。配合修改TIMEOUT时间,效果不要太好。
关于树莓派怎么连接热点,移步我的上一篇文章。
⑥ 其他非常规解决方案
这边知乎大神给出了另一种非常规的解决方案,大家也可以尝试一下,这是链接:sudo rosdep init出错的解决方案
最后附上成功截图,花了我几天时间,我家客厅信号还不好,本来想着连连电视就好了,无奈还另买了块显示屏找了个信号好一点的地方搞,真的是血与泪啊。。。
完成这步之后,后面就基本上没啥问题啦~
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
安装完成之后,运行一下roscore命令,当出现以下界面时就说明安装成功啦!
可能有部分小伙伴想运行一下turtlesim功能包测试一下ROS,但是得到的结果大概是“找不到该功能包”,毕竟我们装的是ROS-Base版的,当然,你也可以通过下面的命令进行安装
sudo apt-get install ros-melodic-turtlesim
安装完成后执行
rosrun turtlesim turtlesim_node
以上就是我在ROS安装踩坑过程中采用的所有解决方法,希望能给大家一些帮助,如果有问题直接在下面给我留言,我看到了会回复的。如果有错误也希望能够指出~