ubunt18.04安装ROS避坑指南

ops/2024/10/19 16:31:04/

1 前言:

本文是ubunt18.04下安装ros的,如果想使用ros2,请看我的下一篇文章,ubunt18.04安装ROS2

本来是不该写的,有官方文档,还有很多大神的分析。但里面的坑太多,我考虑了一下,还是想记录下避免下次在跳泥坑;

坑在哪里呢,其实如果能正常访问某些网站,理论上2个小时左右是完全能完成安装的,坑就在这些安装网站是打不开的,我这就是个神坑;

一个翻译的官网安装步骤;一个是业内名气很大的古月居整理的,对,确实是整理的,因为它给的解决方案,我在zhihu上无意看过。

http://dev.ros2.fishros.com/doc/Installation/Ubuntu-Install-Binary.html#system-requirements
https://www.guyuehome.com/34563

几个重要网址你先测试下

常见的安装资料步骤会用到如下两个网站

http://packages.ros.org/ros/ubuntu
https://raw.githubusercontent.com

我这边的网络是一个也打不开,导致了我安装ros难度变大;

然后测试下如下两个网站

第一个是ros下载,第二是rosdep init update 用的

http://mirrors.ustc.edu.cn/ros/ubuntu/ 
https://github.com/ros/rosdistro

等于说是替换版本;

2 更改Ubuntu软件源

更改Ubuntu软件源
https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/
在这里插入图片描述

sudo gedit /etc/apt/sources.list

打开后把清华源对应版本 进行替换;

3 添加ROS软件源

官网推荐的这个,

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

我是打不开的,请使用下面国内的

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'

向系统添加秘钥输入以下命令:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

安装错误

sudo apt-get update
sudo apt-get install ros-melodic-desktop-full python-rosinstall

此处如果出问题,请参考
https://blog.csdn.net/qq_44830040/article/details/106049992

如果出现这种错误:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:The following packages have unmet dependencies:ros-indigo-desktop-full : Depends: ros-indigo-desktop but it is not going to be installedDepends: ros-indigo-perception but it is not going to be installedDepends: ros-indigo-simulators but it is not going to be installedDepends: ros-indigo-urdf-tutorial but it is not going to be installed
E: Unable to correct problems, you have held broken packages. 
使用sudo aptitude install ros-melodic-desktop-full 安装

4 sudo rosdep init &&rosdep update update失败

ROS:sudo rosdep init出错常规方法都无效后解决办法记录
如果还不行,我是参考如下:
https://blog.csdn.net/Iamsonice/article/details/123315787

第一:手动创建
sudo mkdir -p /etc/ros/rosdep/sources.list.d
cd /etc/ros/rosdep/sources.list.d
sudo gedit 20-default.list

然后将下面的内容粘贴到这个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

如果你继续执行sudo rosdep init ,还是同样错误,不用管他

第二步 update

依然失败;
换个思路,这篇文章有介绍
https://blog.csdn.net/Iamsonice/article/details/123315787
先把所需的文件下载下来,就是下载update所需的一些配置文件

git clone https://github.com/ros/rosdistro.git home/fang/ros2/download
替换一
sudo gedit /usr/lib/python3/dist-packages/rosdep2.7/rep3.py

输入后回车会弹出rep3.py文件将原来文件中的 REP3_TARGETS_URL = ‘https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml’ 替换成 REP3_TARGETS_URL = ‘file:///home/fang/ros2/download/rosdistro/releases/targets.yaml’
在这里插入图片描述

替换二

sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py

输入回车后会弹出__init__.py文件将原来文件中的 DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml’替换成 DEFAULT_INDEX_URL = ‘file:///home/nice/robot/index-v4.yaml’
在这里插入图片描述

替换三:

修改/etc/ros/rosdep/sources.list.d/20-default.list中的网址为本地地址

sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list

输入回车后会弹出20-default.list文件将原来文件中的所有 raw.githubusercontent.com开头的网址替换成对应文件在本地的路径(可将下面代码更换20-default.list中的代码

#os-specific listings first
yaml file:///home/fang/ros2/download/rosdistro/rosdep/osx-homebrew.yaml osx#generic
yaml file:///home/fang/ros2/download/rosdistro/rosdep/base.yaml
yaml file:///home/fang/ros2/download/rosdistro/rosdep/python.yaml
yaml file:///home/fang/ros2/download/rosdistro/rosdep/ruby.yaml
gbpdistro file:///home/fang/ros2/download/rosdistro/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

fang@fang-inspiron-5580:~/ros2/download/rosdistro$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit file:///home/fang/ros2/download/rosdistro/rosdep/osx-homebrew.yaml
Hit file:///home/fang/ros2/download/rosdistro/rosdep/base.yaml
Hit file:///home/fang/ros2/download/rosdistro/rosdep/python.yaml
Hit file:///home/fang/ros2/download/rosdistro/rosdep/ruby.yaml
Hit file:///home/fang/ros2/download/rosdistro/releases/fuerte.yaml
Query rosdistro index file:///home/fang/ros2/download/rosdistro/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Skip end-of-life distro "dashing"
Skip end-of-life distro "eloquent"
Skip end-of-life distro "foxy"
Skip end-of-life distro "galactic"
Skip end-of-life distro "groovy"
Add distro "humble"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Add distro "iron"
Skip end-of-life distro "jade"
Skip end-of-life distro "kinetic"
Skip end-of-life distro "lunar"
Skip end-of-life distro "melodic"
Add distro "noetic"
Add distro "rolling"
updated cache in /home/fang/.ros/rosdep/sources.cache

5 设置环境变量和ros安装

在这里插入图片描述

fang@fang-inspiron-5580:~/ros2/download/rosdistro$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
fang@fang-inspiron-5580:~/ros2/download/rosdistro$ source ~/.bashrc
fang@fang-inspiron-5580:~/ros2/download/rosdistro$ sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
Reading package lists... Done
Building dependency tree       
Reading state information... Done
build-essential is already the newest version (12.4ubuntu1).
python-rosinstall is already the newest version (0.7.8-1).
python-wstool is already the newest version (0.1.17-1).
python-wstool set to manually installed.
The following NEW packages will be installed:python-rosinstall-generator
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 11.5 kB of archives.
After this operation, 75.8 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://mirrors.ustc.edu.cn/ros/ubuntu bionic/main amd64 python-rosinstall-generator all 0.1.23-1 [11.5 kB]
Fetched 11.5 kB in 0s (96.5 kB/s)                      
Selecting previously unselected package python-rosinstall-generator.
(Reading database ... 320738 files and directories currently installed.)
Preparing to unpack .../python-rosinstall-generator_0.1.23-1_all.deb ...
Unpacking python-rosinstall-generator (0.1.23-1) ...
Setting up python-rosinstall-generator (0.1.23-1) ...

6 测试安装是否成功

1.启动RosMaster(管理Ros中各个节点的“大管家”,每次启动Ros时需要首先启动RosMaster)

roscore
fang@fang-inspiron-5580:~/ros2/download/rosdistro$ roscore
... logging to /home/fang/.ros/log/6ec2d790-fe1d-11ee-aba8-1c1bb5cdec7c/roslaunch-fang-inspiron-5580-14636.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.started roslaunch server http://fang-inspiron-5580:44325/
ros_comm version 1.14.13

1.启动RosMaster(管理Ros中各个节点的“大管家”,每次启动Ros时需要首先启动RosMaster)

roscore
fang@fang-inspiron-5580:~/ros2/download/rosdistro$ roscore
... logging to /home/fang/.ros/log/6ec2d790-fe1d-11ee-aba8-1c1bb5cdec7c/roslaunch-fang-inspiron-5580-14636.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.started roslaunch server http://fang-inspiron-5580:44325/
ros_comm version 1.14.13

2.启动海龟仿真器turtlesim

rosrun turtlesim turtlesim_node
fang@fang-inspiron-5580:~/ros2/download/rosdistro$ rosrun turtlesim turtlesim_node
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqeglfs.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqeglfs.so, metadata=
{"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3","MetaData": {"Keys": ["eglfs"]},"className": "QEglFSIntegrationPlugin","debug": false,"version": 329989
}

3.启动海龟控制器

rosrun turtlesim turtle_teleop_key
fang@fang-inspiron-5580:~/ros2/download/rosdistro$ rosrun turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle. 'q' to quit.

使用键盘的上下左右键,可以控制小龟的移动!
在这里插入图片描述
自此,算是安装完成;


http://www.ppmy.cn/ops/9716.html

相关文章

网卡接收数据的关键过程

网卡接收数据的关键过程 网卡中断处理网络软中断处理协议栈处理传输层处理 Linux内核tracers的实现原理与应用 前年ftrace for io /去年ftrace for mm/今年ftrace for network.今年ftrace也被深度定制加强。 在这篇文章中,我们将深入探讨网卡接收数据的完整过程,了解数据是如何…

Java中的设计模式在代码重构中的应用

设计模式是在软件开发中经常使用的一种经验总结&#xff0c;用于解决在特定上下文中重复出现的问题。在代码重构中&#xff0c;设计模式可以帮助我们改善代码的结构、可读性和可维护性。 下面是几个常见的设计模式及其在代码重构中的应用。 1. 单例模式&#xff08;Singleton …

SimSiam(CVPR 2021)原理与代码解析

paper&#xff1a;Exploring Simple Siamese Representation Learning official implementation&#xff1a;https://github.com/facebookresearch/simsiam 本文的创新点 本文提出了一种名为SimSiam的简单孪生网络&#xff08;Siamese network&#xff09;结构&#xff0c;用…

【行为型模式】状态模式

一、状态模式概述 状态模式的定义&#xff1a;允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。(对象行为型) 策略模式和状态模式是双胞胎&#xff0c;在出生时才分开。 策略模式是围绕可以互换的算法来创建成功业务的。状态模式走的是更崇高的路&#xff0…

MySQL-知识点详解

本文简要介绍了MySQL数据库的关键内容&#xff0c;包括数据类型、SQL语句、索引类型以及数据库优化等方面。详细讨论了各种数据类型&#xff0c;比较了DATETIME和TIMESTAMP类型&#xff0c;解释了SQL语句的执行顺序和数据库连接方式&#xff0c;介绍了MySQL索引的概念和优缺点&…

291个地级市资源错配指数、劳动和资本相对扭曲指数(2006-2021年)

01、数据介绍 资源错配指数&#xff08;Misallocation Index&#xff09;是一个用于衡量资源配置效率的指标&#xff0c;它衡量的是生产要素的配置是否合理&#xff0c;是否达到了最优的状态。资源错配指数越高&#xff0c;资源的利用效率越低。资源错配指数主要用于衡量各种生…

JS - 分支结构、循环结构

关于JavaScript中的分支结构和循环结构&#xff0c;其实和其他编程语言区别也不是很大&#xff0c;只是js对这两种结构进行了相应的扩充&#xff0c;当然本质上并没有变化&#xff0c;本篇就是一篇记录博主在学习前端路上的总结和敲过的demo&#xff0c;实际上水份很大&#xf…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用CFMIME Encoder方法进行图像压缩保存(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用CFMIME Encoder方法进行图像压缩保存&#xff08;C&#xff09; Baumer工业相机Baumer工业相机通过NEOSDK进行图像压缩的技术背景代码分析第一步&#xff1a;先引用对应的NET框架的DLL文件第二步&#xff1a;在回调函数里进行…