summary3 实现SLAM和导航工具[python][AI]

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

练习1:让你的机器人沿着正方形的运动路径移动
move_square.py

激光位移数据与激光雷达传感器
里程计对机器人导航非常重要,但它可能会随着时间的推移而漂移和累积误差,正如您在之前的练习中所观察到的(尽管在模拟中比在真实机器人上更好!)幸运的是,我们的机器人上还有另一个传感器,它可以提供更丰富的环境信息,我们可以用它来补充里程计信息,增强机器人的导航能力。

练习2:使用RViz可视化机器人数据

 [TERMINAL 1] $ roslaunch turtlebot3_gazebo turtlebot3_world.launch
 [TERMINAL 2] $ roslaunch turtlebot3_bringup turtlebot3_remote.launch
 [TERMINAL 3] $ rosrun rviz rviz -d `rospack find turtlebot3_description`/rviz/model.rviz
 [TERMINAL 4] $ rostopic info /scan

     Type: sensor_msgs/LaserScan

     Publishers:
      * /gazebo (http://localhost:#####/)

     Subscribers:
      * /rviz_#### (http://localhost:#####/)   
 [TERMINAL 4]: $ rosmsg info sensor_msgs/LaserScan

     std_msgs/Header header
       uint32 seq
       time stamp
       string frame_id
     float32 angle_min
     float32 angle_max
     float32 angle_increment
     float32 time_increment
     float32 scan_time
     float32 range_min
     float32 range_max
     float32[] ranges
     float32[] intensities  
          

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

解释/激光扫描(LiDAR)数据
/LaserScan消息是一条标准化的ROS消息(来自sensor_msgs软件包),任何ROS机器人都可以使用它发布从激光位移传感器(如TurtleBot3上的激光雷达)获取的数据。
ranges是一个float32值数组(我们知道它是一个值数组,因为数据类型后面有[])。这是包含激光雷达传感器获得的所有实际距离测量值的信息部分(以米为单位)。

$ rostopic echo /scan/angle_min -n1
0.0
---

$ rostopic echo /scan/angle_max -n1
6.28318977356
---

$ rostopic echo /scan/angle_increment -n1
0.0175019223243
---

“范围”数组总共包含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个值,数组相当大,但用方括号[]来说明它的开始和结束位置,并且在每条消息的末尾也应该有一个—来帮助您确认您正在查看整个内容。

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

练习3:使用SLAM构建环境地图
通过在每个终端中输入Ctrl+C关闭所有正在运行的ROS进程:
The Gazebo processes in TERMINAL 1.
The Bringup processes in TERMINAL 2.
The RViz processes running in TERMINAL 3
我们现在将把机器人发射到另一个新的模拟环境中,我们将创建一个使用SLAM的地图!

练习4:自主导航环境
navigation.launch

 [TERMINAL 1] $ roscd week2_navigation
 [TERMINAL 1] $ mkdir launch

你可能感兴趣的:(python,计算机视觉,opencv,python,人工智能)