机器人上层控制
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的核心三个基础包:
- 使用move_base包进行路径规划和障碍物躲避
- 用gmapping包创建地图
- 用一张地图和amcl来导航和定位
语音包:
- 语音识别PocketSphinx
- 文字转语音系统Festival
- 若希望机器人以50cm为半径,0.8r/s逆时针方向转圈运动,如何设置Twist Message?
- 如何使用Rviz 显示一个Turtlebot,请写出输入指令。
- Navigation Stack 中重要的package有哪些?作用是什么?
- ROS在对一个包的依赖关系定义上是使用什么文件去执行的?
- 如何理解TF,并写出如何查看变换tf tree的指令。
- 请画出文件系统级的ROS框架。
- 一个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
-
amcl是自适应蒙特卡洛算法包,用于 定位机器人。base_local_planner是机器人局部规划包,用于规划机器人路径。global_planner是机器人全局规划包,用于规划机器人路径。
-
cmakeLists.txt和package.xml两个文件
-
tf用于表示机器人中的存在的坐标系及其坐标变换关系。
rosrun tf view_frames
-
src子文件夹,存放源文件。CMakeLists.txt文件,用于编译源文件。