zoukankan      html  css  js  c++  java
  • Turtlesim 与 rqt 简介

    背景

    Turtlesim 是用于学习 ROS 2 的轻量级模拟器。它阐述了 ROS 2 能做的最基本的工作,以使您对以后使用真实机器人或机器人仿真将要做什么有所了解。

    rqt 是 ROS 2 的 GUI 工具。rqt 中完成的所有操作都可以在命令行上完成,但是它提供了一种更简单,更用户友好的方式来操作 ROS 2 元素。

    本教程涉及 ROS 2 的核心概念,例如节点,topic 和 service 的区别。所有的概念都将在以后的教程中进行详细介绍。现在,您只需简单设置这些工具并对其进行体验。

    前提条件

    上一教程 ROS 2 环境配置,向您展示了如何配置开发环境。

    Turtlesim 和 rqt 仅在 ROS 2 Dashing 之后可用。

    任务

    1 安装 turtlesim

    与往常一样,首先按照上一教程中的步骤在新终端中 source ROS 2 的配置文件。

    为您的 ROS 2 发行版安装 turtlesim 软件包:

    sudo apt update
    
    sudo apt install ros-<distro>-turtlesim
    

    检查软件包是否已安装:

    ros2 pkg executables turtlesim
    

    上述命令应该会返回 turtlesim 的可执行文件列表:

    turtlesim draw_square
    turtlesim mimic
    turtlesim turtle_teleop_key
    turtlesim turtlesim_node
    

    2 启动 turtlesim

    要启动 turtlesim,请在终端中输入以下命令:

    ros2 run turtlesim turtlesim_node
    

    应该会出现一个模拟器窗口,窗口中心有一只随机的乌龟。

    在终端的命令下,您将看到来自该节点的消息:

    [INFO] [1590135720.584280041] [turtlesim]: Starting turtlesim with node name /turtlesim
    [INFO] [1590135720.588933661] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
    

    在这里,您可以看到默认乌龟的名称是 turtle1,以及它生成时的默认坐标。

    3 使用 turtlesim

    打开一个新终端,然后再次 source ROS 2 的配置文件。

    现在,您将运行一个新节点来控制第一个节点中的乌龟:

    ros2 run turtlesim turtle_teleop_key
    

    此时,您应该打开了三个窗口:一个正在运行 turtlesim_node 的终端,一个正在运行 turtle_teleop_key 的终端,还有一个是 turtlesim 窗口。排列这些窗口,使您能够看到 turtlesim 窗口的同时,还可以激活运行 turtle_teleop_key 的终端,这样以便您可以控制 turtlesim 窗口中的乌龟。

    使用键盘上的箭头键控制乌龟。它将使用其附带的笔在屏幕上四处移动,以绘制迄今为止行走的路径。

    注意

    按下箭头键只会使乌龟移动一小段距离然后停下来。这是因为,如果操作者失去了与机器人的连接,则您将不希望机器人继续执行指令。

    您可以使用下述 list 命令来查看节点及其关联的 service,topic 和 action:

    ros2 node list
    
    ros2 topic list
    
    ros2 service list
    
    ros2 action list
    

    您将在接下来的教程中了解更多有关这些概念的信息。由于本教程的目的只是为了大致了解 turtlesim,因此我们将使用 rqt( ROS 2 的一个图形用户界面)来更仔细地研究 service。

    4 安装 rqt

    打开一个新的终端以安装 rqt 及其插件:

    sudo apt update
    
    sudo apt install ros-<distro>-rqt-*
    

    运行 rqt:

    rqt
    

    5 使用 rqt

    第一次运行rqt后,该窗口将是空白的。别担心,只需从顶部菜单栏中选择 Plugins > Services > Service Caller 即可。

    注意

    rqt 可能需要一些时间才能找到所有插件。如果点击 Plugins,但没有看到 Services 或任何其它选项,则应关闭 rqt,在终端中输入 rqt --force-discover 命令。

    使用 Service 下拉列表左侧的刷新按钮,确保 turtlesim 节点的所有 service 均可用。

    单击 Service 下拉列表以查看 turtlesim 节点的 service,然后选择 /spawn service。

    5.1 尝试 spawn service

    让我们使用 rqt 调用 /spawn service。您可以从其名称中猜到,/spawn 将在 turtlesim 窗口中创建另一只乌龟。

    Expression 列中的空单引号之间双击给新乌龟一个唯一的名称,例如 turtle2。您可以看到该 Expression 对应于 name 值,并且类型为 string

    输入要生成乌龟的新坐标,例如 x = 1.0y = 1.0

    注意

    如果您尝试生成一个与现有乌龟同名的新乌龟(如您的默认乌龟名称 turtle1 ),则会在运行 turtlesim_node 的终端中收到错误消息:

    [ERROR] [1590136557.841528877] [turtlesim]: A turtle named [turtle1] already exists
    

    要生成 turtle2,必须通过单击 rqt 窗口右上角的 Call 按钮来调用该服务。

    您将在输入的 xy 坐标处看到一只新的乌龟。

    如果您刷新 rqt 中的 service 列表,除了现有 service /turtle1/…,您还将看到与新生成乌龟相关的 service /turtle2/…

    5.2 尝试 set_pen service

    现在,让我们使用 /set_pen service 为 turtle1 提供一支独特的笔:

    rgb 的值介于0到255之间,将用来设置 turtle1 绘制笔的颜色,而 width 则用来设置线条的粗细。

    要使 turtle1 用明显的红线绘制路径,请将 r 的值改成255,并将 width 的值改成5。不要忘记在更改数据后调用该 service。

    如果返回到正在运行 turtle_teleop_key 的终端,然后按箭头键,您将看到 turtle1 的笔已发生变化。

    您可能已经注意到,目前无法移动 turtle2。但您可以通过将 turtle1 的 cmd_vel topic 重映射到 turtle2 来完成其移动。

    6 重映射

    在新终端中,source ROS 2 的配置文件,然后运行:

    ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
    

    现在,您可以在此终端处于活动状态时移动 turtle2,而在另一个运行 turtle_teleop_key 的终端处于活动状态时移动 turtle1。

    7 关闭 turtlesim

    要停止模拟,只需关闭运行 turtlesim_nodeturtle_teleop_key 的终端窗口。如果想要保持这些终端打开,您可以在 turtlesim_node 终端输入 Ctrl + C 并且在 turtle_teleop_key 终端输入 q 来结束模拟。

    总结

    使用 turtlesim 和 rqt 是学习 ROS 2 核心概念的好方法。

  • 相关阅读:
    delphi SysErrorMessage 函数和系统错误信息表 good
    Delphi中ShellExecute使用详解(详细解释10种显示状态)
    几个获取Windows系统信息的Delphi程序
    判断操作系统多久没有任何操作
    MVC4+WebApi+Redis Session共享练习(下)
    MVC4+WebApi+Redis Session共享练习(上)
    EntityFramework使用总结(与MVC4.0实现CURD操作)
    MVC3.0+knockout.js+Ajax 实现简单的增删改查
    基于Redis缓存的Session共享(附源码)
    Redis缓存服务搭建及实现数据读写
  • 原文地址:https://www.cnblogs.com/xGonZh10n/p/12938200.html
Copyright © 2011-2022 走看看