老规矩,先换源,此处依旧使用中科大镜像源
点击左下角九饼(九个点)图标找到software&updates软件
下载自(Download from):选择中科大源(ustc)或者清华源(tsinghua)
Arm64的ubuntu-port 镜像源暂时不用换,此处也和x86PC不一样,打开软件更新窗口会发现没有其他镜像的选项。
Ctrl+shift+t 打开命令行终端
sudo apt-get update
sudo apt-get upgrade
Ctrl+Alt+t 打开终端
添加ros软件源:
即:使用命令行修改sources.list.d文件
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'
注:echo “xxx” > /etc/apt/sources.list.d/ros-latest.list 即在 /etc/apt/sources.list.d/ros-latest.list 添加一行xxx内容
其他镜像:
清华镜像: https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ bionic main
阿里云:http://mirrors.aliyun.com/ros/Ubuntu/bionic main
中国科技大学: http ://mirrors.ustc.edu.cn/ros/Ubuntu/bionic main
##镜像源按照按照帮助文件添加密钥
按照版本添加相应密钥
(密钥会定期更改,要及时参考网络上的最新密钥)
如:访问镜像站查找
打开http://mirrors.ustc.edu.cn/找到ROS那一行的末尾的help打开
复制下列内容并粘贴的命令行终端里面
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
(图是树莓派安装ros拍的,截图在来回倒腾太费劲了,pc是x86核心架构 树莓派是arm64核心架构,在后续的图可能不太相同,但是步骤是一致的)
sudo apt-get update
sudo apt install ros-melodic-desktop-full
遇到询问输入y并回车确认
(根据不同版本替换版本号,版本号和软件源、密钥相互对应 )
sudo rosdep init
是因为缺乏语言环境,输入:
sudo apt install python-rosdep
解决语言环境依赖
再重新运行
sudo rosdep init
若报错如下
ERROR: default sources list file already exists:
/etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize
则证明已经搞过一次rosdep init
可以将报错文件删除
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
重新rosdep init
或直接进行下一步(rosdep update)
其实我们不难发现 rosdep init 这一步仅仅做了一个事情
那就是下载了/etc/ros/rosdep/sources.list.d/20-default.list
我们可以直接手动下载这个文件 把文件放到对应的位置
之后接着进行7.2的rosdep update
这个文件的下载地址就是ERROR后面接的地址,直接点开或者使用国内的git镜像下载都可以。
镜像网站:https://mirror.ghproxy.com/
若运行rosdep init报错:
ERROR: cannot download default sources list from:
则问题为:网站被墙,dns污染
解决方法:见后文网络连接问题
sudo rosdep init
成功后,执行
rosdep update
若报错: Hit某个网站无法连接
则仍是网络问题,解决方法见下文。
很多人一直不懂rosdep init究竟干了个啥
其实在这一步中 ros 根据自身编写的py脚本只下载了一个文件
那就是
/etc/ros/rosdep/sources.list.d/20-default.list
rosdep update 则工序复杂 根据一系列脚本下载了很多东西
我们一直出现报错的原因其实很简单,就是在
raw.githubusercontent.com
网站下记录的文件我们由于各种原因下载不到,或者读取不了。
解决这一系列网络问题目标只有两个:
1.想办法和 raw.githubusercontent.com连接
2.下载其中的相关文件
所以安装了这么多次,我总结了如下n种解决办法
使用手机热点多次尝试(但是还有可能连不上,会导致失败)
这个办法最简单,建议先尝试这个解决方法
打开新终端,输入命令
sudo gedit /etc/hosts
打开host文件后,在文件的最末尾添加IPAdress查询到的地址:
网址:https://www.ipaddress.com
199.232.68.133 raw.githubusercontent.com
sudo rosdep init
或者
rosdep update
增加dns服务器:
sudo gedit /etc/resolv.conf
将原有的nameserver这一行注释,并添加以下两行:
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
重新执行
rosdep update
如果以上三个方法都多次尝试无果,那就只能说明,今日网络不好。。。。(今日运势不佳hhh)
更改 /usr/lib/python2.7/dist-packages/rosdep2/下的三个文件sources_list.py、gbpdistro_support.py、rep3.py
中的DOWNLOAD_TIMEOUT = 15.0值,改大一点就可以了。
即使曾长了网络等待时常,这个方法又繁琐还经常连不上(不管等多久,网站就是不响应)
网站https://ghproxy.com/支持github的资源代理
非常好用,我们将用此代理加速rosdep对Github的访问,进而解决rosdep update失败问题。
我们要做的,是在rosdep的若干个脚本文件中,把 https://ghproxy.com/ 添加到相应URL前面即可。
1)修改rosdep下载资源的脚本文件:/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py,把以下行添加到脚本中的download_rosdep_data()函数中,以应用代理服务:
url="https://ghproxy.com/"+url
2)用同样的方法修改/usr/lib/python2.7/dist-packages/rosdistro/init.py里面的DEFAULT_INDEX_URL参数(68行),如下:
DEFAULT_INDEX_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
3)以下4个文件中也使用了“raw.githubusercontent.com”网址,同样的方法把“https://ghproxy.com/”添加到网址前:
/usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py 36行
/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py 72行
/usr/lib/python2.7/dist-packages/rosdep2/rep3.py 39行
/usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py 68行 119行
4)在 /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py 的第204行添加如下代码:
gbpdistro_url = “https://ghproxy.com/” + gbpdistro_url
全部完成!!!!
这里建议每修改一个.py就尝试一下rosdep update
因为我们不是所有的文件都连接不到,而是个别的,这样能减少工作量
(我这次修改前三个文件就成功rosdep update了)
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
此处两个注意事项:1.一个命令一行,如果执行错误了自己去删除对应文件里面的那一行,echo命令含义请见前文或百度
2.注意与安装版本的对应source /opt/ros/melodic/setup.bash ,加错了自行找文件修改添加的一行
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
中间确认窗口y回车
打开第一个终端窗口
roscore
打开第二个终端窗口
rosrun turtlesim turtlesim_node
打开第三个终端窗口
rosrun turtlesim turtle_teleop_key
运行以后选中teleop_key 的那个窗口可以使用键盘方向键控制小海龟运动 退出前使用ctrl+c中断再退出