Skip to main content

机器人上层控制

7.1 ROS简介

ROS的官方定义为面向机器人的开源的元操作系统(meta-operating system)。

它能够提供类似传统操作系统的诸多功能,如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。

设计目标:在机器人研发领域提高代码复用率

途径:分布式处理框架(又名Nodes)

特征:

(1)点对点设计

(2)分布式计算

(3)软件复用

(4)多语言支持

(5)精简与集成

(6)工具包丰富

(7)免费并且开源

7.2 ROS 架构

7.2.1 工作空间

在使用工作空间之前必须要source setup.bash

7.2.2 ROS分级

计算图级

节点(node)、消息(message)、主题(topic)、服务(service)

节点之间是通过传送消息进行通讯的。原来标准的数据类型(整型,浮点型,布尔型等等)都可被支持,同时也支持原始数组类型。消息可以包含任意的嵌套结构和数组(很类似于C语言的结构structs)。

消息以一种发布/订阅的方式传递。一个节点可以在一个给定的主题中发布消息,并针对某个主题关注与订阅特定类型的数据。可能同时有多个节点发布或者订阅同一个主题的消息。总体上,发布者和订阅者不了解彼此的存在,如图所示。

服务,用一个字符串和一对严格规范的消息定义:一个用于请求,一个用于回应。这类似于web服务器,web服务器是由URIs定义的,同时带有完整定义类型的请求和回复文档。

在上面概念的基础上,需要有一个控制器可以使所有节点有条不紊的执行,这就是一个ROS的控制器(ROS Master)。

ROS Master 通过RPC(Remote Procedure Call Protocol,远程过程调用)提供了登记列表和对其他计算图表的查找。没有控制器,节点将无法找到其他节点,交换消息或调用服务。

文件系统级

ROS文件系统级指的是在硬盘上面查看的ROS源代码的组织形式。ROS中有无数的节点、消息、服务、工具和库文件,需要有效的结构去管理这些代码。在ROS的文件系统级,有以下几个重要概念:包(package)、堆(stack)

ROS的软件以包的方式组织起来。堆是包的集合,它提供一个完整的功能。ROS是一种分布式处理框架。

社区级

仿真工具:RViz 、gazebo、Tf

运动控制的分层:

控制一个机器人运动可以在运动控制系统中许多不同的层中实现,ROS在不同的层中都有提供相应的方法。从对发动机的直接控制,到路径规划和SLAM(Simultaneous Localization and Mapping,实时定位和地图绘制),不同的层代表不同程度的抽象。

可将其分为六层:

(1)发动机、轮子和编码器

(2)发动机控制器和驱动程序

(3)ROS基控制器

(4)使用ROS中move_base包的基于框架的运动

(5)使用ROS的gmapping包和amcl包的SLAM

(6)语义目标

SLAM的核心三个基础包:

  1. 使用move_base包进行路径规划和障碍物躲避
  2. 用gmapping包创建地图
  3. 用一张地图和amcl来导航和定位

语音包:

  1. 语音识别PocketSphinx
  2. 文字转语音系统Festival
warning
  1. 若希望机器人以50cm为半径,0.8r/s逆时针方向转圈运动,如何设置Twist Message?
  2. 如何使用Rviz 显示一个Turtlebot,请写出输入指令。
  3. Navigation Stack 中重要的package有哪些?作用是什么?
  4. ROS在对一个包的依赖关系定义上是使用什么文件去执行的?
  5. 如何理解TF,并写出如何查看变换tf tree的指令。
  6. 请画出文件系统级的ROS框架。
  7. 一个package 最基本的文件组成部分是什么?
Details

解析 1.

msg.linear.x = 0.4;
msg.angular.z = 0.8;
sudo apt-get install turtlebot3_*
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_fake turtlebot3_fake.launch
  1. amcl是自适应蒙特卡洛算法包,用于定位机器人。base_local_planner是机器人局部规划包,用于规划机器人路径。global_planner是机器人全局规划包,用于规划机器人路径。

  2. cmakeLists.txt和package.xml两个文件

  3. tf用于表示机器人中的存在的坐标系及其坐标变换关系。

rosrun tf view_frames
  1. src子文件夹,存放源文件。CMakeLists.txt文件,用于编译源文件。