Ros2Supervisor 节点
目标:使用名为“Ros2Supervisor”的默认 Supervisor 机器人扩展接口。
教程级别:高级
时间:10 分钟
背景
在本教程中,您将学习如何启用“Ros2Supervisor”节点,该节点通过创建其他服务和主题来与模拟交互,从而增强界面。 例如,您可以在模拟运行时直接从 ROS 2 界面录制动画或生成 Webots 节点。 这些说明详细列出了当前实现的功能及其使用方法。
先决条件
在继续本教程之前,请确保您已完成以下操作:
了解 ROS 2 节点和初学者涵盖的主题 教程.
了解Webots和ROS 2及其接口包。
熟悉 设置机器人模拟(基础).
Ros2Supervisor
Ros2Supervisor
由两个主要部分组成:
添加到模拟世界的 Webots Robot 节点。其
supervisor
字段设置为 TRUE。作为外部控制器连接到 Webots Robot 的 ROS 2 节点(与您自己的机器人插件类似)。
ROS 2 节点充当控制器,调用 Supervisor API 函数来控制或与模拟世界交互。
用户与 ROS 2 节点的交互主要通过服务和主题执行。
可以使用 WebotsLauncher
中的 ros2_supervisor
参数在 Webots 启动时自动创建这些节点。
webots = WebotsLauncher(
world=PathJoinSubstitution([package_dir, 'worlds', world]),
mode=mode,
ros2_supervisor=True
)
启动文件返回的“LaunchDescription”中还必须包含“webots._supervisor”对象。
return LaunchDescription([
webots,
webots._supervisor,
# This action will kill all nodes once the Webots simulation has exited
launch.actions.RegisterEventHandler(
event_handler=launch.event_handlers.OnProcessExit(
target_action=webots,
on_exit=[
launch.actions.EmitEvent(event=launch.events.Shutdown())
],
)
)
])
有关“webots_ros2”项目启动文件的更多信息,请参阅:doc:./Setting-Up-Simulation-Webots-Basic。
时钟主题
“Ros2Supervisor”节点负责获取 Webots 模拟的时间并将其发布到“/clock”主题。
这意味着,如果其他节点的“use_sim_time”参数设置为“true”,则必须生成“Ros2Supervisor”。
有关“/clock”主题的更多信息,请参阅“ROS wiki <http://wiki.ros.org/Clock>”。
导入 Webots 节点
“Ros2Supervisor”节点还允许您通过服务从字符串生成 Webots 节点。
该服务名为 /Ros2Supervisor/spawn_node_from_string
,类型为 webots_ros2_msgs/srv/SpawnNodeFromString
。
SpawnNodeFromString
类型需要 data
字符串作为输入,并返回 success
布尔值。
从给定的字符串中,Supervisor 节点获取导入节点的名称并将其添加到实习列表中,以便以后可能删除(请参阅:ref:删除 Webots 导入的节点
)。
使用 importMFNodeFromString(nodeString)
API 函数 导入节点。
以下是导入名为 imported_robot
的简单机器人的示例:
ros2 service call /Ros2Supervisor/spawn_node_from_string webots_ros2_msgs/srv/SpawnNodeFromString "data: Robot { name \"imported_robot\" }"
Note
如果您尝试在节点字符串中导入一些 PROTO,则必须在 .wbt 世界文件中将它们各自的 URL 声明为 EXTERNPROTO 或 IMPORTABLE EXTERNPROTO。
删除 Webots 导入的节点
使用 /Ros2Supervisor/spawn_node_from_string
服务导入节点后,也可以删除该节点。
可以通过将节点名称发送到名为 /Ros2Supervisor/remove_node
且类型为 std_msgs/msg/String
的主题来实现。
如果节点确实在导入列表中,则使用 remove()
API 方法 将其删除。
以下是有关如何删除 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"}"
The /Ros2Supervisor/animation_stop_recording
service is of type webots_ros2_msgs/srv/GetBool
and allows to stop the animation.
ros2 service call /Ros2Supervisor/animation_stop_recording webots_ros2_msgs/srv/GetBool "{ask: True}"
摘要
在本教程中,您学习了如何启用“Ros2Supervisor”以及如何使用 Webots 模拟扩展接口。 该节点创建多个服务和主题来与模拟进行交互和修改。