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://xiahunao.cn/news/1379871.html

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

相关文章

并发:通道

编程就是把具体实现抽象,屏蔽底层的一些细节。数据就像一条流水线,从一个并发单元传递到另一个并发单元。那么我们怎么传递数据呢?基于内存共享或者基于网络传输? 数据共享方式 同一进程内有不同的并发单元,例如 goroutine A 和 goroutine B,它们可能在不同的物理核上并…

使用Git进行项目版本控制

1、什么是Git? GIT,全称是分布式版本控制系统,git通常在编程中会用到,并且git支持分布式部署,可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地&#xff0c…

Mac钉钉如何添加好友?

钉钉(DingTalk)是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台,支持手机和电脑间文件互传,可以让企业进入高效移动办公时代。那么Mac版的钉钉,是如何添加好友的呢?下面小编给大家带来Mac钉钉添…

Android_基于BMOB的聊天软件_添加好友

之前提过为什么要用BMOB,前段时间完成了用户的注册与登录,现在做添加好友功能,主要 参考BMOB官网 提供的资料。 主要流程就是,输入好友关键字,点击搜索,显示服务器上对应的搜索结果,用BMOB的好…

Android_聊天软件_加好友_与服务器交互

番外篇: 1.在做界面时,总遇到输入键盘不能自己收起,导致需要手动收起键盘,使操作多一步,现在说一下我的流程, 检查键盘是否显示,代码如下: private Context mContext;private Vie…

佛祖保佑,永不宕机,永无bug

当我们的程序编译通过,能预防的bug也都预防了,其它的就只能交给天意了。当然请求佛祖的保佑也是必不可少的。 下面是一些常用的保佑图: 佛祖保佑图 ——————————————————————————————————————————…

Android_聊天软件_添加好友_与服务器交互

上一篇文章介绍了用户A向服务器发送添加B的请求,这篇文章介绍服务器通知用户B,以及用户B同意与否的操作。 好久没有更新文章,主要是前段时间花了2天时间帮别人画了点东西,还有就是充电了,主要是Service、Notification…

wxid转扫一扫添加好友

什么是扫一扫?就是在日益严格的环境下,手动加人超过两天直接被判为营销,添加超过10个对方就收不到消息了,而扫一扫协议刚好就能规避,正常扫一扫添加只有在面对面或者推荐扫码才能添加,而这个就是模拟面对面…

原始套接字编程(AF_PACKET+SOCK_RAW)模拟一个PING

1. 背景 最近看一个客户的代码片段,发现他在用原始套接字编程,一般学习套接字都是流式套接字和数据报套接字,本来也不是搞网络的,原始套接字了解得很少,借着这次机会,自己来学习一下原始套接字编程。 2. …

STL初探

STL简介 STL(standard template libaray - 标准模板库)是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 STL的一些版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,…

PHP最简单自定义自己的框架实现像TP链式sql语句(六)

1、实现效果,链式sql语句封装 order、where、group、limit等封装 2、数据表构造函数入参,ModelBase.php public $table NULL; public function __construct($table){$this->table$table;if(!$this->table){die("no table" );}$this-&…

AI一键生成数字人

AI一键生成数字人,不玩虚的 阅读时长:10分钟 本文内容: 结合开源AI,一键生成短视频发布到常见的某音,某手平台,狠狠赚一笔 前置知识: 基本的 python 编程知识Jupyter Notebook 使用过Linux 使用过 先上源码…

Wallpaper Engine使用视频壁纸黑屏解决方法(window10)

1.点击电脑左下角开始键>设置>搜索框搜索图形设置 2.浏览>找到wallpaper engine相关程序添加 3.将三个的选项改成节能 4.如果软件还在运行,重新启动

WebView2 通过 PuppeteerSharp 实现爬取 王者 壁纸 (案例版)

王者壁纸自动化获取逻辑分析 其实它的逻辑很简单, 就是王者的官网,打开后,在右下角就看到了皮肤页面部分。 这个时候,点击更多,就会打开全部英雄详情的页面。 这个时候,单点任意一个英雄,就会…

微信小程序短视频去水印,王者查战力,手持弹幕,获取头像壁纸,工具箱源码

短视频在线去水印,无任何广告 王者荣耀查荣耀战力已更新 新增加查看历史上的今天 新增手持弹幕,修复剪辑视频不能保存问题。 新增壁纸,头像,网址转二维码。 【微信小程序】:好野工具 【小程序版本】:5.1.1 【小…

王者壁纸批量爬取

语言:python json格式网站: 爬取网址:王者荣耀壁纸下载-王者荣耀官方网站-腾讯游戏 思路分析: 分析下一页,发现下一页之后是在当前页面的局部重新加载 当然排除可以直接爬取目标url获取当前页面的信息以及后面的所…

C语言案例 阶乘求和-12

题目:求1 2!3! … 20!的和。 程序分析 阶乘相关原理:一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!,任何大于1的自然数n阶乘表示方法:…

5大电脑软件推荐!每一款都是精心挑选,良心推荐!

说起实用的电脑软件,我想你看对地方了,世上最棒最实用的电脑软件推荐!每一款都十足良心! 是时候表演真正的技术了! 1.PotPlayer 超受欢迎的播放器之一。这款播放器可能会成为你的菜,内存占用低并且不卡&a…

Windows上有哪些推荐的笔记软件?

说实话,windows上的优秀的笔记软件没有ipad上多,在ipad上的notability、goodnotes、marginnote等优秀的笔记软件,在windows上很少有可替代的产品,不过在windows上也有一些比较优质的笔记软件,对于学生来说,…

3款强大到离谱的电脑软件,个个提效神器,从此远离加班

推荐3款让你偷懒,让你上头的提效电脑软件,个个功能强大,让你远离加班! 很多几个小时才能做好的事情,用上它们,只需要5分钟就行!! 1、Quicker —— 桌面快速启动工具 Quicker鼠标效…