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


      • 第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解决办法.
        最终实现小乌龟跑动:
        在这里插入图片描述

      • 第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文件定义请求和应答数据结构,编译过程中生成对应的代码文件
        在这里插入图片描述

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

        可通过网络访问的共享、多变量词典
        节点使用此服务器来存储和检索运行时的参数
        适合存储静态、非二进制的配置参数,不适合存储动态配置的数据
        文件系统
        功能包(Package):ROS软件中的基本单元,包含节点源码、配置文件、数据定义
        功能包清单(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志
        元功能包(Meta Packages):组织多个用于同一目的的功能包
        在这里插入图片描述

      • 第8讲:ROS命令行工具小海龟运行解析:
      • 在这里插入图片描述
      • rqt_graph:显示系统计算图的命令
      • 在这里插入图片描述
      • 通过图可以看到系统全貌,各节点关系rosnode:显示节点信息指令
      • 在这里插入图片描述
      • 直接打rosnode就可以看后边可以加入哪些选项
        rosnode list:显示有哪些节点
        rosnode info [Node]:可以看某个节点的信息

        rostopic:话题信息显示指令
        可以用命令行控制小乌龟的移动

        rosmsg:显示消息的相关信息
        例如用:rosmsg show [Message]可以看某条指令的含义

        rosservice:显示服务的相关内容
        rosservice list:显示有哪些可选选项
        如spawn可以产生多只海龟
        在这里插入图片描述

      • rosbag:话题记录工具
        保存一段时间的操作,这样就不用每次运行都重新手动操作

        第9讲 创建工作空间与功能包
        工作空间(workspace)
        是一个存放工程开发相关文件的文件夹

        src:代码空间(Source Space)
        build:编译空间(Build Space)
        devel:开发空间(Development Space)
        install:安装空间(Install Space)
        同一个工作空间下,不允许存在同名功能包
        不同工作空间下,则可以存在
        这一节主要展示了工作空间的创建,以及编译等操作,具体建议直接看视频

        第10讲 发布者Publisher的编程实现
        话题模型
        在这里插入图片描述

      • 小乌龟运动为例,结构框架如图:节点管理器、发布者、订阅者、话题
        这里我们要自己定义一个Publisher,在此基础上实现它指令的不断发送,控制小乌龟的运动。
        这里涉及到了如何实现一个发布者的编程实现:

        初始化ROS节点
        向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
        创建消息数据
        按照一定频率循环发布消息
        具体的操作过程建议参照视频来做,里边提到了很多操作细节。
        这里遇到了一个问题,关于环境变量的设置问题,需要在工作空间的根目录下进行环境变量配置(没有采用视频中讲环境变量写入.bashrc的方法),参照该文章,解决了配置环境变量进而运行的目的。
        [古月居ros21讲出现问题及个人解决方案1]第十讲出现:[rospack] Error: package’learning_topic’not found
        这里使用Ctrl+h在文件夹中显示隐藏文件
        最终实现了小乌龟的画圆圈运动。
        在这里插入图片描述

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

        初始化ROS节点
        订阅需要的话题
        循环等待话题消息,接收到消息后进入回调函数
        在回调函数中完成消息处理
        回调函数类似嵌入式中的中断服务函数,程序会进入一个等待的循环状态,程序一旦识别到有话题消息,就进入回调函数来处理消息。
        最终实现在命令行不断打印小乌龟的姿态信息。
        在这里插入图片描述

      • 第12讲 话题消息的定义和使用
        在这一讲,我们不再使用ROS自带的话题模板(我目前是这样理解的),而是自定义一个话题消息,并且建立发布者和订阅者的联系。
        首先在功能包learning_topic内创建一个msg文件夹,用于存放我们将要定义的话题消息,里边创建一个Person.msg文件,用于存放具体的消息内容:
        在这里插入图片描述
      • 在此基础上,在源文件src目录下创建一个发布者和一个订阅者的源码:
      • 在这里插入图片描述
      • 之后,在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
        我们可以先运行订阅者,等待发布者的运行
        运行发布者后,发布者发布的信息会被订阅者接受,二者同步显示:
        在这里插入图片描述
      • 另外,如果开始运行后,关闭ROS Master,并不会让话题中断,因为前者只是用于建立链接,链接建立成功后就不再起作用了,可以类比婚介所的作用
        这样我们就完成了本讲的操作