机器人操作系统(ROS)入门与实践--1

Posted 羊羊羊ox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器人操作系统(ROS)入门与实践--1相关的知识,希望对你有一定的参考价值。

ROS入门与实践--1

1.ROS简介

1.1 什么是ROS?

ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面ROS相当于一种“机器人框架(robot frameworks)”类似的“机器人框架”有:Player,YARP,Orocos,CARMEN,Orca,MOOS和 Microsoft Robotics Studio。
ROS 运行时的“蓝图”是一种基于ROS通信基础结构的松耦合点对点进程网络。ROS实现了几种不同的通信方式,包括基于同步RPC样式通信的服务(services)机制,基于异步流媒体数据的话题(topics)机制以及用于数据存储的参数服务器(Parameter Server)。想更加深入的解释这些概念,请参见概念综述。
ROS并不是一个实时的框架,但ROS可以嵌入实时程序。Willow Garage的PR2机器人使用了一种叫做pr2_etherCAT的系统来实时发送或接收ROS消息。ROS也可以与Orocos实时工具包无缝集成。

1.2 ROS设计目标

机器人开发的分工思想,实现了不同研发团队间的共享和协作,提升了机器人的研发效率,为了服务“ 分工”,ROS主要设计了如下目标:
1.代码复用: ROS的目标不是成为具有最多功能的框架,ROS的主要目标是支持机器人技术研发中的代码重用。
2.分布式: ROS是进程(也称为Nodes)的分布式框架,ROS中的进程可分布于不同主机,不同主机协同工作,从而分散计算压力
3.松耦合: ROS中功能模块封装于独立的功能包或元功能包,便于分享,功能包内的模块以节点为单位运行,以ROS标准的IO作为接口,开发者不需要关注模块内部实现,只要了解接口规则就能实现复用,实现了模块间点对点的松耦合连接
4.精简: ROS被设计为尽可能精简,以便为ROS编写的代码可以与其他机器人软件框架一起使用。ROS易于与其他机器人软件框架集成:ROS已与OpenRAVE,Orocos和Player集成。
5语言独立性: 包括Java,C++,Python等。为了支持更多应用开发和移植,ROS设计为一种语言弱相关的框架结构,使用简洁,中立的定义语言描述模块间的消息接口,在编译中再产生所使用语言的目标文件,为消息交互提供支持,同时允许消息接口的嵌套使用
6.易于测试: ROS具有称为rostest的内置单元/集成测试框架,可轻松安装和拆卸测试工具。
7.大型应用: ROS适用于大型运行时系统和大型开发流程。
8.丰富的组件化工具包: ROS可采用组件化方式集成一些工具和软件到系统中并作为一个组件直接使用,如RVIZ(3D可视化工具),开发者根据ROS定义的接口在其中显示机器人模型等,组件还包括仿真环境和消息查看工具等
9.免费且开源: 开发者众多,功能包多

1.3 ROS发行版本列表

ROS发行版是一组版本化的ROS包。这些类似于Linux发行版(例如Ubuntu)。ROS发行版的目的是让开发人员在相对稳定的代码基础上工作,直到他们准备好向前滚动一切。因此,一旦发行版发布,我们会尽量限制对核心包的错误修复和不间断改进的更改(ROS-桌面-完整)。一般来说,这适用于整个社区,但是对于“更高”级别的包,规则就不那么严格了,所以避免破坏性改变的责任就落到了给定包的维护者身上。
我们在我们的中捕获组成发行版的组件rosdistro格式,它允许多种发行版。有许多不同类型的机器人有不同的需求,我们预计社区的部分成员可能会在未来整合他们自己的发行版,以更好地针对这些平台。

发布规则

  • ROS发布时间基于需求和可用资源

  • 所有未来的ROS 1版本都是LTS,支持五年

  • ROS版本将不再支持EOL Ubuntu发行版,即使ROS版本仍然受支持。
    发布政策的副作用

  • 每一个ROS版本都会被一个Ubuntu LTS支持。

  • LTS版本不会与任何以前的版本共享一个通用的Ubuntu版本。

  • ROS发行版在发布日期之后不会增加对新Ubuntu发行版的支持。

这些简化的规则和副作用会随着Ubuntu发布政策的改变而改变。
欲了解更多详情,请访问官方网站发布政策

2.ROS的安装

2.1 虚拟机及操作系统安装

2.1.1 虚拟机VMware下载

VMware的官方网址为:https://www.vmware.com/cn.html

为了方便大家的下载和使用,在这里提供一个VMware 16.0版本:https://pan.baidu.com/s/1KPjLIcKisrJE7VTZe83PKA?pwd=nr6z

2.1.2 虚拟机VMware安装

1.下载好安装程序后,双击打开,显示如下界面

2.勾选接收协议,然后下一步

3.选择一个自定义路径,一般是个人常用的软件安装路径,然后下一步

4.接下来的设置都默认,继续下一步,直到出现安装按钮,点击开始安装

5.安装完成,点击许可证,输入许可证号:ZF3R0-FHED2-M80TY-8QYGC-NPKYF


6.输入许可证号以后,点击完成,双击软件打开,显示以下界面即为安装成功

2.1.3 Ubuntu操作系统下载

进入Ubuntu操作系统官网即可下载不同版本的Ubuntu操作系统,官方网址为:https://cn.ubuntu.com/download/desktop
阿里云开源镜像网址为:http://mirrors.aliyun.com/ubuntu-releases/20.04/
为了方便大家的下载和安装,这里提供一个20.04.5桌面版本的镜像:https://pan.baidu.com/s/1TLJCxLsg1bHsp19C0vnFgA?pwd=lbjq
20.04.4版本和本教程的ROS-noetic版本对应,不会出现版本差异问题。

2.1.4 Ubuntu操作系统安装及配置

1.打开安装好的WMware虚拟机,点击创建新的虚拟机,选择自定义,然后点击下一步

2.默认下一步,在以下界面选择稍后安装操作系统,然后下一步

3.客户机操作系统选择Linux,版本选择Ubuntu 64位

4.下一步自定义虚拟机名称为Ubuntu 20.04,安装位置最好选择固态盘所在的路径

5.处理器数量及内核数量根据个人电脑配置和需求选择

6.虚拟机内存根据个人电脑配置和需求选择

7.网络类型选择为使用网络地址转换,即NAT 模式

8.默认下一步,到以下界面根据个人电脑配置和需求选择磁盘大小

9.默认下一步,到以下界面,选择自定义硬件,选择新CD/DVD(SATA),找到使用ISO镜像文件,选择下载好的Ubuntu 20.04.5 镜像文件,然后关闭界面,点击完成


10.点击开启此虚拟机,即可打开Ubuntu 20.04 操作系统进行系统的安装和配置

11.进入Ubuntu操作系统,等待文件加载,出现以下界面,左侧下拉选择中文(简体),点击安装Ubuntu

12.若出现分辨率问题,按住键盘的win键同时往下移动鼠标可以点击继续

或者在安装界面,同时按住快捷键:Ctrl+Alt+T调出终端,输入下列指令:xrandr --size 1920x1080 然后回车,即可变成1920x1080的分辨率,从而方便用户安装

这里选择最小安装

13.接下来选择现在安装即可

14.点击继续

15.默认的位置定位为中国上海,点击继续即可

16.接下来是设置账户信息,按自己的习惯设置即可,设置完点击继续

17.等待安装

18.安装完毕,重启即可

19.重新启动,Ubuntu操作系统已经安装成功,点击用户头像,输入之前设置的密码,即可进入系统


安装成功,界面如下

20.为了便于以后的操作,我们更换一下软件源,点击左下角的显示应用程序,找到软件和更新,将位于中国的服务器下拉栏选择其他更换为阿里云开源镜像站或者清华开源镜像站,这里我们选择的是阿里云开源镜像站


更换时,需要输入账户密码

更换后,需要重新载入,这将花费一些时间,重新载入后,即可进行接下来的ROS安装

2.2 ROS桌面版安装与测试

2.2.1 ROS桌面版安装

1.配置Ubuntu软件仓库,这在之前的Ubuntu配置中已经完成,界面如下,这里保证你的Ubuntu软件仓库(repositories)允许使用“restricted”“universe”和“multiverse”存储库。

2.设置安装源,这里提供了官方源地址和其他高校的镜像源,根据自己的网速来选择合适的镜像源
官方镜像源:

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.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

中国科学技术大学镜像源

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

在Ubuntu操作系统中按快捷键Ctrl+Alt+T调出终端,选择适合自己的安装源复制,在终端界面下按快捷键Ctrl+Shift+V将命令粘贴到终端下,弹出输入密码,正常输入密码即可。输入成功后会自动退出,安装源即设置成功。

3.设置密钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

同理将密钥指令粘贴到终端下,输入密码,密钥设置成功界面如下

4.开始安装
首先,确保你的Debian软件包索引是最新的:(apt 是用于从互联网仓库搜索、安装、升级、卸载软件或操作系统的工具)

sudo apt update

等待更新,完成界面如下

然后选择你想安装的ROS类型:
完整桌面版安装(Desktop-Full,官方推荐):除了桌面版的全部组件外,还包括2D/3D模拟器(simulator)和2D/3D感知包(perception package)。

sudo apt install ros-noetic-desktop-full

桌面版(Desktop):包括了ROS-Base的全部组件,还有一些工具,比如rqt和rviz。

sudo apt install ros-noetic-desktop

ROS-Base(仅含骨架):ROS packaging,build,和communication库。没有图形界面(GUI)工具。

sudo apt install ros-noetic-ros-base

这里我们安装完整桌面版,安装界面如下,安装中

Y键继续执行,等待一段时间,根据个人网速不同,安装时间有所不同

安装完成界面如下

由于网络原因,导致连接超时,可能会安装失败,可以多次重复调用 更新 和 安装命令,直至成功。
5.设置环境
你需要在使用ROS的每个bash终端中source这个脚本。

source /opt/ros/noetic/setup.bash

下面这些命令可以在每次启动新的shell窗口时很方便地为你自动source一下这个脚本:

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

注意:如果同时安装了好几个ROS发行版,~/.bashrc只会生效你当前使用的这个版本的setup.bash。
6.卸载ROS可以调用以下命令

sudo apt remove ros-noetic-*

补充 – 参考文章在末尾–赵虚左老师文章
安装构建依赖
在 noetic 最初发布时,和其他历史版本稍有差异的是:没有安装构建依赖这一步骤。随着 noetic 不断完善,官方补齐了这一操作。
1.首先安装构建依赖的相关工具,复制下面的指令并粘贴到终端处,输入密码即可执行

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential


输入Y键继续执行

安装成功界面如下

2.ROS中使用许多工具前,要求需要初始化rosdep(可以安装系统依赖) – 上一步实现已经安装过了。

sudo apt install python3-rosdep

初始化rosdep

sudo rosdep init
rosdep update

如果一切顺利的话,rosdep 初始化与更新的打印结果如下:


但是,在 rosdep 初始化时,多半会抛出异常。
问题:

原因:
境外资源被屏蔽。
解决:
百度或google搜索,解决方式有多种https://github.com/ros/rosdistro/issues/9721,可惜在 ubuntu20.04 下,集体失效。

新思路:将相关资源备份到 gitee,修改 rosdep 源码,重新定位资源。
实现:
1.先打开资源备份路径:https://gitee.com/zhao-xuzuo/rosdistro,打开 rosdistro/rosdep/sources.list.d/20-default.list文件留作备用(主要是复用URL的部分内容:gitee.com/zhao-xuzuo/rosdistro/raw/master)。

2.进入"/usr/lib/python3/dist-packages/" 查找rosdep中和raw.githubusercontent.com相关的内容,调用命令:

find . -type f | xargs grep "raw.githubusercontent"

通过cd /usr/lib/python3/dist-packages/命令进入所在路径,如下图所示

查找完以后如图所示

3.修改相关文件,主要有:
./rosdistro/__init__.py、./rosdep2/gbpdistro_support.py、./rosdep2/sources_list.py 、./rosdep2/rep3.py。可以使用sudo gedit命令,输入密码来修改文件:
为了方便操作,下面给出可以直接使用的修改文件指令

sudo gedit ./rosdistro/__init__.py
sudo gedit ./rosdep2/gbpdistro_support.py
sudo gedit ./rosdep2/sources_list.py
sudo gedit ./rosdep2/rep3.py

温馨提示:

 ./rosdistro/__init__.py -->修改的文件在68行
 ./rosdep2/gbpdistro_support.py -->修改的文件在34行
 ./rosdep2/sources_list.py -->修改的文件在64行
 ./rosdep2/rep3.py -->修改的文件在36行

以修改的第一个文件为例:文件中涉及的 URL 内容,如果是:raw.githubusercontent.com/ros/rosdistro/master都替换成步骤1中准备的gitee.com/zhao-xuzuo/rosdistro/raw/master,然后保存退出即可。


全部修改完的界面如下图所示:

修改完毕,再重新执行命令:

sudo rosdep init
rosdep update

执行sudo rosdep init命令结果如下图所示:

执行rosdep update命令结果如下图所示:

2.2.2 ROS桌面版测试

我们通过ROS内置的小程序来检测ROS的环境是否可以正常运行
首先通过快捷键Ctrl+Alt+T分别调出三个终端,输入以下指令:
1.roscore -->启动ROS核心,启动成功界面如下:

2.rosrun turtlesim turtlesim_node -->启动乌龟GUI节点,启动成功界面如下:

3.rosrun turtlesim turtle_teleop_key -->启动乌龟键盘控制节点,启动成功界面如下:

将鼠标光标放在乌龟键盘控制节点终端光标处,通过键盘的方向键可以控制乌龟的移动,最终结果如下:


至此,机器人操作系统(ROS)入门与实践–1的内容全部更新完,接下来我将继续更新ROS入门与实践的后续内容,希望大家支持,本人是自学ROS的研究生小白,主要是根据赵虚左老师的课程、官方的文档以及按照自己的实际操作来写的教程,其中部分内容借鉴了赵虚左老师的方法,在这里给出教程的网址,希望大家一起学习,谢谢大家!!!

参考文章:http://www.autolabor.com.cn/book/ROSTutorials/
参考网站:http://wiki.ros.org/noetic/Installation/Ubuntu

以上是关于机器人操作系统(ROS)入门与实践--1的主要内容,如果未能解决你的问题,请参考以下文章

SLAM建图导航信息(仿真)

ROS理论与实践:机器人系统设计

ROS从入门到精通系列-- 机器人机器人学与ROS

ROS从入门到精通系列-- 机器人机器人学与ROS

机器人编程实践-ROS2基础与应用-第⑦版

《ROS理论与实践》学习笔记构建机器人仿真平台