一行命令解决rosdep update失败问题(kinetic, melodic, noetic)

4 篇文章 0 订阅

一、问题:

安装完ros后,需要执行sudo rosdep init,但是在没有全局科学上网的前提下,执行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.

导致无法进行下一步rosdep update,其他改试图对墙做事情的方法时效性差,而且往往都是玄学。。。

这里在总结前人成果的基础上给出一个相对简单快捷的办法

二、方案(适用于: kinetic, melodic, noetic):

1.新建脚本文件set_rosdep.sh包含以下内容

#! /usr/bin/env bash

L_USER=${USER}

if [ ${#} -ne 0 ]; then
  echo -e "\nUsage: \033[1;31mbash ${0}\033[0m\n" ; exit 1
fi

function for_kinetic() {
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/kinetic\/rosdistro/g' /opt/ros/kinetic/rosdistro/rosdep/sources.list.d/20-default.list
  sudo cp /opt/ros/kinetic/rosdistro/rosdep/sources.list.d/20-default.list /etc/ros/rosdep/sources.list.d/
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/kinetic\/rosdistro/g' /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/kinetic\/rosdistro/g' /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/kinetic\/rosdistro/g' /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
  sudo sed -i "s/https:\/\/raw.githubusercontent.com\/ros\/rosdistro/file:\/\/\/opt\/ros\/kinetic\/rosdistro/g" /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
  sudo sed -i "s/master\/releases\/fuerte.yaml/releases\/fuerte.yaml/g" /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
}

function for_melodic() {
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/melodic\/rosdistro/g' /opt/ros/melodic/rosdistro/rosdep/sources.list.d/20-default.list
  sudo cp /opt/ros/melodic/rosdistro/rosdep/sources.list.d/20-default.list /etc/ros/rosdep/sources.list.d/
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/melodic\/rosdistro/g' /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/melodic\/rosdistro/g' /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/melodic\/rosdistro/g' /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
  sudo sed -i "s/https:\/\/raw.githubusercontent.com\/ros\/rosdistro/file:\/\/\/opt\/ros\/melodic\/rosdistro/g" /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
  sudo sed -i "s/master\/releases\/fuerte.yaml/releases\/fuerte.yaml/g" /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
}

function for_noetic() {
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/noetic\/rosdistro/g' /opt/ros/noetic/rosdistro/rosdep/sources.list.d/20-default.list
  sudo cp /opt/ros/noetic/rosdistro/rosdep/sources.list.d/20-default.list /etc/ros/rosdep/sources.list.d/
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/noetic\/rosdistro/g' /usr/lib/python3/dist-packages/rosdep2/sources_list.py
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/noetic\/rosdistro/g' /usr/lib/python3/dist-packages/rosdistro/__init__.py
  sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/noetic\/rosdistro/g' /usr/lib/python3/dist-packages/rosdep2/rep3.py
  sudo sed -i "s/https:\/\/raw.githubusercontent.com\/ros\/rosdistro/file:\/\/\/opt\/ros\/noetic\/rosdistro/g" /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
  sudo sed -i "s/master\/releases\/fuerte.yaml/releases\/fuerte.yaml/g" /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
}

if [ -d "/etc/ros/rosdep/sources.list.d" ] ; then 
  echo -e "exist /etc/ros/rosdep/sources.list.d !" 
else
  sudo mkdir "/etc/ros/rosdep/sources.list.d" -p
fi

if [ -d "/opt/ros/kinetic" ] ; then
  echo -e "\n\033[1;32m>>> ROS:kinetic + PYTHON:python2.7 <<<\033[0m\n"
  if [ -d "/opt/ros/kinetic/rosdistro" ] ; then sudo rm -rf /opt/ros/kinetic/rosdistro ; fi
  sudo git clone https://gitee.com/ohhuo/rosdistro.git /opt/ros/kinetic/rosdistro
  if [ ${?} -ne 0 ]; then  
    echo -e "\033[0;33m\nWORNING: git clone from gitee failed !\033[1m" ; 
    sudo git clone https://github.com/ros/rosdistro.git /opt/ros/kinetic/rosdistro ; 
    if [ ${?} -ne 0 ]; then  echo -e "\033[0;31m\nERROR: git clone from github and gitee failed !\033[1m" ; exit 1 ; fi
  fi
  for_kinetic
elif [ -d "/opt/ros/melodic" ] ; then
  echo -e "\n\033[1;32m>>> ROS:melodic + PYTHON:python2.7 <<<\033[0m\n"
  if [ -d "/opt/ros/melodic/rosdistro" ] ; then sudo rm -rf /opt/ros/melodic/rosdistro ; fi
  sudo git clone https://gitee.com/ohhuo/rosdistro.git /opt/ros/melodic/rosdistro
  if [ ${?} -ne 0 ]; then  
    echo -e "\033[0;33m\nWORNING: git clone from gitee failed !\033[1m" ; 
    sudo git clone https://github.com/ros/rosdistro.git /opt/ros/melodic/rosdistro ; 
    if [ ${?} -ne 0 ]; then  echo -e "\033[0;31m\nERROR: git clone from github and gitee failed !\033[1m" ; exit 1 ; fi
  fi
  for_melodic
elif [ -d "/opt/ros/noetic" ] ; then
  echo -e "\n\033[1;32m>>> ROS:noetic + PYTHON:python3 <<<\033[0m\n"
  if [ -d "/opt/ros/noetic/rosdistro" ] ; then sudo rm -rf /opt/ros/noetic/rosdistro ; fi
  sudo git clone https://gitee.com/ohhuo/rosdistro.git /opt/ros/noetic/rosdistro
  if [ ${?} -ne 0 ]; then  
    echo -e "\033[0;33m\nWORNING: git clone from gitee failed !\033[1m" ; 
    sudo git clone https://github.com/ros/rosdistro.git /opt/ros/noetic/rosdistro ; 
    if [ ${?} -ne 0 ]; then  echo -e "\033[0;31m\nERROR: git clone from github and gitee failed !\033[1m" ; exit 1 ; fi
  fi
  for_noetic
else
  echo -e "\n\033[1;31mERROR: ROS does not exist !\033[0m\n" ; exit 1
fi

sudo rosdep init
sudo -u ${L_USER} rosdep update

if [ ${?} -eq 0 ]; then 
  echo -e "\n\033[1;32m>>> Successfully execute [rosdep init] & [rosdep update] <<< \033[0m\n~by streamwill" ; exit 0
else 
  echo -e "\033[0;31m\nFailed to execute [rosdep init] & [rosdep update] !\033[1m" ; exit 1
fi

2.运行脚本set_rosdep.sh

bash set_rosdep.sh

NOTE:

  1. 确保电脑联网,且已经安装git,或者执行sudo apt install git安装;
  2. 适配ROS版本: kinetic , melodic , noetic,脚本自动选择,无需手动处理;
  3. 程序运行期间需要输入root密码;
  4. 如果从github上clone多次总是失败,可以更换脚本中的clone源为:https://gitee.com/ohhuo/rosdistro.git

3.完成initupdate

😃 一行命令,直接运行,简单快捷 😃

--->>> Successfully execute [rosdep init] & [rosdep update]<<<---

三、以下为针对20.04和noetic的详细步骤,可以跳过

1. 下载rosdistro到本地

  • 下载方式1: 度娘rosdistro,取货码: jhkn
  • 下载方式2:git clone https://github.com/ros/rosdistro.git
  • 必须保证文件夹名为rosdistro,且必须在当前用户目录下,即~,形如~/rosdistro。(只为保证后续直接复制命令执行)

2. 复制rosdistro文件夹到ros安装路径

  • 复制文件夹rosdistro/到路径/opt/ros/noetic
sudo cp ~/rosdistro/ /opt/ros/noetic/ -r

3.修改20-default.list文件

  • 修改/opt/ros/noetic/rosdistro/rosdep/sources.list.d/20-default.list文件
sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/noetic\/rosdistro/g' /opt/ros/noetic/rosdistro/rosdep/sources.list.d/20-default.list

4. 修改四个.py文件

  • 文件一:/usr/lib/python3/dist-packages/rosdep2/sources_list.py
sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/noetic\/rosdistro/g' /usr/lib/python3/dist-packages/rosdep2/sources_list.py
  • 文件二:/usr/lib/python3/dist-packages/rosdistro/__init__.py
sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/noetic\/rosdistro/g' /usr/lib/python3/dist-packages/rosdistro/__init__.py
  • 文件三:/usr/lib/python3/dist-packages/rosdep2/rep3.py
sudo sed -i 's/https:\/\/raw.githubusercontent.com\/ros\/rosdistro\/master/file:\/\/\/opt\/ros\/noetic\/rosdistro/g' /usr/lib/python3/dist-packages/rosdep2/rep3.py
  • 文件四:/usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
sudo sed -i "s/https:\/\/raw.githubusercontent.com\/ros\/rosdistro/file:\/\/\/opt\/ros\/noetic\/rosdistro/g" /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
sudo sed -i "s/master\/releases\/fuerte.yaml/releases\/fuerte.yaml/g" /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py

5.终端执行命令进行初始化和更新

sudo rosdep init
rosdep update

Successfully executed ‘rosdep update’


REF

[1].Ubuntu20.04 rosdep update失败解决方法
[2].rosdep update失败的解决方法

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值