ROS总结理解

机器人操作系统入门_中科院软件所-重德智能机器人联合研究中心_中国大学MOOC(慕课)

可以参考视频学习

目录

.1ROS版本

 .2 ROS架构

.3 ROS与IDE安装

.4 Catkin与工作空间

5.ROS的Package结构

6.ROS的常用指令

7.Metapackage

8.Master和Node

.9 Topic和msg

.10 Service和srv

.11 Parameter Serve

12.Action

13.Gazebo

14.RViz

15.Rqt

16.Rosbag

 17.Client Library

References:


.1ROS版本

ROS总结理解_第1张图片

 .2 ROS架构

ROS可以看作是一种中间件,沟通了自己写的代码和真正的操作系统(如Linux)。ROS由四部分组成:框架+工具+功能+社区。

ROS总结理解_第2张图片

 ROS中的节点(Node)=电脑中的进程或可执行文件。ROS是一个模块化、分布式的架构,自带了进程管理和通信的相关功能。因此在开发的时候无需自己考虑进程的并行运行、协同调度等问题,简化了开发。

.3 ROS与IDE安装

关于ROS的安装,基本上直接按照官网安装流程(中文)安装即可,不难。安装完成后终端输入roscore,如果无报错说明安装成功。

推荐IDE:RoboWare Studio,官网是这里,但现在貌似上不去了。Github项目主页是这里,基于VS Code开发。官网打不开的话可以去Github下载deb包自己安装,点击这里去Github下载。

.4 Catkin与工作空间

Catkin(中文意思为柳絮))是ROS定制的编译构建系统,是对CMake的扩展。Catkin Workspace则是组织和管理package的文件夹,组织结构如下所示。

ROS总结理解_第3张图片

src是实际写代码的地方,可以放多个package,如下,其它是系统自动生成的。 

ROS总结理解_第4张图片

 package是Catkin编译的基本单元。

catkin_make用于初始化创建空间以及编译项目(常用),基本操作命令如下。

ROS总结理解_第5张图片

  • 初始化工作空间时,工作空间根目录下必须要有src文件夹,否则会提示没有src文件夹,新建不了。

在编译时注意两点:

  1. 一是要在工作空间的根目录下catkin_make,不然会报错;
  2. 二是catkin_make之后记得source一下catkin_ws/devel/setup.bash,否则可能会提示找不到可执行文件。 

建立工作空间可能会遇到如下问题。

ROS总结理解_第6张图片

提示找不到包,这时候pip install catkin_pkg安装一下就好了。建好的工作空间终端输出如下。

ROS总结理解_第7张图片

5.ROS的Package结构

中文可叫做功能包,是ROS软件的基本组织形式,是Catkin的基本编译单元。一个package可以包含多个可执行文件(节点)。Package的完整结构如下:

ROS总结理解_第8张图片

  • CMakeLists.txt(必须):规定Catkin的编译规则
  • package.xml(必须):自我描述,定义package的属性信息,如包名、版本、作者等。一般只需要改就可以了。
  • scripts:用于存放一些shell或python脚本
  • include:源代码的头文件
  • src:源代码,如cpp文件、py文件等
  • msg:自定义消息格式,*.msg
  • srv:自定义服务,*.srv
  • action:自定义动作,*.action
  • config:参数、设置文件等,如*.yaml
  • launch:启动规则文件,*.launch,配合roslaunch命令可以一次运行多个可执行文件

6.ROS的常用指令

ROS总结理解_第9张图片

常用依赖:roscpp、rospy、std_msg、nav_msg等。直接在catkin_create_pkg时在包名后面空格加上即可。

全新新建工作空间终端代码:

mkdir -p ~/catkin_ws/src
cd catkin_ws
catkin_make

接着在工作空间中新建package:

catkin_create_pkg test roscpp rospy std_msg

这样便建好了一个包。

而对于从Github上clone或下载下来的代码,在建好了工作空间后,可以按照如下方式安装。

cd ~/catkin_ws/src
git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git
cd ~/catkin_ws
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
catkin_make
source ~/catkin_ws/devel/setup.bash

需要注意的是下载的代码需要放到工作空间的src文件夹下,

第二是需要在工作空间根目录下安装包所需的依赖以及CatkinMake。最后别忘了source一下。

当然如果嫌麻烦也可以将最后一行添加到~/.bashrc中,在终端中输入echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc即可。这样每次CatkinMake后,重新打开终端即可。

注意:

最好不要CatkinMake后直接就运行。因为在打开终端时会载入~/.bashrc的内容,但这个时候你还没有CatkinMake,所以你载入的其实是上一次CatkinMake后的结果。当然如果说你的package项目不是第一次编译、名称也没有改变,那么setup.bash中的内容也就没有变,这样CatkinMake前载入也是可以的。

7.Metapackage

可以翻译为“元包”或“虚包”,其本身没有什么内容,只包含有package必备的CMakeLists.txtpackage.xml。但它依赖了其它包(在package.xml中指定),通过这种方式将多个包组合起来。这样做的好处就是在安装的时候就不需要一个个安装,而只安装一个metapackage就可以了。ROS中常见的Metapackage如下:

ROS总结理解_第10张图片

8.Master和Node

在ROS中,所有的Node都是通过Master管理的,因此如果想启动一个Node,必须先要启动Master(roscore)然后再启动节点(rosrun)。

ROS总结理解_第11张图片

ROS总结理解_第12张图片

话题通信中

发布者和订阅者都需要一个节点

(可以理解为连接master的一个端口,通信的话需要给一个端口进行通信) 

Master:节点管理器。每个node启动的时候都要向master注册,管理node之间的通信。启动Master的命令是roscore,启动master的同时也会顺带启动rosout(日志输出)和parameter server(参数服务器)。

Node:ROS的进程,package里的可执行文件运行的示例,一般以功能划分。启动Node的命令是rosun [pkg_name] [node_name](必须先启动好master);也可以以launch文件的方式启动:roslaunch [pkg_name] [*.launch](自动判断master是否运行,没有的话自动启动),这样可以一次启动多个node。rosnode命令则用于查看和管理node,常用功能如下。

ROS总结理解_第13张图片

ROS总结理解_第14张图片

实际项目中,一般将用于启动机器人的包命名成name_bringup,这样在终端输入roslaunch name_bringup name.launch就可以启动机器人了

.9 Topic和msg

 Topic:ROS中的异步通信方式,可以看作是一个“频道”,Node之间通过publish-subscribe机制通信,如下所示。

一个Topic可以被多个Node订阅,一个Node也可以发布多个Topic,同时一个Topic也可以由多个Node发送,是一种多对多的关系。Topic在代码层面是字符串。 

Message:Topic内容的数据类型(格式标准),定义在*.msg文件中。Message可以理解为类,而发布的一条条的信息则是类的对象。基本Message类型如下: 

ROS总结理解_第15张图片

例如ROS里定义的Image的Message格式如下: 

ROS总结理解_第16张图片

相关命令:

ROS总结理解_第17张图片 

 上图是运动小乌龟的时候echo出来的消息

ROS总结理解_第18张图片

.10 Service和srv

Service:ROS中的同步通信方式,Node间可以通过request-reply方式通信,如下。相比于Topic的“发了就不再管”或“只管接收”的单向通信,Service更加“有来有回”,所以比较适用于一些修改等场景,返回结果是是否修改成功。 

ROS总结理解_第19张图片

节点(Node)就是Master分配给运行文件的端口

Topic和Service的对比: ROS总结理解_第20张图片

srv:Service通信的数据格式,定义在*.srv文件中。一个示例srv文件如下。 

 

ROS总结理解_第21张图片

Service常用命令如下: 

ROS总结理解_第22张图片

 此外在自定义了Topic或Service后,都需要在package.xml和CMakeLists.txt中修改对应内容,如下。

ROS总结理解_第23张图片 

.11 Parameter Serve

参数服务器中存储各种参数的字典(键值对),可以用命令行、launch文件和node(API)读写。一般将系统中不常改变的参数、设置等放到参数服务器中。可以理解为参数服务器中的参数对于节点是共享的,节点可以读写内容。

命令行修改参数命令rosparam

ROS总结理解_第24张图片

launch文件中修改参数:

ROS总结理解_第25张图片

一般用于单个参数设置,一般用于批量参数设置。

12.Action

 可以理解为升级版的Service。

ROS总结理解_第26张图片

 Action通信的数据格式定义在*.action中。一个简单的示例如下:

ROS总结理解_第27张图片

 

13.Gazebo

ROS下的机器人仿真工具,Gazebo基于ODE物理引擎,用于动力学、导航、感知等任务的模拟。官网是这里。直接点击Gazebo的图标即可启动。

14.RViz

全称The Robot Visualization tool,是一个方便监控和调试的可视化工具,其本质上就是将一些订阅得到的数据可视化地显示出来,从而方便调试。在终端中直接输入rviz即可启动(需要先启动Master)。

15.Rqt

可视化工具,显示一些抽象的信息,如rqt_graph用于显示系统的通信架构,rqt_plot用于绘制一些动态参数曲线(如线速度、角速度、IMU数据等),rqt_console用于查看日志等等。

16.Rosbag

ROS的命令行工具,用于记录和回放数据流。

 

ROS总结理解_第28张图片

基本使用:

ROS总结理解_第29张图片

 17.Client Library

Client Library是ROS提供的用于编程的API库,如建立node、发布消息、调用服务等。比较常用的两个是roscpprospy

roscpp常用函数如下:

ROS总结理解_第30张图片

ROS总结理解_第31张图片

ROS总结理解_第32张图片

ROS总结理解_第33张图片

ROS总结理解_第34张图片

ROS总结理解_第35张图片

ROS总结理解_第36张图片

 rospy常用函数如下:

ROS总结理解_第37张图片

ROS总结理解_第38张图片

ROS总结理解_第39张图片

ROS总结理解_第40张图片

 

References:

ROS学习笔记1

你可能感兴趣的:(#,ros,机器人)