Ubuntu18.04版本安装ROS及出现错误的处理方法

news2024/11/28 9:44:28

前面的文章是在已安装的ROS基础上做的一些应用,这里我们从零开始安装ROS机器人操作系统。
机器人操作系统(Robot Operating System,ROS)是一个开发机器人软件的框架,里面包含了一系列的工具,库和惯例,目的在于简化在大量不同种类机器人平台之间构建复杂和稳定的机器人行为。
ROS遵循Unix的软件开发理念,所以对于有Unix背景知识的,会感到很熟悉,上手很快。ROS的一个显著特点是,可以使用多种语言来开发,包括C++、Python、Lisp、Java、Javascript、Matlab、Ruby、R语言等等,这也使得不同语言背景的程序员都能够很自然的进入到机器人领域。
更重要的是,ROS是开源且免费的,遵循BSD协议发布,所以是允许商用的,不需要授权,以及由于ROS模块之间的耦合度非常低,自己开发的模块等是可以细粒度的许可授权。
这里就介绍Ubuntu(一个流行且相对友好的Linux发行版)中如何是安装ROS的,本人的版本是18.04版本,这里着重说下版本号,是因为下面的安装跟你的系统版本是有关的。

1、更新软件源

首先就是将软件源添加到ros-latest.list文件,这样就可以让操作系统知道去哪个站点下载了:

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

我们可以查看下文件,源内容已被写入进去

cat /etc/apt/sources.list.d/ros-latest.list
deb http://packages.ros.org/ros/ubuntu trusty main

这里需要注意的是,如果想要安装,先不急着输入上述命令,全文看完之后再来安装,因为ROS的安装跟你的Ubuntu系统版本有关。

2、设置密钥

wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

这里的密钥,在后续进行安装的时候,第二行命令可以先不管它,应该是不需要

3、安装机器人开发库

安装完整桌面套装,包含了机器人开发所需的库和工具

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

如果出现下面这样的错误:

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 installed
                           Depends: ros-indigo-perception but it is not going to be installed
                           Depends: ros-indigo-simulators but it is not going to be installed
                           Depends: ros-indigo-urdf-tutorial but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

E:由于无法纠正问题,您持有损坏的包。所以这里其实是版本不匹配!

我的Ubuntu的发行版本是:

uname -v
#161~18.04.1-Ubuntu SMP Fri Feb 10 15:55:22 UTC 2023

可以看到是18.04的版本,这里列出Ubuntu对应的版本:

Ubuntu版本ros版本
Ubuntu 20.04noetic
Ubuntu18.04melodic
Ubuntu16.04kinetic
Ubuntu14.04indigo

所以需要将indigo修改成melodic,再次安装时,依然有问题:

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

报错:E: Unable to locate package ros-melodic-desktop-full

发现这里报错的原因除了版本对应的问题之外,更关键的是软件源的选择。
使用lsb_release -sc命令直接获取版本也可以,这里显示为bionic

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

或者为了更好的在其他不确定的系统上进行移植,输入下面这样的命令(推荐):

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

再次查看ros-latest.list文件内容:

cat /etc/apt/sources.list.d/ros-latest.list
deb http://packages.ros.org/ros/ubuntu bionic main

然后sudo apt-get update更新之后,再次安装就没有问题了

安装好了ros之后,就会在opt目录下面出现ros目录,查看:ls /opt

nvidia  ros

可以进入ros里面再去看看,是melodic版本,里面有哪些目录与文件:cd /opt/ros/melodic

bin     include           local_setup.sh   setup.sh        share
env.sh  lib               local_setup.zsh  _setup_util.py
etc     local_setup.bash  setup.bash       setup.zsh

4、安装依赖包

rosdep是ROS的依赖管理实用程序,rosdep可以与ROS包和外部库一起使用,是一个命令行实用程序,用于识别和安装依赖项以构建或安装包。

sudo rosdep init

如果出现 sudo: rosdep: command not found 这样的错误,就需要安装python-rosdep
安装命令: sudo apt-get install python-rosdep

rosdep update

如果因为网络而出现不能访问的错误

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 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

# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

如果在前面访问不了,同样的里面的站点也会访问不了,修改hosts文件:

sudo gedit /etc/hosts
#在文件末尾添加
151.101.84.133 raw.githubusercontent.com

然后再rosdep update,有时多试几次就可以了。

5、新开终端自启

最后将setup.bash添加到~/.bashrc,这样每次启动终端就会自动运行,从而可以在shell中运行ROS提供的命令了

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

不然每次开终端都需要source /opt/ros/melodic/setup.bash就显得比较麻烦。

6、检验ROS

ROS安装好了之后,我们输入命令:roscore 查看下是否能正常启动这个节点管理器,如图:

恩,没有问题,这个roscore可以理解成每个节点需要进行交互,必须向它报道,因为ROS是松耦合的一种组织方式,节点之间如果要进行消息的传递,就需要roscore来提供连接信息,也就是说每个节点在启动的时候,都会连接到roscore并注册该节点发布和订阅的消息。当新的节点出现的时候,roscore就会向其提供其他相同消息主题的节点,从而建立连接关系,如果没有roscore的话,节点之间就不能通信了。
另外我们也看到了ROS_MASTER_URI=http://YAB:11311/,其中YAB是主机名,11311是默认端口,这样我们就可以通过这个URI来进行访问了。

现在我们来开启两个节点测试下,新增的两个节点为talkerlistener,一个说话,一个倾听,也就是一个发布,一个订阅,画张图来表示它们之间的关系如下:

需要注意的是,图中的节点是周期性的调用roscore提供的服务来找到其他节点,这里就是talkerlistener周期性的调用roscore,而这两个节点之间的通信是直接完成的,节点跟roscore都只是短暂性的连接。

现在分别打开终端,并运行节点:

rosrun rospy_tutorials talker
rosrun rospy_tutorials listener

如图:

这个listener就会一直侦听talker发布的消息。如果将talker节点Ctrl+C终止,这个listener节点也将停止显示信息,仍将处于侦听状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/866707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从一道面试题来学习前台进程和后台进程、孤儿进程和僵尸进程

1、面试题介绍 以前面试,面试官问了一个问题,大意是: 我们在终端中,通过执行 python main.py 命令,会启动一台前台进程直到程序结束。现在我还是想通过执行 python main.py ,启动一个后台进程,…

k8s的yaml文件管理

声明式管理方法: 1.适合于对资源的修改操作2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)3.对资…

【实操】2023年npm组件库的创建发布流程

2022年的实践为基础,2023年我再建一个组件库【ZUI】。步骤回顾: 2022年的npm组件包的发布删除教程_npm i ant-design/pro-components 怎么删除_啥咕啦呛的博客-CSDN博客 1.在gitee上创建一个项目,相信你是会的 2.创建初始化项目,看吧&#…

SpringBoot使用自定义事件监听器的demo

记录一下SpringBoot自定义事件监听器的使用方法 案例源码:SpringBoot使用自定义事件监听器的demo 使用的SpringBoot2.0.x版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><…

【Opencv入门到项目实战】(十):项目实战|文档扫描|OCR识别

所有订阅专栏的同学可以私信博主获取源码文件 文章目录 1.引言1.1 什么是光学字符识别 (OCR)1.2 应用领域 2.项目背景介绍3.边缘检测3.1 原始图像读取3.2 预处理3.3 结果展示 3.轮廓检测4.透视变换5.OCR识别5.1 tesseract安装5.2 字符识别 1.引言 今天我们来看一个OCR相关的文…

开发工具IDEA的下载与初步使用【各种快捷键的设置,使你的开发事半功倍】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于IDEA的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.IDEA的简介以及优势 二.IDEA的下载 1.下…

释放马氏距离的力量:用 Python 探索多元数据分析

一、说明 马哈拉诺比斯距离&#xff08;Mahalanobis Distance&#xff09;是一种测量两个概率分布之间距离的方法。它是基于样本协方差矩阵的函数&#xff0c;用于评估两个向量之间的相似程度。Mahalanobis Distance考虑了数据集中各个特征之间的协方差&#xff0c;因此比欧氏距…

skynet 网络模块解析

文章目录 前言环境准备sneak peek线程数据结构会话对象&#xff1a;持有基础套接字&#xff0c;封装了套接字的基础操作。会话管理器&#xff1a;持有并管理会话池&#xff0c;给外部模块提供网络接口。 网络模块管理会话管理器的生命周期管理工作模式 总结技术点原子数据管道描…

漫话拥塞控制:BBR 是个单流模型

概要(便于检索主题)&#xff1a;单流&#xff0c;多流收敛&#xff0c;probe buffer 挤压带宽&#xff0c;maxbw-filter wnd。 我曾经经常说 BBR 是个单流模型&#xff0c;而不是多流收敛模型&#xff0c;也做过不少评论&#xff0c;最近在复听 IETF 的大会&#xff0c;在 IET…

SQL | 检索数据

1-检索数据 1.1-检索单个列 SELECT prod_name FROM Products; 上述SELECT语句从Products表中检索一个名为prod_name的列。 所要查找的列在select后面&#xff0c;from关键字指出从那个表查询数据。 输出如下&#xff1a; prod_name8 inch teddy bear12 inch teddy bear18…

linux鲁班猫代码初尝试[编译镜像][修改根文件系统重编译][修改设备树改屏幕为MIPI]

编译镜像 官方百度云盘资料:https://doc.embedfire.com/linux/rk356x/quick_start/zh/latest/quick_start/baidu_cloud/baidu_cloud.html 解压虚拟机压缩包:"鲁班猫\8-SDK源码压缩包\开发环境虚拟机镜像\ubuntu20.04.7z"后既可以用VMware打开,打开后可以看到已经有…

【前端】JQ生成二维码

提供两种方法&#xff0c;两种都是借助JQ插件生成。 所需文件&#xff1a;https://download.csdn.net/download/qq_25285531/88204985https://download.csdn.net/download/qq_25285531/88204985 方法一&#xff1a; <script type"text/javascript" src"/s…

【JavaEE基础学习打卡02】是时候了解JavaEE了

目录 前言一、为什么要学习JavaEE二、JavaEE规范介绍1.什么是规范&#xff1f;2.什么是JavaEE规范&#xff1f;3.JavaEE版本 三、JavaEE应用程序模型1.模型前置说明2.模型具体说明 总结 前言 &#x1f4dc; 本系列教程适用于JavaWeb初学者、爱好者&#xff0c;小白白。我们的天…

【刷题笔记8.11】LeetCode题目:二叉树中序遍历、前序遍历、后序遍历

LeetCode题目&#xff1a;二叉树中序遍历、前序遍历、后序遍历 题目1&#xff1a;二叉树中序遍历 &#xff08;一&#xff09;题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 &#xff08;二&#xff09;分析 二叉树中序遍历&#xff0c;遍历…

6-Ngnix配置反向代理

1.前提 虚拟机能连接外网 仿真http应用需在本虚拟机启用(原因&#xff1a;只有一台虚拟机做测试) http_8080和http_8081要启用&#xff08;http测试应用&#xff09; [rootcent79-2 ~]# ls -l http_* -rwxr-xr-x 1 root root 6391676 Jul 19 13:39 http_8080 -rwxr-xr-x 1 …

【C# Programming】C#第一课(自己学习的笔记)

目录 一、C# 介绍 1.1 托管代码(Manage Code ) &#xff1a; 1.2 基础类型库 (Base Class Library)&#xff1a; 1.3 程序集(Assembly)&#xff1a; 1.4 .NET 框架&#xff1a; 1.5 公共中间语言(Common Intermediate Language)&#xff0c;简称 IL。 1.6 C#编译器将源代…

RISC-V在快速发展的处理器生态系统中找到立足点

原文&#xff1a;RISC-V Finds Its Foothold in a Rapidly Evolving Processor Ecosystem 作者&#xff1a;Agam Shah 转载自&#xff1a;https://thenewstack.io/risc-v-finds-its-foothold-in-a-rapidly-evolving-processor-ecosystem/ 以下是正文 But the open source pr…

【用unity实现100个游戏之6】制作一个战旗自走棋类游戏(附源码)

文章目录 前言导入素材开始1. 设置瓦片间隙2. 放置全图瓦片3. 美化瓦片地图4. 添加树木障碍物5. 设定不同的排序图层6. 瓦片交互6. 瓦片交互优化6. 瓦片是否允许角色7. 添加角色8. 新增游戏管理脚本9. 角色移动范围逻辑10. 角色移动范围可视化11. 角色移动12. 重置瓦片颜色12. …

Spark(38):Streaming DataFrame 和 Streaming DataSet 转换

目录 0. 相关文章链接 1. 基本操作 1.1. 弱类型 api 1.2. 强类型 1.3. 直接执行 sql 2. 基于 event-time 的窗口操作 2.1. event-time 窗口理解 2.2. event-time 窗口生成规则 3. 基于 Watermark 处理延迟数据 3.1. 什么是 Watermark 机制 3.2. update 模式下使用 w…

【计算机视觉|生成对抗】条件生成对抗网络(CGAN)

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Conditional Generative Adversarial Nets 链接&#xff1a;[1411.1784] Conditional Generative Adversarial Nets (arxiv.org) 摘要 生成对抗网络&#xff08;Generative Adversarial…