ROS2、slam_toolbox、Navigation2、Gazebo(转)

参考文献:

  • wiki.ros.org/slam_toolbox
  • github.com/SteveMacenski/slam_toolbox
  • ros-planning.github.io/navigation2/

Slam Toolbox软件包基于LaserScan消息的形式组合来自激光测距仪的信息,并从odom-> base链接中进行了TF转换,从而创建了空间的二维地图。该软件包将允许完全序列化重新加载的SLAM地图的数据和姿态图,用于持续建图、定位,合并或进行其他操作。允许SLAM Toolbox在同步(即,处理所有有效的传感器测量,无论是否滞后)和异步(即,在可能的情况下处理有效的传感器测量)模式下运行。

ROS取代了ggapping、cartographer、karto、hector等功能,具有功能完备的SLAM,该功能建立在Karto核心的强大扫描匹配器上,已被大量使用并加速用于此软件包。还介绍了一个基于Google Ceres的新优化插件。还介绍了一种称为“弹性姿态图定位”"elastic pose-graph localization" 的新定位方法,该方法采用测量的滑动窗口并将其添加到图形中以进行优化和细化。这允许跟踪环境中已更改的局部要素,而不是将其视为偏差,并且当离开某个区域而不影响长期地图时,会删除这些多余的节点。

它是在大型动态室内环境中应对GMapping、Karto、Cartographer和AMCL的地图绘制和定位质量不足而创建的,尽管它也已在人行道机器人上进行了测试和部署。

其中包含一个RVIZ插件,可通过ROS主题和服务与SLAM Toolbox进行交互。虽然它是作为调试工具提供的,但对于生产而言,建议使用它包装自己的操作界面。允许通过RVIZ插件进行手动姿势图操作,该插件非常适合小型地图。在较大的地图中,交互式标记将使RVIZ过载,因此它在较小的地图中作为调试工具或用于自省时最有用。在交互式姿势图操作模式下,可以移动和旋转图中的节点,同时显示该节点的激光扫描图,以使其与闭环或匹配更好地对齐,然后在图形姿势的该部分上重新运行优化器。旋转地图以使其轴向对齐也非常有用。


概述

Navigation 2项目是ROS Navigation Stack的新一代版本(适用ROS2)。该项目寻求找到一种安全的方法,使移动机器人从A点移动到B点。这将完成动态路径规划,计算电动机的速度,避免障碍物和结构恢复行为。要了解有关该项目的更多信息,请参阅关于和联系

导航2使用行为树来调用模块化服务器以完成操作。动作可以是计算路径,控制工作量,恢复或任何其他与导航相关的动作。这些都是在ROS动作服务器上与行为树(BT)进行通信的单独节点。下图将很好地了解Navigation 2的结构。注意:可以在每个服务器中为控制器,计划者和恢复提供多个插件,并带有匹配的BT插件。这可用于创建上下文导航行为。如果想查看该项目与ROS(1)导航之间的比较,请参阅ROS与ROS2导航

Navigation2(Nav2)的预期输入是符合REP-105的TF转换,使用静态Costmap图层的地图源,BT XML文件以及任何相关的传感器数据源。然后它将为完整或非完整机器人的电动机提供有效的速度命令。我们目前支持完整的和差速驱动的基座类型,但计划在不久的将来也支持Ackermann(类似汽车的)机器人。

它具有以下工具:

  • 加载、服务和存储地图(地图服务器)
  • 在地图上定位机器人(AMCL)
  • 规划障碍物从A到B的路径(Nav2 Planner)
  • 沿路径控制机器人(Nav2控制器)
  • 将传感器数据转换为世界的成本图表示(Nav2 Costmap 2D)
  • 使用行为树(Nav2行为树和BT Navigator)构建复杂的机器人行为
  • 计算故障情况下的恢复行为(Nav2恢复)
  • 跟随顺序的航点(Nav2航点跟随者)
  • 管理服务器的生命周期(Nav2 Lifecycle Manager)
  • 用于启用您自己的自定义算法和行为的插件(Nav2 Core)

同时还提供了一组启动插件来帮助入门。NavFn使用A *或Dijkstra的算法计算从姿势到目标姿势的最短路径。DWB将使用DWA算法来计算遵循路径的控制效果,并为轨迹选择提供了多个插件。包括以下恢复行为:等待,旋转,清除成本图和备份。有一组BT插件可用于调用这些服务器和计算条件。最后,有一组Rviz插件,用于与堆栈交互并控制生命周期。可以在导航插件上找到所有用户报告的插件的列表。

Navigation2教程

介绍

与Gazebo接口的ROS 2软件包集包含在名为的元软件包中gazebo_ros_pkgs。请参阅 ROS 2概述 以获取背景信息,然后继续此处。

这些软件包支持ROS 2 Dashing和Gazebo 9,可以从debian软件包或从源代码安装。

预备条件

应该了解ROS 2的基本概念,并已阅读一些 ROS 2教程

安装ROS 2

ROS2可以通过二进制安装或源安装来安装,请参阅ROS 2安装页面。当前稳定的分布是Dashing

提示:不要忘记按照ROS安装页面上的说明来获取源脚本。确切的命令将根据安装方法而有所不同。更新setup.bash。

安装Gazebo

可以从源代码或从预构建软件包中安装Gazebo。请参阅 安装Gazebo

应该安装Gazebo9。如果从源安装,请确保构建 gazebo9分支。

提示:如果在查找插件和其他资源时遇到困难,则可能需要获取Gazebo的安装文件。例如:。source /usr/share/gazebo/setup.sh

安装gazebo_ros_pkgs

按照从debian软件包安装的说明或从源代码安装的说明进行操作。

从debian软件包安装(在Ubuntu上)

假设已经安装了一些dashing debian软件包,请gazebo_ros_pkgs按照以下步骤安装 :

sudo apt install ros-dashing-gazebo-ros-pkgs

从源代码安装(在Ubuntu上)

如果是一位积极的开发人员,致力于为代码库做贡献,那么建议安装源代码,因为它提供了对工作流程的更多访问和控制。

提示:这些说明要求使用 colcon构建工具,这是ROS 2中使用的标准工具。

需要gazebo_ros_pkgs根据使用的ROS 2版本选择的分支。当前支持的分支是:

以下设置假定使用ros2分支安装gazebo_ros_pkgs

  1. 确保git已在Ubuntu计算机上安装: sudo apt install git
  2. 为colcon工作区创建一个目录并移至其中: mkdir -p ~/ws/src
  3. 复制 此文件该文件将获取gazebo_ros_pkgs和需要的其他软件包: cd ~/ws wget https://bitbucket.org/api/2.0/snippets/chapulina/geRKyA/f02dcd15c2c3b83b2d6aac00afe281162800da74/files/ros2.yaml 注意:version yaml文件中的标记表示我们正在检出特定存储库 的分支,例如 版本:ros2检出该ros2分支。
  4. 将软件包放入src目录 cd ~/ws vcs import src < ros2.yaml
  5. 安装所有依赖项: cd ~/ws rosdep install –from-paths src –ignore-src -r -y
  6. 然后构建所有软件包: cd ~/ws colcon build –symlink-install 注意:在构建此版本之前,确保ROS 2环境的来源正确。
  7. 如果在构建时遇到任何问题,请务必在answer.gazebosim.org上寻求帮助 。
  8. 确保为打开的每个新终端提供此工作空间的安装设置: source ~/ws/install/setup.bash 提示:可以通过运行一次此命令,为每个新终端自动获取此消息:echo "source ~/ws/install/setup.bash" >> ~/.bashrc

测试Gazebo和ROS 2集成

假设已经正确设置并构建了ROS 2和Gazebo环境,您现在应该能够加载包含ROS 2插件的Gazebo世界,并在运行时插入其中包含ROS 2插件的模型。

Gazebo ROS软件包为您提供了多个演示世界,以使您快速入门这些插件。演示世界可以在这里找到 ,并且默认情况下安装在 。/opt/ros/<distro>/share/gazebo_plugins/worlds/

每个世界文件的顶部都有说明,并提供了一些示例命令,可以运行这些命令来测试其功能,请务必检查一下!

让我们现在尝试加载其中之一!

  1. 打开一个新终端
  2. 按照安装ROS 2的说明输入ROS 2。
  3. 确保已安装一些核心工具: sudo apt install ros-dashing-ros-core ros-dashing-geometry2
  4. 如果gazebo_ros_pkgs从源安装,请从工作空间获取源: . ~/ws/install/setup.bash
  5. 用Gazebo加载差分驱动世界: gazebo –verbose /opt/ros/crystal/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world
  6. Gazebo的GUI应该与一个简单的工具一起出现:
  7. 在新的终端(这是第二个终端)上,运行以下命令以查看world文件。 gedit /opt/ros/crystal/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world
  8. 看看顶部的代码块有一些示例命令吗?让我们打开第三个终端,再次gazebo_ros_pkgs如上所述,获取ROS 2的源。
  9. 然后运行以下命令之一,例如: ros2 topic pub /demo/cmd_demo geometry_msgs/Twist '{linear: {x: 1.0}}' -1
  10. 会看到车辆向前行驶:
  11. 试用文件上列出的其他命令,并尝试修改它们的值以了解事物的工作方式。还可以尝试其他演示世界!