闭环控制[Python]

本教程讲解如何使用Python实现ROS机器人的闭环控制,基于里程计进行导航。内容包括理解基于里程计的控制局限性,使用ROS工具可视化/LaserScan数据,实施SLAM构建环境地图,以及利用ROS库实现自主导航。重点介绍了激光雷达传感器的工作原理,如何解析/LaserScan消息中的范围数据,以及SLAM在机器人定位和绘图中的应用。
摘要由CSDN通过智能技术生成

闭环控制[Python]

本课程结束时,您将能够:
1通过开发Python发布者订阅节点,实现机器人的闭环(基于里程计)控制。
2解释基于里程计的运动控制方法的局限性,并确定可用于增强这一点的其他反馈信号。
3解释发布到/扫描主题的数据,并使用现有的ROS工具将其可视化。
4使用现有的ROS工具实施SLAM并构建环境地图。
5利用现有的ROS库,让机器人使用您生成的地图自主地在环境中导航。
6解释这些SLAM和导航工具是如何实现的,以及需要哪些信息才能使它们工作。

这是RViz,这是一个ROS工具,允许我们实时可视化机器人测量的数据。散布在机器人周围的红点表示激光位移数据,该数据由位于机器人顶部的激光雷达传感器测量(如您在机器人概述部分中发现的)。这些数据使机器人能够“看到”周围的任何障碍物。激光雷达传感器持续旋转,在旋转过程中发出激光脉冲,这些脉冲从附近的物体反射回传感器。脉冲返回所需的时间可用于确定反射它的物体的距离。由于激光雷达传感器旋转并持续执行此过程,因此可以生成对环境的完整360°扫描。在这种情况下(因为我们在这里进行模拟),数据代表了机器人周围模拟环境中的物体,所以你应该注意到,红点产生的轮廓与Gazebo中模拟的世界中的物体相似(或至少部分相似)。

/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

同步定位和绘图(SLAM)
综合起来,来自激光雷达传感器和机器人的里程计(特别是机器人姿势)的数据非常强大,可以对机器人的环境得出一些非常有用的结论。这些数据的关键应用之一是“同步定位和绘图”,即SLAM。这是一个内置在ROS中的工具,允许机器人建立其环境地图,同时在该地图中定位自己!现在,您将了解在ROS中利用此工具是多么容易。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值