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

前面的文章是在已安装的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.hqwc.cn/news/62877.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统架构设计专业技能 · 软件工程(一)【系统架构设计师】

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

修改第三方组件默认样式

深度选择器 修改el-input的样式&#xff1a; <el-input class"input-area"></el-input>查看DOM结构&#xff1a; 原本使用 /deep/ 但是可能不兼容 使用 :deep .input-area {:deep(.el-input__inner){background-color: blue;} }将 input 框背景色改为…

基于STM32微控制器的物联网(IoT)节点设计与实现

基于STM32微控制器的物联网(IoT)节点的设计和实现。我们讨论物联网节点的基本概念和功能,并详细介绍了STM32微控制器的特点和优势。然后,我们将探讨如何使用STM32开发环境和相关的硬件模块来设计和实现一个完整的物联网节点。最后,我们将提供一个示例代码,展示如何在STM3…

JAVA(一)

我的第一个JAVA程序 以下我们通过一个简单的实例来展示Java编程,创建文件HelloWorld.java&#xff08;文件名需与类名一致&#xff09;,代码如下 实例 public class HelloWorld{public static void main(String[] args){System.out.println(Hello World) } } 注:Srting ar…

ARP协议原理与应用

ARP协议原理与应用 一、ARP协议概述1.1、场景描述1.2、ARP协议概述 二、ARP协议工作原理2.1、ARP工作流程2.2、ARP工作原理2.3、ARP缓存表 三、ARP协议分类3.1、免费ARP&#xff08;Gratuitous ARP &#xff09;3.2、代理ARP&#xff08;Proxy ARP &#xff09;3.3、RARP与IARP…

9.2.2Socket(TCP)

一.过程: 1.建立连接(不是握手),虽然内核中的连接有很多,但是在应用程序中,要一个一个处理. 2. 获取任务:使用ServerSocket.accept()方法,作用是把内核中的连接获取到应用程序中,这个过程类似于生产者消费者模型. 3. 使用缓冲的时候,注意全缓冲和行缓冲. 4.注意关闭文件资源…

使用 Postman 批量发送请求的最佳实践

目录 背景 批量发送&#xff1f; 起因 思考 Postman 批量发送接口 创建集合和接口 批量发送接口 资料获取方法 背景 最近写了几个接口&#xff1a; 获取 books 的接口获取 likes 的接口获取 collections 的接口 但是我还是不放心&#xff0c;因为这些接口到底稳不稳…

案例13 Spring MVC参数传递案例

基于Spring MVC实现HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON方式的参数传递。 1. 创建项目 选择Maven快速构建web项目&#xff0c;项目名称为case13-springmvc02。 2. 配置Maven依赖 <?xml version"1.0" encoding"UTF-8&quo…

WPF上位机9——Lambda和Linq

Lambda Linq 操作集合 使用类sql形式查询 Linq To SQL

分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测 目录 分类预测 | MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料 分类效果 基本介绍 1.MATLAB实现SMA-CNN-BiLSTM-Attention多输入分类预测&#xff0c;CNN-BiLSTM结…

unity新输入系统的简单使用(New InputSystem)

1、在包管理器 unity注册表中下载安装InputSystem 2、给玩家添加组件PlayerInput&#xff0c;点击CreatAction,创建一个InputAct InputAct,这是玩家的输入文件&#xff0c;在里面可以设置玩家输入 3、使用 例如玩家控制角色移动 在InputAct中&#xff0c;默认已经设置好了移…

基于 CentOS 7 构建 LVS-DR 群集 配置nginx负载均衡

环境配置&#xff1a; RHCE客户机192.168.100.146node1lvs192.168.100.145node2RS192.168.100.147node3RS192.168.100.148 配置ipvsadm httpd&#xff1a; [rootnode1 ~]# yum install ipvsadm.x86_64 [rootnode2 ~]# yum install http -y [rootnode2 ~]# systemctl …