1. Introducción
Con respecto a los problemas encontrados sudo rosdep init
y rosdep update
fallas durante el proceso de instalación de ROS , las publicaciones en Internet son simplemente una gran canasta. Recientemente, el autor instaló ROS nuevamente y descubrió que las soluciones registradas anteriormente ya no son efectivas. Busqué todas las publicaciones en Internet y el 99% de ellas fueron reimpresas o desactualizadas. Finalmente, finalmente encontré un artículo que lo dejaba claro.Puede consultar este artículo: La solución definitiva para ROS rosdep init / update error reporting .
Así que recuérdeles a todos que, a veces, es necesario consultar las últimas publicaciones. . Los más leídos no son necesariamente mejores que los más recientes. Así que estamos en 2021 y el partido se fundó hace 100 años. Es suficiente para que todos lean mi artículo.
2. Razones del fracaso
Para resolver el problema, primero averigüe la causa del problema. sudo rosdep init
Y rosdep update
la causa raíz no puede permitirse ejecutar un "raw.githubusercontent.com" Este sitio no ayuda .
"raw.githubusercontent.com" es en realidad el servidor de usuario de Google GitHub, sudo rosdep init
y rosdep update
algunos archivos se descargan de este sitio web. Cuando se instala ROS por primera vez, generalmente es inaccesible para la red doméstica.
Tres. Solución
Dado que es un problema de red, es suficiente para resolver el problema de red. (Si desea ver la solución definitiva, pase al método tres)
(1) Método 1
Conéctese científicamente. No diré más al respecto. Si puede encontrar una manera de conectarse, no sucederá nada. En vista del hecho de que la mayoría de los camaradas no tienen esta condición, este método no es recomendado. (Muchas publicaciones dicen que usar un teléfono móvil para abrir hotspots, los hotspots móviles que he estado usando resultaron inútiles)
(Dos) método dos
sudo rosdep init
De hecho, lo que debe hacer es descargar un 20-default.list
archivo a una /etc/ros/rosdep/sources.list.d
carpeta, puede crear este archivo manualmente y luego pegar el contenido, crear un archivo:
sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list
Luego pega el siguiente contenido en él:
# 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
Esto completa el sudo rosdep init
trabajo. El 20-default.list
contenido final como se muestra en la figura
rosdep update
es 20-default.list
descargar el archivo correspondiente según el enlace URL en el archivo de arriba . Puede ver que osx-homebrew.yawl,base.yawl,python.yawl,ruby.yawl,fuerte.yawl
se utilizan cinco archivos, y las direcciones están "raw.githubusercontent.com"
debajo, porque la red Si puede por supuesto, rosdep update
si no puede descargarlo, no puede ejecutarlo.
Dado que la IP predeterminada no es accesible desde este sitio web, puede encontrar una IP alternativa "raw.githubusercontent.com"
yendo a la dirección IP de la red de consulta de IP (https://site.ip138.com) y haga clic para ingresar . El resultado de la consulta es así (el resultado no es fijo ):
Puede ver que hay cuatro direcciones IP que se pueden usar, 185.199.108.133-185.199.111.133, la dirección es holandesa, no se preocupe por esto. Intente hacer ping a estos ips:
ping 185.199.108.133
El resultado es el siguiente, que indica que la conexión es normal, y cuanto menor sea el tiempo de atraso, más rápida será la velocidad de transmisión de la red. Puede probar las cuatro direcciones IP y elegir la más rápida. Tome 185.199.108.133 como ejemplo aquí.
Comando de entrada de terminal:
sudo gedit /etc/hosts
Agregar una fila
185.199.108.133 raw.githubusercontent.com
/ etc / hosts finalmente se ve así:
(Muchos blogs también hablan sobre este método y le dicen que agregue directamente "152.XXX.XXX.XXX raw.githubusercontent.com" u otras direcciones IP, pero estas direcciones IP están desactualizadas porque se actualizarán, de Por supuesto. Usado. Por lo tanto, asegúrese de consultar este sitio web de consulta de IP usted mismo)
Bien, puedes visitar ahora. Vuelve a ejecutarlo rosdep update
. Si va bien, puedes tener éxito. Este método es muy fácil de usar a partir de 2020 y puede considerarse como la solución definitiva.
Pero este año puede ser desfavorable y este año no funcionará bien.
Los errores básicos informados son los tiempos de espera de la red y el tiempo de espera del protocolo de enlace puede aparecer durante la descarga de cualquiera de los cinco archivos anteriores.
ERROR: unable to process source [http://github.com/ros/rosdistro/raw/master/rosdep/base.yaml]:
<urlopen error _ssl.c:489: The handshake operation timed out> (http://github.com/ros/rosdistro/raw/master/rosdep/base.yaml)
De acuerdo, muchas personas se han encontrado con este problema y muchas publicaciones nos enseñan a modificar el período de tiempo de espera. El método consiste en cambiar los valores /usr/lib/python2.7/dist-packages/rosdep2/
en los tres archivos sources_list.py、gbpdistro_support.py、rep3.py
siguientes DOWNLOAD_TIMEOUT = 15.0
y cambiarlos a un valor mayor.
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
Ctrl+ FBuscar DOWNLOAD_TIMEOUT
, cambie los siguientes 15 a un valor mayor, como 100. Modifique varios otros archivos de la misma manera.
Intente unas cuantas veces más rosdep update
y puede que tenga éxito. Solo puedo decirles que fallé, así que continúe cambiando, cambié el tiempo de espera a 500 y aún se agotó. . .
Bueno, esto no está en ninguna parte. Para conocer el método definitivo, consulte el método tres.
(3) Método 3
Lo que dije anteriormente rosdep update
es descargar el archivo correspondiente de acuerdo 20-default.list
con el enlace URL ( "raw.githubusercontent.com"
) en el archivo. Dado que no se puede descargar a través de Internet, ¿puedo descargarlo manualmente? La respuesta es sí.
raw.githubusercontent.com es en realidad el servidor de datos de usuario de github, y los archivos descargados por el programa rosdep son los archivos del repositorio github.com/ros/rosdistro.
Ejecute el siguiente comando:
git clone https://github.com/ros/rosdistro.git
(Por supuesto, puedes ir directamente al https://github.com/ros/rosdistro.git
punto de Download Zip
descarga)
La velocidad de Internet puede ser un poco lenta, no se preocupe, puede descargarlo del recurso CSDN que le proporcioné, haga clic para descargar gratis: archivo de instalación ROS rosdistro-master.zip .
Se descargará en una rosdistro-master.zip
carpeta nombrada en el directorio actual , todos los archivos mencionados anteriormente están en él.
Primero descomprime este archivo y luego lo coloco en un nuevo directorio, lo coloco /etc/ros
debajo y ejecuto el comando (la ruta específica se modifica de acuerdo con su directorio )
sudo cp -r /home/ubuntu/Documents/rosdistro-master /etc/ros
Primero modifique 20-default.list
, ejecute:
sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list
"raw.githubusercontent.com"
Reemplace todo el contenido vinculado con el enlace al archivo local, el 20-default.list
contenido final es así (la ruta específica del archivo se cambia de acuerdo con la ubicación que coloque ):
# os-specific listings first
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
yaml file:///etc/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
yaml file:///etc/ros/rosdistro-master/rosdep/base.yaml
yaml file:///etc/ros/rosdistro-master/rosdep/python.yaml
yaml file:///etc/ros/rosdistro-master/rosdep/ruby.yaml
gbpdistro file:///etc/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
Luego, modifique los siguientes tres archivos y "raw.githubusercontent.com"
reemplace también todos los contenidos vinculados con enlaces a archivos locales. Puede usar Ctrl+ para Fbuscar raw.githubusercontent.com
, hay un lugar en cada archivo que debe modificarse.
1. /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
2. /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
3. /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
Modificar gbpdistro_support.py
, ejecutar:
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
Localice raw.githubusercontent.com
esta línea (use Ctrl+ Fbuscar), comente el enlace original y cámbielo a un archivo local. El contenido modificado es el siguiente:
# FUERTE_GBPDISTRO_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml'
FUERTE_GBPDISTRO_URL = 'file:///etc/ros/rosdistro-master/releases/fuerte.yaml'
La captura de pantalla en el archivo es así:
modificar rep3.py
, ejecutar:
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
También ubique raw.githubusercontent.com
esta línea (use Ctrl+ Fbuscar), comente el enlace original y cámbielo a un archivo local. El contenido modificado es el siguiente:
# REP3_TARGETS_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml'
REP3_TARGETS_URL = 'file:etc/ros/rosdistro-master/releases/targets.yaml'
Modificar __init__.py
, ejecutar:
sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
También ubique raw.githubusercontent.com
esta línea (use Ctrl+ Fbuscar), comente el enlace original y cámbielo a un archivo local. El contenido modificado es el siguiente:
# DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
DEFAULT_INDEX_URL = 'file:///etc/ros/rosdistro-master/index-v4.yaml'
Ok, ejecútalo de nuevo rosdep update
, esta vez debe ser exitoso, y el resultado se muestra a continuación.