目标:使用默认的监督机器人扩展接口,命名为 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\" }"
便条
如果您尝试在节点字符串中导入一些 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}"
记录动画
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"}"
/Ros2Supervisor/animation_stop_recording 服务是 webots_ros2_msgs/srv/GetBool 类型,并允许停止动画。
ros2 service call /Ros2Supervisor/animation_stop_recording webots_ros2_msgs/srv/GetBool "{ask: True}"
摘要
在本教程中,您将学习如何启用 Ros2Supervisor 以及如何使用 Webots 仿真扩展接口。该节点创建了多个服务和主题,以便与仿真进行交互和修改。
1288

被折叠的 条评论
为什么被折叠?



