LoCoBot快速入门教程-8.SLAM导航(ROS1)

此软件包配置了提供任何X系列Interbotix LoCoBot所需的ROS导航堆栈 平台能够同时执行定位和映射(SLAM)、导航或仅 地方化。它可以与英特尔实感 D435 相机或同时使用相机和A2M8 RPLidar 激光扫描仪。本地化和映射部分是使用rtabmap_ros ROS包,而导航部分通过move_base只读包。

注意

为了获得最佳效果,此包应与机器人一起在室内运行,整洁。不包含太多阳光且反射表面最小的环境。

xslocobot_nav_flowchart.png

如上所示,此包构建在 interbotix_xslocobot_control 包(其中启动 xs_sdk 节点),并与rtabmap_ros和move_base只读包。可以在下面找到这些包中所需节点的简短说明:

rostopic - 用于在启动时发布实感摄像机所需的倾斜角度

rtabmapviz - Rtabmap的可视化工具,用于映射或本地化;没有有必要使用,因为Rtabmap具有运行良好的RViz插件

move_base - 负责规划机器人的路径,并向跟随他们的基础

rtabmap - 负责执行SLAM或仅本地化

请注意,还有一些 Rtabmap节点在 realsense2_camera_manager用于处理目的。它们的描述如下:

rtabmap_ros/rgbd_sync -同步来自实感摄像机的彩色和深度图像,以及输出 RGBD 图像;这由下面的节点和主节点使用 rtabmap 节点待办事项 SLAM 或本地化

rtabmap_ros/point_cloud_xyzrgb - 接收RGBD图像,对其进行抽取(以减少噪声和 处理需求),并将 PointCloud2 消息输出到下面的节点

rtabmap_ros/obstacles_detection - 接收 PointCloud2 消息并过滤掉地面; 然后它将生成的 PointCloud2 输出到 depth/color/obstacles.这反过来又由 move_base 避开障碍物

用法

有三种方式可以使用此包:

从零开始的SLAM

从预构建的地图继续SLAM

地方化

注意

以下命令假设用户有一个带有激光雷达插件的 LoCoBot_wx250s机器人。 但是,任何X系列 LoCoBot 都可以工作。如果未使用激光雷达,请确保 use_lidar 参数设置为 false.

从零开始的SLAM

要从头开始启动并运行 SLAM,请在机器人计算机上的终端中键入以下内容:

roslaunch interbotix_xslocobot_nav xslocobot_nav.launch robot_model:=locobot_wx250s use_lidar:=true rtabmap_args:=-d

在上面的命令中,参数 rtabmap_args:=-d 提供。这将删除当前数据库(默认情况下 - 存储在 ~/.ros/rtabmap.db) 并创建一个新的。数据库存储 映射云和图形数据(有关这些概念的信息,请参阅 ROS Wiki),然后在运行时使用是时候创建 2D 地图了move_base可以使用。

导航堆栈运行后,您应该每秒在终端中看到一次信息消息 说类似的话...

rtabmap (3): Rate=1.00s, Limit=0.000s, RTAB-Map=0.0697s, Maps update=0.0099s pub=0.0000s (local map=1, WM=1)

现在,要在 RViz 中可视化机器人,请在远程 Linux 计算机上运行以下命令(请注意,您 应该首先运行 远程安装 脚本打开 您的个人计算机(如果您尚未这样做)。

roslaunch interbotix_xslocobot_descriptions remote_view.launch rviz_frame:=map

RViz现在应该打开,如下图所示:

rviz_start.png

要可视化正在创建的地图,请单击 地图 显示。查看实时颜色 从实感摄像机馈送和过滤后的点云数据,单击 照相机 显示。 这 move_base 软件包使用此过滤后的点云数据来检测机器人 路径。它被过滤以减少带宽并分割地板,这样机器人就不会 可以这么说,认为“地板是熔岩”。另一方面 rtabmap_ros 同时使用实时源和 对齐的深度馈送(不显示)以执行映射和定位。接下来,单击 激光扫描 显示以 360 度视图显示其认为存在障碍物的位置。这是 两者均由 move_base 用于障碍物检测和 rtabmap_ros 用于映射和定位 优雅。继续前进, RtabmapRos 显示可用于显示点云表示 机器人移动时实时构建的机器人环境。请参阅下图以获取 在RViz中可视化所有这些显示。

map_building.png

此时,您已准备好开始移动机器人。

有三种方法可以做到这一点。

一是 使用 2D 导航目标 RViz屏幕顶部的按钮,用于在 地图的可用空间。这会将命令发送到 move_base 规划并执行通往目标的路径。一个

第二种方法是运行 xslocobot_joy.launch 在 interbotix_xslocobot_joy 只读 包裹(在机器人或远程计算机上)。为此,请键入...

roslaunch interbotix_xslocobot_joy xslocobot_joy.launch robot_model:=locobot_base launch_driver:=false

设置 launch_driver 参数到 false 告诉启动文件不要启动 机器人驱动程序节点,因为机器人已经在运行。

最后,移动机器人的第三种方法是 运行小吹 键操作 节点(如果使用小吹版本)。然后,这将允许您使用您的 用于移动机器人的键盘箭头键。为此,请在机器人或遥控器上键入以下内容 计算机。。。

roslaunch kobuki_keyop keyop.launch __ns:=locobot

请注意 ns 启动文件标记。另请注意 只有一个 其中 应一次使用控制模式;否则,底座可能无法正确移动(因为它是 同时用来自多个包的不同速度命令轰炸)。

 

我们建议在进行映射或 SLAM 时使用 PS4 控制器,因为这可以让您完全控制 机器人的运动,使用起来比键盘更直观。清洁的其他一些提示 点云图有:

 

缓慢旋转机器人整圈以获得尽可能多的特征,以便算法 获得闭环的机会更高

在一个点旋转后,慢慢平移到另一个点,再做一个完整的 圈。多次重复此步骤和上述步骤,直到绘制出所需区域

在 RtabmapROS RViz显示屏,打开 地图云 显示,并升高 级别为 6 或 8(默认值为 4)。这将过滤掉更多的原始点云 数据,降低噪音Cloud decimation

同样在 RtabmapROS RViz 显示屏,打开 地图云 显示,并降低 级别为 2(默认值为 4)。这只会拼接长达 2 米的点云数据 一起远离机器人。由于深度读数越远,深度读数往往会降低 传感器,这也将过滤掉嘈杂的数据。Cloud max depth

尽量不要绘制已经多次绘制的区域以减少噪音;还有这个 将保持生成的数据库的大小更小;这些文件可能相当大(一些 百兆字节)

为了获得最佳的闭环检测,最好将深度摄像头倾斜到 与进行本地化时倾斜的角度相同;在本地化过程中,它是一个 让相机稍微向下倾斜是个好主意,这样就看不到小障碍物 可以拿起激光扫描仪。

映射后,您应该有一个结构类似于下面的 MapCloud。如果是 案例,类型 Ctrl + C 在机器人的终端中停止启动文件。然后关闭 RViz 也在您的远程计算机上。

3d_view_office_1.png