【ROS2】高级:模拟器-Webots-Ros2Supervisor 节点

目标:使用默认的监督机器人扩展接口,命名为 Ros2Supervisor 。

 教程级别:高级

 时间:10 分钟

 目录

  •  背景

  •  先决条件

  •   Ros2Supervisor

  •  时钟主题 Clock topic

  • 导入一个 Webots 节点

  • 删除一个 Webots 导入的节点

  •  记录动画

  •  摘要

 背景

在本教程中,您将学习如何启用 Ros2Supervisor 节点,该节点通过创建额外的服务和主题来增强界面,以便与仿真进行交互。例如,您可以在仿真运行时直接从 ROS 2 界面记录动画或生成 Webots 节点。这些说明详细列出了当前实现的功能以及如何使用它们。

 先决条件

在继续本教程之前,请确保您已完成以下内容:

  • 理解初学者教程中涵盖的 ROS 2 节点和主题。

  • 对 Webots 和 ROS 2 及其接口包的了解。

  • 熟悉设置机器人仿真(基础)。

Ros2Supervisor 

Ros2Supervisor 由两个主要部分组成:

  • 将一个 Webots 机器人节点添加到仿真世界中。其 supervisor 字段设置为 TRUE。

  • 一个 ROS 2 节点,作为外部控制器连接到 Webots 机器人(类似于您自己的机器人插件)。

ROS 2 节点充当控制器,调用 Supervisor API 函数来控制或与仿真世界交互。用户与 ROS 2 节点的交互主要通过服务和主题进行。

这些节点可以在 Webots 启动时使用 ros2_supervisor 参数在 WebotsLauncher 中自动创建。

webots = WebotsLauncher(
    world=PathJoinSubstitution([package_dir, 'worlds', world]),  # 指定Webots仿真世界文件的路径
    mode=mode,  # 指定Webots的运行模式
    ros2_supervisor=True  # 启用ROS 2监督器
)

webots._supervisor 对象还必须包含在启动文件返回的 LaunchDescription 中。

# 返回LaunchDescription对象,包含所有节点和处理程序
return LaunchDescription([
    webots,  # 启动Webots仿真
    webots._supervisor,  # 启动Webots的监督器节点


    # 当Webots仿真退出时,终止所有节点的操作
    launch.actions.RegisterEventHandler(
        event_handler=launch.event_handlers.OnProcessExit(
            target_action=webots,  # 目标动作:Webots仿真
            on_exit=[
                launch.actions.EmitEvent(event=launch.events.Shutdown())  # 退出时触发关闭事件
            ],
        )
    )
])

有关 webots_ros2 项目启动文件的更多信息,请参见设置机器人仿真(基础)。

时钟主题

Ros2Supervisor 节点负责获取 Webots 仿真的时间并将其发布到 /clock 主题。这意味着如果其他节点的 use_sim_time 参数设置为 true ,则必须生成 Ros2Supervisor 。有关 /clock 主题的更多信息可以在 ROS 维基中找到。http://wiki.ros.org/Clock

导入一个 Webots 节点

Ros2Supervisor 节点还允许您通过服务从字符串生成 Webots 节点

该服务名为 /Ros2Supervisor/spawn_node_from_string ,类型为 webots_ros2_msgs/srv/SpawnNodeFromString 。 SpawnNodeFromString 类型期望输入 data 字符串,并返回 success 布尔值。

从给定的字符串中,Supervisor 节点获取导入节点的名称并将其添加到 intern 实习生列表中,以便以后可能删除(参见删除 Webots 导入节点 https://docs.ros.org/en/jazzy/Tutorials/Advanced/Simulators/Webots/Simulation-Supervisor.html#remove-a-webots-imported-node )。

节点是使用 importMFNodeFromString(nodeString) API 函数 https://cyberbotics.com/doc/reference/supervisor?tab-language=python#wb_supervisor_field_import_mf_node_from_string 导入的。

以下是导入一个名为 imported_robot 的简单机器人的示例:

ros2 service call /Ros2Supervisor/spawn_node_from_string webots_ros2_msgs/srv/SpawnNodeFromString "data: Robot { name \"imported_robot\" }"

b434c4e863914a0e182d235178e9776c.png

 便条

如果您尝试在节点字符串中导入一些 PROTO,它们各自的 URL 必须在.wbt 世界文件中声明为 EXTERNPROTO 或 IMPORTABLE EXTERNPROTO。

删除一个 Webots 导入的节点

一旦使用 /Ros2Supervisor/spawn_node_from_string 服务导入节点,它也可以被移除。

这可以通过将节点的名称发送到名为 /Ros2Supervisor/remove_node 的主题,类型为 std_msgs/msg/String 来实现。

如果节点确实在导入列表中,则使用 remove() API 方法将其删除。https://cyberbotics.com/doc/reference/supervisor?tab-language=python#wb_supervisor_node_remove

以下是如何移除 imported_robot 机器人的示例:

ros2 topic pub --once /Ros2Supervisor/remove_node std_msgs/msg/String "{data: imported_robot}"

429dc54ce8e69ea72d8fc37fe8d4b665.png

 记录动画

Ros2Supervisor 节点还创建了两个额外的服务来记录 HTML5 动画。

/Ros2Supervisor/animation_start_recording 服务是 webots_ros2_msgs/srv/SetString 类型,并允许启动动画。 SetString 类型需要一个 value 字符串作为输入,并返回一个 success 布尔值。输入 value 表示动画文件应保存到的目录的绝对路径。

以下是如何启动动画的示例:

ros2 service call /Ros2Supervisor/animation_start_recording webots_ros2_msgs/srv/SetString "{value: "<ABSOLUTE_PATH>/index.html"}"

15b2fddb27ff98bdd4a34bed8b285bf4.png

/Ros2Supervisor/animation_stop_recording 服务是 webots_ros2_msgs/srv/GetBool 类型,并允许停止动画。

ros2 service call /Ros2Supervisor/animation_stop_recording webots_ros2_msgs/srv/GetBool "{ask: True}"

03749e41bbc5b756b0801c9b61448e82.png

 摘要

在本教程中,您将学习如何启用 Ros2Supervisor 以及如何使用 Webots 仿真扩展接口。该节点创建了多个服务和主题,以便与仿真进行交互和修改。

### 回答1: 这是一个关于ROS Noetic软件包依赖关系的问题。其中,下列软件包的依赖关系尚不足够满足要求,无法安装: ros-noetic-desktop-full: 依赖于 ros-noetic-desktop,但它不会被安装。 依赖于 ros-noetic-perception,但它不会被安装。 依赖于 ros-noetic-simulators,但它不会被安装。 依赖于 ros-noetic-urdf-sim-tu,但它不会被安装。 ### 回答2: 这个错误提示是说明在安装 ros-noetic-desktop-full 软件包时,发现它需要依赖一些其他的软件包,但是这些软件包未被安装。其中,ros-noetic-desktop、ros-noetic-perception、ros-noetic-simulators 和 ros-noetic-urdf-sim-tu 是四个未满足依赖关系的软件包。 这个错误提示一般是由于软件源的问题所导致的。在安装软件包时,系统会从软件源中查找该软件包以及它所需的依赖关系。如果软件源中不存在某个软件包的依赖关系,则会提示这个错误信息。 要解决这个问题,可以尝试以下几个方法: 1. 更新软件源:可通过修改软件源配置文件或使用软件源管理工具来更新软件源。更新后再次尝试安装软件包,看是否能够解决依赖关系问题。 2. 手动安装依赖关系:如果更新软件源后仍然无法解决依赖关系问题,可以尝试手动安装依赖关系。按照依赖关系的提示,逐个安装这四个软件包。安装完成后再次尝试安装 ros-noetic-desktop-full 软件包,看是否能够正常安装。 3. 使用 aptitude 命令安装:aptitude 命令可以自动处理依赖关系,可能会更好地解决这个问题。可以通过运行以下命令安装 ros-noetic-desktop-full 软件包: sudo aptitude install ros-noetic-desktop-full 以上是我的回答,希望能对你有所帮助。如果你还有其他问题,请随时回复。 ### 回答3: 这个问题意味着在安装 ros-noetic-desktop-full 软件包时,计算机无法满足所有需要的依赖关系。这些依赖关系包括 ros-noetic-desktop、ros-noetic-perception、ros-noetic-simulators 和 ros-noetic-urdf-sim-tu。 在解决这个问题之前,我们需要了解什么是依赖关系。在软件工程中,依赖关系指的是一个软件包需要另一个软件包才能正常运行的情况。例如,在 ROS 中,ros-noetic-desktop-full 需要依赖其他的软件包才能提供完整的功能。 为了解决这个问题,我们可以使用以下方法: 1. 更新软件包源列表。我们可以更新软件包源列表,这有助于计算机查找所需的软件包。在 Ubuntu 系统中,我们可以使用以下命令更新软件包源列表:sudo apt-get update。 2. 安装依赖关系。我们可以尝试单独安装缺失的依赖关系。在 ROS 中,我们可以使用以下命令安装缺失的软件包:sudo apt-get install ros-noetic-desktop ros-noetic-perception ros-noetic-simulators ros-noetic-urdf-sim-tu。 3. 检查软件包仓库。某些情况下,软件包源可能已经过时或不再受支持。我们可以检查软件包仓库,查看软件包是否可用。在 Ubuntu 系统中,我们可以使用以下命令查看软件包仓库:apt-cache search ros-noetic-desktop-full。 总之,无法满足依赖关系的问题是常见的,在解决这个问题之前,我们需要了解依赖关系的概念,并掌握一些解决方法。在 ROS 中,我们可以使用更新软件包源列表、安装依赖关系和检查软件包仓库等方法解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值