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.mzph.cn/news/32677.shtml

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

相关文章

Flink正常消费一段时间后,大量反压,看着像卡住了,但又没有报错。

文章目录 前言一、原因分析二、解决方案 前言 前面我也有提到,发现flink运行一段时间后,不再继续消费的问题。这个问题困扰了我非常久,一开始也很迷茫。又因为比较忙,所以一直没有时间能够去寻找答案,只是通过每天重启…

函数的模拟实现

题一&#xff1a; 模拟实现strncpy #include <stdio.h>void my_strncpy(char* arr2, char* arr1, size_t num){int i 0;for (i 0; i < num; i){*(arr2 i) *(arr1 i);}}int main(){char arr1[] "hello liangzai";char arr2[10] { 0 };//strncpy(ar…

安装elasticsearch

一、docker安装elasticsearch 1、下载镜像 docker pull elasticsearch:6.5.4 2、启动容器 docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ -e "discovery.typesingle-node" \ -e "cluster.nameelasticsearch" \ -e "ES_JAVA_OPTS-Xm…

MySQL——Mysql安装教程- Windows

一、Mysql安装 1、下载mysql安装包 下载链接&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1rFpMqOCApiQQEwYSs9XSmg https://pan.baidu.com/s/1rFpMqOCApiQQEwYSs9XSmg 提取码&#xff1a;zt88 2、 安装 1&#xff09;选择电脑磁盘空闲的路径&#xff1a; 2&…

Small Tip: 如何Debug Start Routine

我也不知道咋地&#xff0c;在generated ABAP里面打断点进不去。 我也不晓得怎么弄&#xff0c;今天反正是硬找着去弄。不晓得有没有其他好办法。有知道的小伙伴评论下吧。 1、 在DTP里面选Before Transformation&#xff0c;要去debug start routine选这个就够了。其他的随意…

吉利科技携手企企通,打造集团化数智供应链系统

近日&#xff0c;吉利科技集团有限公司&#xff08;以下简称“吉利科技”&#xff09;联合企企通成功召开SRM采购供应链管理项目启动会。企企通与吉利科技高层、项目负责人与团队成员出席此次启动会。 双方将携手在企业供应商全生命周期管理、采购全流程、电子招投标、采购分析…

Python基础小项目

今天给大家写一期特别基础的Python小项目&#xff0c;欢迎大家支持&#xff0c;并给出自己的完善修改 &#xff08;因为我写的都是很基础的&#xff0c;运行速率不是很好的 目录 1. 地铁票价题目程序源码运行截图 2. 购物车题目程序源码运行截图 3. 名片管理器题目程序源码运行…

Maven依赖管理

依赖配置 依赖指的是项目在运行时所需要的jar包&#xff0c;一个项目中可以引入多个依赖 配置方法 1.在项目pom.xml中编写 <dependencies> 标签 2.在 <dependencies> 标签中使用<dependency>引入坐标 3.定义坐标的groupId,artifactId,version 4. 刷新按钮&a…

接口测试—Fiddler工具

文章目录 Fiddler 知识1. 导语2. 配置3. 常用命令面试题1. 利用Fiddler抓取android设备https请求 Fiddler 知识 未完待续 1. 导语 为什么要用Fiddler&#xff1f; 提高测试效率. 测试人员通过使用Fiddler自己调试接口&#xff0c;无需麻烦后台同学帮忙. 模拟多种测试环境. 可…

棒球课堂的发展规划·棒球联盟

棒球课堂的发展规划 1. 棒球课堂的发展环境 探讨棒球课堂如何通过运用创新的教学方法来适应不断变化的市场需求。包括但不限于&#xff0c;科学地运用大数据和人工智能技术来提高教学效率&#xff0c;加强教师队伍的专业培训&#xff0c;以及拓展课外活动&#xff0c;增强学生…

【果树农药喷洒机器人】Part3:变量喷药系统工作原理介绍

本专栏介绍&#xff1a;免费专栏&#xff0c;持续更新机器人实战项目&#xff0c;欢迎各位订阅关注。 关注我&#xff0c;带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章&#xff01; 文章目录 一、变量喷药系统工作原理二、液压通路设计与控制系统封装2.1液压通路…

企业权限管理(八)-登陆使用数据库认证

Spring Security 使用数据库认证 在 Spring Security 中如果想要使用数据进行认证操作&#xff0c;有很多种操作方式&#xff0c;这里我们介绍使用 UserDetails 、 UserDetailsService来完成操作。 UserDetails public interface UserDetails extends Serializable { Collecti…

通过PostMan监视提交文件,验证web文件传输

切换文件流,传输文件 找到图片地址 发送请求然后接受 再来一张 哈&#xff0c;谢谢各位同志的阅读&#xff0c;然后呢如果觉得本文对您有所帮助的话&#xff0c;还给个免费的赞捏 Thanks♪(&#xff65;ω&#xff65;)&#xff89;

OpenStack-Y版安装部署

OpenStack-Y版安装部署 目录 OpenStack-Y版安装部署 1、环境准备 1.1 环境简介1.2 配置hosts解析(所有节点)1.3 配置时间同步1.4 安装openstack客户端(控制节点执行)1.5 安装部署MariaDB(控制节点执行)1.6 安装部署RabbitMQ(控制节点执行)1.7 安装部署Memcache(控制节点执行)2、…

穿越未来:探索虚拟现实科技的未来前景

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;科技&#xff0c;正如一颗崭新的明星&#xff0c;迅猛崛起&#xff0c;为人类带来前所未有的体验和想象空间。随着科技的飞速发展&#xff0c;VR 科技的未来充满了无限的可能性&#xff0c;正将我们引向一个…

IP网络广播系统草坪音箱景区系统防水石头,草坪音箱的应用

IP网络广播系统草坪音箱景区系统防水石头,草坪音箱的应用 SV-7045V是深圳锐科达电子有限公司的一款防水网络草坪音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率20W。常用场景&#xff1a;公园ip草坪音箱&…

Labview控制APx(Audio Precision)进行测试测量(六)

用 LabVIEW 驱动 VIs生成任意波形 在 APx500 应用程序中&#xff0c;默认波形类型为正弦。这是指 APx 内置的正弦发生器&#xff0c;根据信号路径设置&#xff0c;许多测量还允许其他内置波形&#xff0c;如方波&#xff0c;分裂正弦波或分裂相位&#xff0c;以及使用导入的。w…

28.Netty源码之缓存一致性协议

Mpsc Queue 基础知识 Mpsc 的全称是 Multi Producer Single Consumer&#xff0c;多生产者单消费者。Mpsc Queue 可以保证多个生产者同时访问队列是线程安全的&#xff0c;而且同一时刻只允许一个消费者从队列中读取数据。 Netty Reactor 线程中任务队列 taskQueue 必须满足多个…

SQL | 高级数据过滤

5-高级数据过滤 通过组合WHERE子句&#xff0c;建立功能更强的检索语句。 5.1-组合WHERE子句 前面写的都是单一条件下的WHERE子句&#xff0c;SQL语句允许给出多个WHERE子句来组合检索&#xff0c;这些WHERE子句通过AND子句或者OR子句进行连接。 操作符&#xff08;operato…

春秋云镜 CVE-2022-0948

春秋云镜 CVE-2022-0948 WordPress plugin Order Listener for WooCommerce SQLI 靶标介绍 WordPress 插件 Order Listener for WooCommerce 3.2.2 之前版本存在 SQL注入漏洞。 启动场景 漏洞利用 EXP curl http://example.com/?rest_route/olistener/new --data {"…