小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!

看完这个还能不知道ROS是啥?!

    • 第1讲 课程介绍
    • 第2讲 Linux系统介绍及安装
    • 第3讲 Linux系统基础操作
      • 软件源
      • 命令行
    • 第4讲 C++&Python极简基础
    • 第5讲 安装ROS系统
    • 第6讲 ROS是什么
    • 第7讲 ROS的核心概念
      • 节点与节点管理器
      • 话题通信
      • 服务通信
      • 参数
      • 文件系统
    • 第8讲:ROS命令行工具
      • rqt_graph:显示系统计算图的命令
      • rosnode:显示节点信息指令
      • rostopic:话题信息显示指令
      • rosmsg:显示消息的相关信息
      • rosservice:显示服务的相关内容
      • rosbag:话题记录工具
    • 第9讲 创建工作空间与功能包
        • 工作空间(workspace)
    • 第10讲 发布者Publisher的编程实现
      • 话题模型
    • 第11讲 订阅者Subscriber的编程实现
    • 第12讲 话题消息的定义和使用
    • 第13讲 客户端Client的编程实现
    • 第14讲 服务端Server的编程实现
    • 第15讲 服务数据的定义与使用
    • 第16讲 参数的使用与编程方法
    • 第17讲 ROS中的坐标系管理系统
    • 第18讲 tf坐标系广播与监听的编程实现
    • 第19讲 launch启动文件的使用方法
    • 第20讲 常用可视化工具的使用
      • Qt工具箱
      • Rviz
      • Gazebo
    • 第21讲 课程总结与进阶攻略
    • 结语
  • 怕什么真理无穷,进一寸有进一寸的欢喜

第1讲 课程介绍

ROS:Robot Operating System,机器人操作系统
通信机制+开发工具+应用功能+生态系统
Powering the world’s robots——机器人领域的普遍标准

  • 基础概述
  • 核心概念
  • 编程基础
  • 常用组件
  • 进阶展望

使用Google浏览器可以找到很多问题

第2讲 Linux系统介绍及安装

1991年,芬兰赫尔辛基的大学生Linus Torvalds编写
企鹅logo:敢作敢为,热爱生活

第3讲 Linux系统基础操作

软件源

软件更新中可以设置软件源,校园网用edu的源,家里的话可以用阿里云

命令行

可扩展性和灵活性更好
根目录是“/”文件夹,里边有home,usr等文件夹
软件安装一般在usr文件夹
home文件夹中有以用户名字为名称的文件夹,进去之后是自己的文档资料,或者叫“主目录”
pwd:查看当前终端所在路径
cd:切换路径
cd /home:到达/home目录下
cd …:回到上一级
mkdir:创建文件夹命令
touch:创建文件命令
mv:剪切命令
cp:拷贝命令
rm:删除命令,-r表示递归删除
sudo:表示指令以最高权限执行
sudo apt-get update:更新系统软件源列表
[指令] --help帮助指令,看到指令使用方法

第4讲 C++&Python极简基础

g++是c++的编译器:sudo apt-get install g++
安装Python解析器:sudo apt-get insta;; python

编译&运行.cpp文件:g++ [.cpp] -o [可执行文件] + ./[可执行文件]
解析.py文件:python [.py]
可以使用Tab键进行命令的补全

第5讲 安装ROS系统

看一遍授课视频,结合官方的安装流程,就基本上问题不大。官网安装教程如下:
官方安装教程.
遇到了一个小问题,解决办法如下:
ubuntu18.04安装ROS时出现错误ERROR: cannot download default sources list from解决办法.
最终实现小乌龟跑动:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第1张图片

第6讲 ROS是什么

2007年诞生,2010年,ROS正式进入公众视野(正式发布)。
核心目标:提高机器人研发中的软件复用率

  • 通信机制:松耦合分布式通信
  • 开发工具:命令行&编译器、TF坐标变换、QT工具箱、Rviz、Gazebo
  • 应用功能:Navigation、SLAM、Movelt
  • 生态系统:发行版、软件源、ROS wiki、邮件列表、ROS Answers、Blog博客

第7讲 ROS的核心概念

节点与节点管理器

节点(Node):执行单元

  • 可执行文件
  • 可以是不同的语言,可分布式运行在不同的主机
  • 节点名称必须唯一

节点管理器(ROS Master):控制中心

  • 为节点提供命名和注册
  • 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接
  • 提供参数服务器(Parameter Server),节点使用此服务器存储和检索运行时的参数(全局参数笔记本)

话题通信

话题(Topic):异步通信机制

  • 节点间传输数据的重要总线
  • 使用发布/订阅模型,数据由发布者传输到订阅者,同一话题的订阅者或发布者可以不唯一

消息(Message):话题数据

  • 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型
  • 使用变成语言无关的.msg文件定义,编译过程生成对应的代码文件

服务通信

服务(Service):同步通信机制

  • 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据(请求&应答
  • 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第2张图片

参数

参数(Parameter):全局共享字典

  • 可通过网络访问的共享、多变量词典
  • 节点使用此服务器来存储和检索运行时的参数
  • 适合存储静态、非二进制的配置参数,不适合存储动态配置的数据

文件系统

功能包(Package):ROS软件中的基本单元,包含节点源码、配置文件、数据定义
功能包清单(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志
元功能包(Meta Packages):组织多个用于同一目的的功能包
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第3张图片

第8讲:ROS命令行工具

小海龟运行解析:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第4张图片

rqt_graph:显示系统计算图的命令

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第5张图片
通过图可以看到系统全貌,各节点关系

rosnode:显示节点信息指令

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第6张图片直接打rosnode就可以看后边可以加入哪些选项
rosnode list:显示有哪些节点
rosnode info [Node]:可以看某个节点的信息

rostopic:话题信息显示指令

可以用命令行控制小乌龟的移动

rosmsg:显示消息的相关信息

例如用:rosmsg show [Message]可以看某条指令的含义

rosservice:显示服务的相关内容

rosservice list:显示有哪些可选选项
如spawn可以产生多只海龟
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第7张图片

rosbag:话题记录工具

保存一段时间的操作,这样就不用每次运行都重新手动操作

第9讲 创建工作空间与功能包

工作空间(workspace)

是一个存放工程开发相关文件的文件夹

  • src:代码空间(Source Space)
  • build:编译空间(Build Space)
  • devel:开发空间(Development Space)
  • install:安装空间(Install Space)

同一个工作空间下,不允许存在同名功能包
不同工作空间下,则可以存在
这一节主要展示了工作空间的创建,以及编译等操作,具体建议直接看视频

第10讲 发布者Publisher的编程实现

话题模型

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第8张图片小乌龟运动为例,结构框架如图:节点管理器、发布者、订阅者、话题
这里我们要自己定义一个Publisher,在此基础上实现它指令的不断发送,控制小乌龟的运动。
这里涉及到了如何实现一个发布者的编程实现:

  1. 初始化ROS节点
  2. 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
  3. 创建消息数据
  4. 按照一定频率循环发布消息

具体的操作过程建议参照视频来做,里边提到了很多操作细节。
这里遇到了一个问题,关于环境变量的设置问题,需要在工作空间的根目录下进行环境变量配置(没有采用视频中讲环境变量写入.bashrc的方法),参照该文章,解决了配置环境变量进而运行的目的。
[古月居ros21讲出现问题及个人解决方案1]第十讲出现:[rospack] Error: package’learning_topic’not found
这里使用Ctrl+h在文件夹中显示隐藏文件
最终实现了小乌龟的画圆圈运动。
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第9张图片

第11讲 订阅者Subscriber的编程实现

和第10讲几乎一样的操作
创建一个订阅者,不断打印小乌龟所位置的数据
这里涉及如何实现一个订阅者的编程实现:

  1. 初始化ROS节点
  2. 订阅需要的话题
  3. 循环等待话题消息,接收到消息后进入回调函数
  4. 在回调函数中完成消息处理

回调函数类似嵌入式中的中断服务函数,程序会进入一个等待的循环状态,程序一旦识别到有话题消息,就进入回调函数来处理消息。
最终实现在命令行不断打印小乌龟的姿态信息。
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第10张图片

第12讲 话题消息的定义和使用

在这一讲,我们不再使用ROS自带的话题模板(我目前是这样理解的),而是自定义一个话题消息,并且建立发布者和订阅者的联系。
首先在功能包learning_topic内创建一个msg文件夹,用于存放我们将要定义的话题消息,里边创建一个Person.msg文件,用于存放具体的消息内容:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第11张图片在此基础上,在源文件src目录下创建一个发布者和一个订阅者的源码:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第12张图片之后,在CMakeLists.txt里写入一些我们需要的编译选项,这里还不是太懂具体怎么回事。
最后在根目录下使用如下指令进行编译:

catkin_make

而后在不同终端下用如下指令即可实现发布者和订阅者之间的通信:

cd ~/catkin_ws
catkin_make

source devel/setup.bash
roscore
rosrun learning_topic person_subscriber
rosrun learning_topic person_publisher

这里需要注意的是,我们没有将环境变量添加到某个文件中(应该是第10讲或者第11讲讲过来着),所以每次运行需要先配置环境变量,再rosrun我们需要的东西,这里是一个小坑,具体操作可以参考这篇博文:
古月居……[rospack] Error: package ‘learning_topic’ not found
我们可以先运行订阅者,等待发布者的运行
运行发布者后,发布者发布的信息会被订阅者接受,二者同步显示:

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第13张图片另外,如果开始运行后,关闭ROS Master,并不会让话题中断,因为前者只是用于建立链接,链接建立成功后就不再起作用了,可以类比婚介所的作用
这样我们就完成了本讲的操作

第13讲 客户端Client的编程实现

本次要实现的服务模型如图所示:

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第14张图片第7讲中,我们提到了ROS的两种通信模式,即话题通信和服务通信,前三讲介绍了话题通信的方式,从这一讲开始,将开始服务通信的讲解(虽然没听太懂哈哈),下面进入正题

如何实现一个客户端:

  • 初始化ROS节点
  • 创建一个Client实例
  • 发布服务请求数据
  • 等待Service处理之后的应答结果

在本讲中,通过一个例子,最终创建了一只小海龟(忘了截图了xixi)
感觉操作起来和之前没有什么明显区别

第14讲 服务端Server的编程实现

本讲通过创建Server来实现对于小乌龟的命令行控制
具体如何实现一个Server服务器流程如下:

  • 初始化ROS节点
  • 创建Server实例
  • 循环等待服务请求,进入回调函数
  • 在回调函数中完成服务功能的处理,并反馈应答数据

具体的代码可以理解为创建了一个Server后,一直等待Client发送指令,但是具体我还没看太明白,主要是了解加实践
通过该实例,我们可以实现对小乌龟的命令行控制,控制效果如下:

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第15张图片当我们发送一个请求(触发器),小乌龟就会改变自己的运动状态,此时命令行窗口如下所示:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第16张图片在这里,为了避免每次都要“引用”环境变量,我将环境变量设置进了.bashrc里,具体的操作结果就是该文件中添加了这一行:
在这里插入图片描述
也就是将setup.bash这个文件添加进去
具体如何添加,可以参照该博客:
Linux下配置环境变量—— .bashrc 和 /etc/profile
这样我们就不用每次都到根目录下运行source指令,直接随便打开一个终端就能运行了!

第15讲 服务数据的定义与使用

这讲和第12讲是对称的,这里是服务数据的定义与使用
看到这一讲的时候,我感觉我已经蒙圈了
蒙圈归蒙圈,还是能有点收获的
我们整体的话题结构同13讲,用一句话概括这一讲我们干了啥:
怎么样去创建一个自定义的service的服务数据类型,并怎么样在server和client之间使用,以person数据信息为例,创建service数据类型
在本讲中,我们创建了一个srv文件,内部我们自定义了服务数据
同样使用ClientServer作为节点,实现数据收发的效果:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第17张图片这里我们创建服务器还是客户端的先后顺序没有严格要求,但要注意的是,想要重新开启新的服务器和客户端来测试,最好重新运行roscore指令,以防程序出现一些莫名其妙的错误

第16讲 参数的使用与编程方法

看完上一讲头都要裂开了,索性直接看完再实践,发现观感出奇的好,也可能是这一讲没有那么多玄幻的东西
这一讲主要介绍了参数的相关知识,简单复习一下:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第18张图片图示为参数模型,可以看到,在ROS Master里有一个叫做参数服务器(Parameter Server)的东西,里边包含了各个节点均可以访问的参数
而我们需要学会查看、显示、设置、保存、读取、删除某个或某些参数
这在平时使用过程中或许很有必要
同时,还会讲到如何使用.yaml文件来存储和读取参数

在本讲中,我们创建了新的功能包learning_parameter,使用该功能包,并通过更改小乌龟仿真器的背景颜色,来测试相关指令,学习.yaml文件的使用
如何获取/设置参数:

  • 初始化ROS节点
  • get函数获取参数
  • set函数设置参数

这里分为使用命令行和使用.cpp文件运行两种方式
通过命令行的一些指令,我们成功实现了小乌龟背景颜色的改变,效果如下图所示:

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第19张图片

小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第20张图片其中用到的指令主要有以下指令:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第21张图片这里所谓的“到文件”就是到刚刚提到的.yaml文件下,我这里生成.yaml文件内容如下:

rosdistro: 'melodic

  '
roslaunch:
  uris: {host_lihaha_legion_y7000_2019_pg0__33285: 'http://lihaha-Legion-Y7000-2019-PG0:33285/'}
rosversion: '1.14.10

  '
run_id: dd0b45c6-4399-11eb-b7d9-287fcf1016b6
turtlesim: {background_b: 255, background_g: 255, background_r: 255}

其中保存了各个我们用到的参数,我们可以通过这个直接保存,或者给工程指定我们希望的各个参数是多少,非常有用的一个小东西
使用.cpp文件来执行类似之前各讲的套路,在此不再赘述

第17讲 ROS中的坐标系管理系统

从这一讲开始,介绍ROS中的常用组件
TF功能包作用:

  • 管理机器人涉及的各个坐标系
  • 计算各个部位的相对位置
  • 默认记录机器人10s内坐标信息

TF坐标变换如何实现:

  • 广播TF变换
  • 监听TF变换

通过一些指令,我们来实现turtle2turtle2的跟随
roslaunch命令启动一个脚本文件来启动节点,跟随结果如下图所示
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第22张图片可以通过指令:

rosrun tf view_frames

将当前各个坐标系的树打印为pdf,它能够记录最近机器人的一些相关数据,我打印出的pdf如下:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第23张图片为了观察两个坐标系的位置关系,可以使用两种工具:命令行工具/可视化工具
命令行可以打印变换矩阵以及旋转矩阵的不同描述形式,显示效果如下:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第24张图片可视化工具这里使用Rviz,显示效果如下,可以进行缩放,直观看到坐标系的位置关系:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第25张图片小细节:这里的世界坐标系的原点位于小海龟界面的左下角

第18讲 tf坐标系广播与监听的编程实现

这一讲主要是介绍了tf坐标系的广播与监听的编程实现,最终实现功能和上一讲功能基本类似
如何实现一个tf广播器:

  • 定义TF广播器(TransformBroadcaster)
  • 创建坐标变换值
  • 发布坐标变换(sendTransform)

如何实现一个TF监听器:

  • 定义TF监听器(TransformListener)
  • 查找坐标变换(waitForTransform、lookupTransform)

这里有一个小细节,我们在创建广播器的时候,两次调用了同一个程序,但程序中默认的节点名是一样的
我们知道不同节点不能同名,所以我们需要通过指令来让节点名不同
其他的主要是看程序实现,命令行指令如下:

$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore//启动ROS Master
$ rosrun turtlesim turtlesim_node
$ rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1
$ rosrun learning_tf turtle_tf_broadcaster __name:=turtle2_tf_broadcaster /turtle2
$ rosrun learning_tf turtle_tf_listener
$ rosrun turtlesim turtle_teleop_key

第19讲 launch启动文件的使用方法

目的:通过xml文件实现多节点的配置和启动(可自动启动ROS Master
我们需要创建一个learning_launch功能包,并且在里边创建一个launch文件夹,用来存放我们要使用的所有launch文件
后者这是一种命名习惯,最好要遵守这种默认的习惯
简单介绍一下Launch语法:
:launch文件中的根元素采用标签定义
:节点
启动节点示例:

<node pkg="package-name" type="executable-name" name="node-
name" />
  • pkg:节点所在的功能包名称
  • type:节点的可执行文件名称
  • name:节点运行时的名称
  • 其他:output、respawn、required、ns、args

参数设置:
/

重映射:
嵌套:
在本讲展示了直接使用launch文件运行程序的几个例子,我个人感觉非常方便,只需要将相关文件及指令配置好,直接就能实现功能,不必反复使用终端和命令行!

第20讲 常用可视化工具的使用

在本讲介绍Qt工具箱、Rviz、Gazebo这三个常用可视化工具的简单介绍

Qt工具箱

包括了日志输出工具、计算图可视化工具、数据绘图工具、图像渲染工具等一系列工具
可以作为开发过程的战略指挥部

Rviz

这个在17讲的时候使用过,是一款三维可视化工具

  • 在rviz中,可以使用可扩展标记语言XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来
  • 同时,rviz还可以通过图形化的方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等信息
  • 总而言之,rviz通过机器人模型参数、机器人发布的传感信息等数据,为用户进行所有可监测信息的图形化显示。用户和开发者也可以在rviz的控制界面下,通过按钮、滑动条、数值等方式,控制机器人的行为

界面如图所示:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第26张图片
1:工具栏 2:显示项列表 3:视角设置区 4:时间显示区

Gazebo

Gazebo是一款功能强大的三维物理仿真平台

  • 具备强大的物理引擎
  • 高质量的图形渲染
  • 方便的编程与图形接口
  • 开源免费

典型应用场景:

  • 测试机器人算法
  • 机器人的设计
  • 现实情景下的回溯测试

Gazebo操作界面如图所示:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第27张图片1:工具栏 2:模型列表 3:模型属性项 4:时间显示区

第21讲 课程总结与进阶攻略

终于要完结啦!
这是本课程的课程体系:
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦!_第28张图片这一讲老师介绍了很多ROS开发的相关资源,从书籍到网页等等
建议没事的时候回来看看

结语

经过这一套课程的学习,我也只是大概了解了ROS最基础的一些东西,还有浩如烟海的知识等待我们去探索
引用古月居up引用的胡适之先生的话:

怕什么真理无穷,进一寸有进一寸的欢喜

你可能感兴趣的