ROS机器人操作系统学习笔记(一)--基本概念

ROS机器人操作系统学习教程(一)–基本概念

1. 基本概念

1.1 ROS背景

机器人操作系统(Robot Operating System, ROS)是一个应用于机器人上的操作系统,它操作方便、功能强大,特别适用于机器人这种多节点多任务的复杂场景。如今已经广泛应用于机械臂、移动底盘、无人机、无人车等许多种类的机器人上。

曾经,机器人创新的门槛非常高。如果你想在任何应用领域开发出有分量的产品,你需要建立一整套能够实现你想法的系统:包括硬件设备,当然还有控制系统,界面接口,以及让机器人运行并作为测试平台的检测工具。

随着机器人领域的快速发展和复杂化,代码复用和模块化的需求日益强烈,已有的开源系统已不能很好地适应需求,2010年Willow Garage公司发布了开源机器人操作系统ROS。

1.2 ROS发展历程

1.2.1 起源与发展

21世纪开始,人工智能进入大力发展阶段,斯坦福大学有人工智能实验室STAIR项目,创建了灵活的、动态的软件系统的原型,用于机器人技术。2007年,机器人公司Willow Garage和该项目组合作,他们十分具有前瞻性的,提供了大量资源进一步扩展了这些概念,经过具体的研究测试实现之后,无数的研究人员将他们的专业性研究贡献到ROS核心概念和其基础软件包,这期间积累了众多的科学研究成果。ROS软件的开发自始至终采用开放的BSD协议,在机器人技术研究领域逐渐成为一个被广泛使用的平台。

Willow Garage公司和斯坦福大学人工智能实验室合作以后,在2009年初推出了ROS0.4,这是一个测试版的ROS,现在所用的系统框架在这个版本中已经具有了初步的雏形。之后的版本才正式开启了ROS的发展成熟之路。

1.2.2 历代ROS版本

ROS1.0版本发布于2010年,基于PR2机器人开发了一系列机器人相关的基础软件包。随后ROS版本迭代频繁,目前已经发布到了Lunar。 目前使用人数最多的是Kinetic和Indigo这两个Long Term Support版本。

相关版本发布时间如下:

ROS机器人操作系统学习笔记(一)--基本概念_第1张图片

1.2.3 展望

ROS的发展逐渐的趋于成熟,近年来也逐步是面对着Ubuntu的更新而更新,这说明ROS已经初步进入一种稳定的发展状态,每年进行一次更新的频率同时还保留着长期支持的版本,这使得ROS在稳步的前进发展同时,也有着开拓创新的方向。目前越来越多的机器人、无人机甚至无人车都开始采用ROS作为开发平台。

1.3 ROS简介

1.3.1 What’s the ROS

机器人是一个系统工程,它涉及机械、电子、控制、通信、软件等诸多学科。以前,开发一个机器人需要花很大的功夫,你需要设计机械、画电路板、写驱动程序、设计通信架构、组装集成、调试、以及编写各种感知决策和控制算法,每一个任务都需要花费大量的时间。

然而随着技术进步,机器人产业分工开始走向细致化、多层次化,如今的电机、底盘、激光雷达、摄像头、机械臂等等元器件都有不同厂家专门生产。社会分工加速了机器人行业的发展。而各个部件的集成就需要一个统一的软件平台,在机器人领域,这个平台就是机器人操作系统ROS。

ROS是一个适用于机器人编程的框架,这个框架把原本松散的零部件耦合在了一起,为他们提供了通信架构。ROS虽然叫做操作系统,但并非Windows、Mac那样通常意义的操作系统,它只是连接了操作系统和你开发的ROS应用程序,所以它也算是一个中间件,基于ROS的应用程序之间建立起了沟通的桥梁,所以也是运行在Linux上的运行时环境,在这个环境上,机器人的感知、决策、控制算法可以更好的组织和运行。

1.3.2 ROS特点

  • 分布式 点对点

    ROS采用了分布式的框架,通过点对点的设计让机器人的进程可以分别运行,便于模块化的修改和定制,提高了系统的容错能力。

  • 多种语言支持

    ROS支持多种编程语言。C++、Pyhton和已经在ROS中实现编译,是目前应用最广的ROS开发语言,Lisp、C#、Java等语言的测试库也已经实现。为了支持多语言编程,ROS采用了一种语言中立的接口定义语言来实现各模块之间消息传送。通俗的理解就是,ROS的通信格式和用哪种编程语言来写无关,它使用的是自身定义的一套通信接口。

  • 开源社区

    ROS具有一个庞大的社区ROS WIKI(http://wiki.ros.org/ ),这个网站将会始终伴随着你ROS开发,无论是查阅功能包的参数、搜索问题还是。当前使用ROS开发的软件包已经达到数千万个,相关的机器人已经多达上千款。此外,ROS遵从BSD协议,对个人和商业应用及修改完全免费。这也促进了ROS的流行。

1.3.3 优缺点

ROS机器人操作系统学习笔记(一)--基本概念_第2张图片

目前适用于科研和开源用户使用,工业场景需要优化和定制。

1.4 ROS安装

1.4.1 版本选择

ROS目前只支持在Linux系统上安装部署,它的首选开发平台是Ubuntu。时至今日ROS已经相继更新推出了多种版本,供不同版本的Ubuntu开发者使用。为了提供最稳定的开发环境,ROS的每个版本都有一个推荐运行的Ubuntu版本。

ROS机器人操作系统学习笔记(一)--基本概念_第3张图片

由于我的电脑正使用Ubuntu 20.04,大家根据自己的版本安装即可。Ubuntu安装大家看B站教程,先装虚拟机。

安装好虚拟机以后看Ubuntu版本,输入命令如下:

cat /etc/issue

可以看到Ubuntu版本

ROS机器人操作系统学习笔记(一)--基本概念_第4张图片

发现Ubuntu版本有点高,为了后期学习方便,所以需要重新安装,以防止后面报错麻烦。

创建虚拟机可以看教程:https://www.bilibili.com/video/BV1na4y1773c?p=3

然后创建Ubuntu, 等待安装即可。

我们再来看看Ubuntu版本。

ROS机器人操作系统学习笔记(一)--基本概念_第5张图片

版本降下来了,就说明可以使用了。

我们再进行一些Ubuntu相关配置,来进行进一步建立。(改变系统语言(见https://blog.csdn.net/brawly/article/details/106432402))

我们先更改一下镜像源,要不然就会龟速然后报错。步骤如下:

打开Ubuntu的设置->软件与更新->Ubuntu软件->勾选关键字universe,restricted,multiverse三项。

由于我在下载语言更改,所以先拿英文看了,更换镜像(清华,中科大都行),效果如下(我选了中科大源):

ROS机器人操作系统学习笔记(一)--基本概念_第6张图片

后面跳出来的什么杂七杂八的东西就进行更改,我们还是按照我们的进度来。

首先,我们先添加sources.list

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

注意我们使用的镜像源,这里我用中科大源。

再添加keys

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

公钥是Ubuntu系统的一种安全机制,也是ROS安装中不可缺的一部分,运行结果如下:

ROS机器人操作系统学习笔记(一)--基本概念_第7张图片

然后更新系统,确保软件包和索引最新。

$ sudo apt-get update && sudo apt-get upgrade

最终安装ROS

ROS中有很多函数库和工具,官网提供了四种默认的安装方式,当然也可以单独安装某个特定的软件包。这四种方式包括桌面完整版安装、桌面版安装,基础版安装、单独软件包安装。推荐安装桌面完整版安装(包含ROS、rqt、rviz、通用机器人函数库、2D/3D仿真器、导航以及2D/3D感知功能)

我们安装Kinetic版本

$ sudo apt-get install ros-kinetic-desktop-full # Ubuntu 16.04

等待一段时间就好了

1.4.2 配置ROS

配置ROS是安装完ROS之后必须的工作。

初始化rosdep

$ sudo rosdep init && rosdep update

这一步初始化rosdep,是使用ROS之前的必要一步。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。

但是会报错,解决方法如下:

首先/etc目录下打开终端,输入以下命令来更改host权限

cd /etc
sudo gedit hosts

接着打开hosts文件,在文件末尾添加以下内容,保存以后退出

151.101.84.133 raw.githubusercontent.com

重新检查,实在不行就看看那个ip地址,看www.ipaddress.com来找ip地址尝试

如果是这里错了,如图所示:

ROS机器人操作系统学习笔记(一)--基本概念_第8张图片

我们不妨分开看,可能是网络原因,就先分开用

sudo rosdep init 
rosdep update

我看是网络问题,所以我们先安装git

$ sudo apt-get install git

解决方法看这里的方法三(https://blog.csdn.net/qq_30267617/article/details/115028689)

实在不行就看官网(http://wiki.ros.org/kinetic/Installation/Ubuntu),可以一步步来。

如果还是报错,参考文中这个进行解决(https://mp.weixin.qq.com/s/VGs8oWdhHH6XsHcx21lN4Q)

安装环境(Ubuntu16.04)

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

ROS的环境配置,使得你每次打开一个新的终端,ROS的环境变量都能够自动配置好,也就是添加到bash会话中,因为命令source /opt/ros/kinetic/setup.bash
只在当前终端有作用,即具有单一时效性,要想每次新开一个终端都不用重新配置环境,就用echo语句将命令添加到bash会话中。

安装rosinstall:

rosinstall 是ROS中一个独立分开的常用命令行工具,它可以方便让你通过一条命令就可以给某个ROS软件包下载很多源码树。在ubuntu上安装这个工具,请运行

$ sudo apt-get install python-rosinstall

我们就测试一下,输入roscore,如果出现下图所示就说明成功了:

ROS机器人操作系统学习笔记(一)--基本概念_第9张图片

然后测试ROS吉祥物小海龟,看看ROS运行是否正常,我们再打开一个终端窗口,输入:

$ rosrun turtlesim turtlesim_node

你会看到这个小海龟

ROS机器人操作系统学习笔记(一)--基本概念_第10张图片

我们再打开一个终端,再输入

$ rosrun turtlesim  turtle_teleop_key

然后按键盘的上下左右键进行测试来移动小海龟,如果小海龟正常移动,证明ROS成功安装配置并运行。

ROS机器人操作系统学习笔记(一)--基本概念_第11张图片

1.5 基本操作

1.5.1 安装ROS-Academy-for-Beginners教学包

apt安装的软件包都是二进制形式,可以在系统中直接运行,它们是ROS官方提供给用户的应用程序。然而很多时候我们需要自己做一些定制改写,或者运行第三方开发的软件包,这个时候就需要下载源代码进行编译。

我们已经在上一节安装好git了,所以我们创建一个名为tutorial_ws的工作空间,在它的的src路径下克隆ROS-Academy-for-Beginners软件包。

$ cd 
$ mkdir -p tutorial_ws/src   #创建catkin工作空间
$ cd tutorial_ws/src         #进入src路径,克隆教学软件包
$ git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git

1.5.2 依赖安装

安装ROS-Academy-for-Beginners.git的依赖

$ cd ~/tutorial_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y

但是运行命令会报错:

ROS机器人操作系统学习笔记(一)--基本概念_第12张图片

解决方法如下:

我们发现是差着这些包发现我缺少了yocs_cmd_vel_mux,dwa_local_planner,hector_mapping,就终端输入命令安装

sudo apt-get install ros-kinetic-yocs-cmd-vel-mux ros-kinetic-dwa-local-planner ros-kinetic-hector-mapping

然后看看差什么,缺啥补啥就行。

注意:以上命令非常重要,缺少依赖将导致软件包无法正常编译和运行。

在开始编译之前,需要确保Gazebo在7.0版本以上

$ gazebo -v  #确认7.0及以上

ROS机器人操作系统学习笔记(一)--基本概念_第13张图片

如果低于7.0就需要升级

1.5.3 编译

接着回到catkin_ws下编译

$ cd ~/tutorial_ws
$ catkin_make
$ source ~/tutorial_ws/devel/setup.bash   #刷新环境 方法一
$ rospack profile #刷新环境 方法二

可能时间有点长,需要等待

注意:source命令,编译完成后必须刷新一下工作空间的环境,否则可能找不到工作空间。许多时候我们为了打开终端就能够运行工作空间中编译好的ROS程序,我们习惯把source ~/tutorial_ws/devel/setup.bash命令追加到~/.bashrc文件中(rosacademy_ws替换为你的工作空间名称),这样每次打开终端,系统就会刷新工作空间环境。你可以通过echo "source ~/tutorial_ws/devel/setup.bash" >> ~/.bashrc命令来追加。

1.5.4 运行仿真程序

编译完成就可以运行仿真了,输入

$ rospack profile
$ roslaunch robot_sim_demo robot_spawn.launch

会出现这样的界面

ROS机器人操作系统学习笔记(一)--基本概念_第14张图片

稍等加载就行

看到的结果如下:

ROS机器人操作系统学习笔记(一)--基本概念_第15张图片

重开一个终端,输入命令,拿键盘来控制机器人移动:

$ rosrun robot_sim_demo robot_keyboard_teleop.py

聚焦控制程序窗口,按下i、j、l等按键,这样你就可以通过键盘来控制机器人的移动了。

这里就已经完成了基本的编译与运行过程。在ROS社区有许许多多这样的软件包,基本都按照这样的流程来运行。

ROS机器人操作系统学习笔记(一)--基本概念_第16张图片

键盘控制仿真机器人移动这个demo展现了ROS分布式消息收发的特性。我们打开的虽然是键盘控制程序,但它可以替换为手柄控制、手机平板控制、甚至是路径规划自动控制。模拟器里的机器人并不关心是谁发给它的消息,它只关心这个消息是什么(速度、角速度等指令)。所以,每一个进程(节点)都各司其职,负责不同的任务,同时定义好消息收发的接口。如果我们现在要做路径规划任务,那么我们只用单独再开发一个节点,同样向底盘发送我们解算出的速度/角速度指令就可以了。

1.6 二进制包和源代码包

二进制包里面包括了已经编译完成,可以直接运行的程序。你通过sudo apt-get install来进行下载和解包(安装),执行完该指令后就可以马上使用了。因此这种方式简单快捷,适合比较固定、无需改动的程序。

而源代码包里是程序的原始代码,在你的计算机上必须经过编译,生成了可执行的二进制文件,方可运行。一些个人开发的程序、第三方修改或者你希望修改的程序都应当通过源代码包的来编译安装。

ROS机器人操作系统学习笔记(一)--基本概念_第17张图片

我们用apt-get安装了ROS及其组件,因此我们不需要编译就可以运行turtlesim程序。对于这些程序,除非我们做操作系统的设计开发才会去下载源码,否则直接用官方提供的ROS软件包;而ROS-Academy-for-Beginners以源码呈现,你可以看到每个demo下面的C++代码。对于这些源文件我们必须caktin_make编译,然后才能运行。

1.6.1 二进制包的安装

在ROS中,我们可能经常会遇到缺少相关的ROS依赖的问题。有些时候你编译或者运行一些ROS程序,系统会提示找不到XXX功能包

遇到这样的问题,请先注意阅读错误原因,看看是否有解决方法,也可以Google一下。如果是缺少ROS的依赖,通常可以用以下命令来安装

$ sudo apt-get install ros-kinetic-PACAKGE

将PACKAGE替换为系统提示缺啥少的软件包

$ sudo apt-get install ros-kinetic-slam-gmapping   #GMapping-SLAM算法包
$ sudo apt-get install ros-kinetic-turtlebot-description  #Turtlebot机器人模型包

这里就不用实操了。

1.7 安装RoboWare Studio

通常ROS的程序都是用C++和Python开发的,为了提高开发的效率,我们建议用IDE来写代码。目前在Ubuntu上已经有许多IDE支持ROS开发,比如Eclipse、Qt Creator。不过这些IDE配置起来会比较麻烦,我们推荐一款适配ROS的IDE——RoboWare Studio来开发ROS。

下载地址:http://cn.roboware.me/#/Download

参考资料来源:https://www.kancloud.cn/zhouws/robot_ustc_mooc/2153673

安装环境路途不易。

你可能感兴趣的:(自动驾驶,人工智能,机器学习)