MATLAB - ROS 2 分析器
系列文章目录
前言
本主题介绍如何连接 ROS 2 网络,分析网络图中所有元素的基本信息(如节点名称和节点之间的信息),以及可视化与 ROS 2 节点相关的参数(如主题、服务和操作)之间的交互。
一、连接并查看 ROS 2 网络
- 从 MATLAB® 工具条的 “应用程序 ”选项卡中打开 ROS 2 Network Analyzer 应用程序。
- 要连接 ROS 2 网络,请单击应用程序工具条中的 “连接”。
- 提供 ROS 2 域名 ID 并点击提交。默认的域 ID 为 0,这将在可视化界面中打开网络图。
- 在 “网络浏览器 ”面板中查看不同元素的列表,在 “属性 ”面板中查看它们的编号以及所连接 ROS 2 网络的域 ID。从 “网络浏览器 ”中选择或取消选择这些元素,即可从图形中查看或隐藏它们。
-
Network Browser Properties 节点 -- 列出连接的 ROS 2 网络中的所有节点
主题 -- 列出连接的 ROS 2 网络中每个节点发布和订阅的所有主题
服务 -- 列出节点提供的所有服务(服务-服务器)和节点作为客户的所有服务(服务-客户)
动作 -- 列出节点提供的所有动作(动作-服务器)和节点作为客户端的所有动作(动作-客户端)
- 单击 “刷新 ”更新 ROS 2 网络图,使其包含新添加或删除的节点,并分别包含网络浏览器和属性中的所有节点元素。
- 要使网络图适合屏幕宽度,请单击应用程序工具条中的自动排列。
二、与网络图表互动
- 根据视觉需求,通过捏入或捏出放大或缩小,或单击并按住在图形周围平移。
- 使用可视化窗口左下角的小地图可以全面了解大型网络,并突出显示当前可见的部分。您可以点击小地图上的任意位置来平移网络图,确保导航的便捷性,并选择查看所需的部分。
- 选择可视化图表中的任何元素,即可在属性面板中查看其所有详细信息。
您还可以在可视化窗口中单击并拖动这些元素,以方便查看。要将网络图恢复到初始视图,请单击自动排列。
Elements | Properties |
---|---|
Node |
|
Publisher |
|
Subscriber |
|
Topic |
|
Service |
|
Action |
|
- 您可以右键单击并复制网络图中任何元素的名称或属性面板中的任何值,并将其作为关键字在大型网络中搜索所有元素。
三、过滤和搜索元素
选择或清除这些筛选器,以查看或从网络图中删除它们。
Filter Options | Descriptions |
---|---|
Unreachable Nodes | This constitutes of nodes that:
|
Dead Sink | This constitutes of topics which have subscribers and no publishers. |
Leaf Topics | This constitutes of topics which have publishers and no subscribers. |
Default Topics | This constitutes of default topics related to ROS 2 network:
|
Default Services | This constitutes of default services related to ROS 2 network:
|
Action Topics and Action Services | This constitutes of default topics and services related to actions in the ROS 2 network:
|
- 搜索 -- 使用此选项搜索包含一个或所有指定输入的元素。使用逗号分隔的关键字并按 ENTER 键触发搜索。要移除应用的搜索过滤器并将网络图恢复为原始视图,请清除搜索栏中的文本并按 ENTER 键。您也可以右键单击并复制名称来选择关键字,以便在大型网络中搜索元素,这在 “与网络图互动 ”一节中讨论过。
四、安排网络布局
- 布局 -- 使用此功能可使用其中一个选项来安排网络图布局。
Name | Description | Applications | View |
---|---|---|---|
klay | 层次式布局可创建有条理的图元素排列,同时最大限度地减少交叉并确保可读性。 | 当网络图中的多个元素源自一个元素时,klay 布局可最大限度地减少边交叉。使用这种方法可以有效地组织图形,增强可读性和结构性。 | |
dagre | 有向布局,将图元素及其边从一个层级到下一个层级创建成倒 V 形。 | 当网络图中的元素有明确的流动方向时,dagre 布局尊重信息流或阶段进展。 使用这种方法,可以清晰直观地显示元素之间的方向关系和依赖关系。 | |
breadthfirst | 分层布局,根据对图形进行广度优先搜索所生成的层级来组织图形元素。 | 广度优先布局是指当图形较大,可能导致元素之间过度重叠时,从指定的根元素开始逐层或逐层排列图形元素。 使用这种方法可将所有元素从根元素开始水平排列在同一深度,这有助于了解图形结构的广度或深度。 | |
cose | 强制定向布局强调组和树状结构,以尽量减少边交叉并均匀分布图元素。 | 这种布局通过空间上的接近性来强调图形中的元素分组,对于具有嵌套结构的复合图形尤其有效。 使用这种布局可以直观地区分复杂网络中图形元素之间的集群和关系。 | |
circle | 将图形元素组织成圆形的几何布局。默认情况下,元素从 12 点钟位置开始顺时针排列,排列顺序与元素传递到布局的顺序一致。 | 圆布局将图形元素沿着圆周等距排列,并突出显示连接到不同元素的边的密度,尤其是当边半透明时。 使用这种方法可以直观地显示整体连通性,并根据图中边缘的集中程度识别模式或集群。 | |
grid | 默认布局,通过将所有元素定位在原点,轻松显示图形中的所有元素。 | 网格布局可直观地验证图形是否已正确加载,以及图形元素是否以结构化和统一的方式组织。 使用这种布局可以快速识别数据中的异常或布局问题,从而更容易确保图表可视化的完整性和完备性。 | |
concentric | 几何布局,根据指定的指标(如层次级别或连接度)将元素组织成同心圆,将指标值最高的元素放在最内圈,每向外一圈,其指标值依次递减。 | 同心布局可以在需要清晰显示围绕中心点的层次或层级时,突出元素的相对重要性。 使用这种布局可以有效地强调网络中的中心性和层次结构,便于直观地理解图元素之间的关系和重要性。 |
- 名称空间 -- 使用该选项可根据节点、主题、服务和操作的名称空间将其组织成群或组,这些节点、主题、服务和操作执行类似的功能,但在应用程序的不同上下文或区域中运行。
- 名称空间是从节点、主题、服务和操作的名称中提取的层次前缀,用于将这些元素中的组件从逻辑上组织和分类为群集或组。这些群组可以相互嵌套,从而实现多级组织。名称空间的深度决定了聚类的粒度。
五、导出网络快照
要将 ROS 2 网络图快照导出为图像,请单击应用程序工具条上的 “导出”。
六、示例
6.1 创建并可视化用于机器人导航的 ROS 2 网络
本示例展示了如何建立用于机器人导航的基本 ROS 2 网络,并使用 ROS 2 网络分析器应用程序可视化所有节点信息。
定义动作类型、主题类型、服务类型和域 ID,以初始化用于机器人导航的 ROS 2 网络。
actionType = 'control_msgs/PointHead';
topicType = 'geometry_msgs/Twist';
svcType = 'nav_msgs/GetMap';
domainId = 0;
使用指定的域 ID 为 Turtlebot 机器人创建 ROS 2 节点。
turtleBotNode = ros2node('/turtle_bot_node', domainId);
初始化动作服务器,以处理路径跟踪请求。
actionServer = ros2actionserver(turtleBotNode,'/path_follow',actionType, ...ExecuteGoalFcn=@(~,~,~,defaultResult) deal(defaultResult, true));
从 MATLAB® 工具条的 “应用程序 ”选项卡中打开 “ROS 2 网络分析器 ”应用程序,可视化 ROS 2 网络。
您会看到,默认情况下已选中 “无法连接节点”、“死链接 ”和 “叶子主题 ”过滤器。也请选中其余过滤器,以全面查看 ROS 2 网络。
为 GPS 传感器创建一个 ROS 2 节点,并建立一个能响应 GPS 定位数据的服务服务器。
gpsNode = ros2node('/gps_sensor_node',domainId);
srv = ros2svcserver(gpsNode,'/get_gps_location',svcType,@(~,resp)resp);
使用指定的域 ID 创建一个 ROS 2 节点,用于处理路径规划任务。
plannerNode = ros2node('/path_planner_node',domainId);
建立服务客户端以获取规划器节点上的 GPS 位置,并建立行动客户端以发送路径跟踪请求。
svcClient = ros2svcclient(plannerNode,'/get_gps_location',svcType);
actClient = ros2actionclient(plannerNode, '/path_follow',actionType);
创建一个订阅器,用于监听速度指令,以控制机器人的运动。
sub = ros2subscriber(plannerNode,'/cmd_vel',topicType);
设置一个通过“/cmd_vel ”主题发送命令的发布者。
pub = ros2publisher(turtleBotNode,'/cmd_vel',topicType);
现在打开 ROS 2 Network Analyzer 应用程序界面,点击 “刷新 ”以显示更新后的 ROS 2 网络。
使用最小地图在网络图中平移,以便更好地查看与 /turle_bot_node 相关的默认服务。您还可以单击并拖动这些元素以方便查看可视化窗口。要将网络图恢复到初始视图,请单击自动排列。
要使用特定关键字(如海龟)搜索所有元素,请在搜索框中输入海龟,然后按 ENTER 键。您也可以输入多个以逗号分隔的关键字,以可视化与所有指定关键字相关的元素。
要根据元素的命名空间将所有元素归类为簇或组,请使用命名空间。命名空间的深度决定了聚类的粒度。例如,将命名空间字段设为 1 会将所有元素分为 3 个群组 - /turtle_bot_node、/path_follow 和 /path_planner_node。
要增加聚类的粒度,可将命名空间设置为更高的值,如 2。 这样就可通过嵌套聚类(如 /path_follow 下的 /path_follow_action )增加另一级粒度。
七、限制
- 服务质量(QoS)信息仅适用于主题。
- 无法检索 QoS 历史记录。