闭环控制[Python]
本课程结束时,您将掌握以下核心技能:
使用Python开发机器人节点实现闭环控制(基于里程计)。
解释里程计控制的局限性,并利用其他反馈信号增强性能。
分析/scan主题数据并可视化其分布情况。
使用ROS工具实现SLAM并构建环境地图。
利用现有库让机器人自主导航于环境中。
了解SLAM工具的工作原理及其所需信息来源。
本课程还将教授您如何利用ROS工具进行激光雷达扫描数据处理:
/scan/angle_min表示机器人前方的角度值(初始为0)。
/scan/angle_max表示最大检测角度(约为6.283弧度)。
/scan/angle_increment为每步角度增量(约0.0175弧度)。
此外您还将学习同步定位与绘图(SLAM)技术:利用里程计与传感器数据实时生成环境地图并定位机器人位置 ROS的强大功能使其操作简便且适合嵌入式系统部署
闭环控制[Python]
本课程结束时, 您将掌握以下技能:
- 通过开发基于Python的发布者订阅节点, 以里程计为基础实现机器人的闭环控制.
- 分析基于里程计运动控制方法的局限性, 并识别能够改善该方法的其他反馈信号.
- 解析/处理发布到/扫描主题的数据, 并利用现有的ROS工具进行数据可视化.
- 借助现有的ROS工具实现SLAM算法并构建环境地图.
- 依赖现有 ROS 库框架, 让机器人根据生成的地图自主导航于环境中.
- 层述这些 SLAM 和导航工具的工作原理及其所需的关键输入信息
以下是改写后的文本
LaserScan消息是一种标准化的ROS消息(源自sensor_msgs软件包),所有具备ROS接口的机器人均能使用它以发布基于激光位移传感器(如TurtleBot3上的激光雷达)的数据流。您可以访问官方链接获取传感器msgs/LaserScan消息的标准定义文档。
ranges是一个float32类型的数组(我们了解这一点是因为数据类型后面紧跟方括号[])。它记录了激光雷达传感器从环境中测得的所有实际距离测量值(单位为米)。
让我们考虑一个简化的情景,在一个完全封闭的小环境中使用TurtLoBoT3机器人进行测量。在这种情况下,在范围数组中的位移数据部分由绿色正方形标记表示:
PICTURE
如图所示,在LaserScan消息中提供了三个关键参数——最小覆盖角、最大覆盖角以及每步增量角。通过这些参数可以帮助我们将范围数组中的每一个数据点与其对应的角度位置建立联系。通过运行rostopic echo命令可以深入解析这些参数的具体数值,并了解它们在系统中的作用机制。
“范围”数组总共包含360个值:机器人周围每1°(角度增量为0.0175弧度)进行一次距离测量。范围数组中的第一个值(范围[0])是到机器人正前方最近对象的距离(即θ=0弧度或角度_min)。范围数组(范围[359])中的最后一个值是距离机器人前方359°(即θ=6.283弧度,或角度_max)处最近物体的距离。例如,如果我们要获得ranges数组中的第65个值,即:ranges[65],我们知道这将表示距离机器人前方65°(1.138弧度)(逆时针)的最近物体的距离。
激光扫描信息还包含参数range_min和range_max,分别表示激光雷达传感器可以检测到的最小距离和最大距离(以米为单位)。您也可以使用rostopic echo命令直接报告这些信息。
回顾我们对上述rostopic echo所做的工作,了解这些值是什么,并通过考虑这些上限和下限来了解激光雷达传感器的局限性。
最后,再次使用rostopic echo命令显示激光扫描主题信息的范围部分。现在不要使用-n1选项,这样你就可以在终端中实时看到数据的变化,但是在每条消息后使用-c选项清除屏幕,让事情变得更清楚。您可能还需要最大化终端窗口,以便可以看到数组的全部内容:对于360个值,数组相当大,但用方括号[]来说明它的开始和结束位置,并且在每条消息的末尾也应该有一个—来帮助您确认您正在查看整个内容。
这里你会注意到的主要问题是,信息太多,更新太快,没有任何实际用途!正如你们已经看到的,在RViz中,由红点表示的是飞过这里的数字。切换到RViz屏幕,再看一眼。毫无疑问,你会同意,这是一种更有用的方式来可视化范围数据,并说明了RViz对于解释你的机器人实时看到的内容是多么有用。
您可能还注意到,数组中散布着几个inf值。这表示传感器读数大于range_max指定的距离,因此传感器在这些情况下无法报告距离测量。
通过输入Ctrl+C,停止在终端窗口中运行rostopic echo命令。
~$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
#laugch the robot
$ rostopic echo /scan/angle_min -n1
0.0
---
#the min always be 0
$ rostopic echo /scan/angle_max -n1
6.28318977356
---
#moreover we could get information about the ranges and so on
$ rostopic echo /scan/angle_increment -n1
0.0175019223243
AI助手
同步定位和绘图(SLAM)
基于激光雷达传感器和机器人自身的里程计(特别是机器人姿势),所获得的数据表现得极为出色,并能提供机器人的环境信息。这些数据的一个重要应用即为"同步定位与绘图"(SLAM),这是ROS框架中的一个内置技术。通过这一技术,机器人不仅能够创建其所在环境的地图,并且还能实现自身位置在地图中的确定。通过本指南,您将掌握如何简便地运用这一技术。
