在Simulink®中的路径跟踪与障碍物躲避金宝app
使用Si金宝appmulink避免障碍,同时遵循一个差动驱动机器人的路径。本例使用ROS从基于MATLAB®的模拟器发送和接收信息。您可以将模拟器替换为其他基于ros的模拟器,如Gazebo®。
先决条件:从Simulink®连接到一个支持ros的机器人金宝app(ROS工具箱)
简介
本例使用了一个模型,该模型实现了具有避障功能的路径跟随控制器。控制器接收来自模拟机器人的机器人姿态和激光扫描数据,并发送速度命令,以在给定的路径上驱动机器人。您可以在模型运行时调整参数,并观察对模拟机器人的影响。
开始一个机器人模拟器
开始一个简单的基于matlab的模拟器:
类型
rosinit
(ROS工具箱)在MATLAB命令行。这将创建一个具有网络地址(URI)的本地ROS主服务器http://localhost:11311
.类型
ExampleHelper金宝appSimulinkRobotROS(“ObstacleAvoidance”)
启动机器人模拟器。这将打开一个图形窗口:
基于matlab的差动驱动机器人模拟器是基于ros的差动驱动机器人模拟器。模拟器接收和发送关于以下主题的消息:
它接收速度命令,作为类型消息
geometry_msgs /扭
,在/ mobile_base /命令/速度
主题它发送地面真实的机器人姿态信息,作为类型的消息
nav_msgs /测程法
,到/ ground_truth_pose
主题它以类型消息的形式发送激光距离数据
sensor_msgs /提升
,到/扫描
主题
将matlab模拟器替换为Gazebo:
您还可以使用模拟TurtleBot®Gazebo模拟器。看到开始凉亭和模拟乌龟机器人(ROS工具箱)查阅设置凉亭环境的指引。看到从Simulink®连接到一个支持ros的机器人金宝app(ROS工具箱)查阅如何设置与凉亭的网络连接。启动虚拟机后,启动露台的办公室世界使用桌面快捷方式。Gazebo模拟器中的模拟Turtlebot接收速度命令,作为类型消息geometry_msgs /扭
,在/ cmd_vel
的话题。你还需要一个定位算法来获得机器人在凉亭中的位置。看到使用蒙特卡洛定位算法对龟机器人进行定位查阅在凉亭环境中寻找机器人位置的指引。
开放现有模式
这模型采用避障算法实现路径跟踪。该模型分为四个子系统。下面几节将解释每个子系统。
open_system (“pathFollowingWithObstacleAvoidanceExample”);
过程的输入
“输入”子系统处理算法的所有输入。
有两个订阅者从模拟器接收数据。上发送的消息/扫描
的话题。然后对激光扫描信息进行处理,提取扫描范围和角度。上发送的消息/ ground_truth_pose
的话题。的(x, y)
然后从姿态信息中提取机器人的位置和偏航方向。
路径被指定为一组路径点。这个例子使用了一个3x2常量输入。你可以指定任意数量的路径点作为Nx2数组。要在运行时更改路径的大小,可以使用可变大小的信号或使用固定大小的信号南
填充。这个例子使用固定大小的输入南
填充未知的路径点。
open_system (“pathFollowingWithObstacleAvoidanceExample /输入”,“标签”);
计算速度和路径跟随的方向
“计算速度和路径跟踪的方向”子系统计算线性和角速度命令和目标移动方向使用单纯的追求块。纯粹追求方块位于移动机器人算法的子图书馆机器人系统工具箱选项卡。或者,你也可以打字robotalgslib
命令行上打开移动机器人算法sub-library。
你还需要在机器人到达目标点时停止它。在本例中,目标是路径上的最后一个路径点。该子系统还将机器人当前姿态与目标点进行比较,判断机器人是否接近目标。
open_system ('pathFollowingWithObstacleAvoidanceExample/计算速度和路径跟随的标题',“标签”);
调整速度以避开障碍物
“调整速度以避免障碍物”子系统计算路径跟踪器计算的线性和角速度的调整。
矢量场直方图块使用激光距离读数来检查使用纯追逐块计算的目标方向是否是基于激光扫描数据的无障碍方向。如果目标方向上有障碍物,矢量场直方图块计算最接近目标方向且无障碍物的转向方向。向量场直方图块也位于移动机器人算法sub-library。
转向方向为南
当传感器视场中没有无障碍方向时的值。在这种情况下,需要一个恢复运动,机器人在原地转弯,直到有一个无障碍的方向。
该子系统根据转向方向计算线速度和角速度的调整量。
open_system (“pathFollowingWithObstacleAvoidanceExample/调整速度以避免障碍物”,“标签”);
发送速度命令
“输出”子系统发布线速度和角速度来驱动模拟机器人。它将使用纯追踪路径跟踪算法计算的速度与使用矢量场直方图避障算法计算的调整相加。最终速度设定在geometry_msgs /扭
讯息并发表在主题上/ mobile_base /命令/速度
.
这是一个启用的子系统,当接收到新的激光消息时触发。这意味着只有当新的传感器信息可用时,才会发布速度命令。这可以防止机器人在接收传感器信息延迟的情况下撞击障碍物。
open_system (“pathFollowingWithObstacleAvoidanceExample /输出”,“标签”);
注意:若要使用凉亭模拟器,请选择/ cmd_vel
主题。
配置并运行模型
配置和运行您的模型,并在模拟器中观察机器人的运动。
设置仿真停止时间为
正
.点击Play按钮开始模拟。观察机器人在模拟中开始移动。
在模拟运行时,打开“计算速度和路径跟随方向”子系统,双击单纯的追求块。将所需的线速度参数更改为
0.5
.观察机器人速度的增加。默认路径
[2 2;8 8]
通过一个障碍。观察机器人绕过障碍物到达路径的终点。打开“输入”子系统,双击锚点的输入块。将常量值从
[2 2;8 8;NaN NaN]
来[2 2;8 8;12 5]
.注意,机器人继续沿着新的路径前进并到达新的目标点(5) 12
同时避开障碍。要停止模拟,请单击“停止”按钮。
另请参阅
从Simulink生成一个独立的ROS节点金宝app(ROS工具箱)
不同复杂环境下的路径规划(机器人系统工具箱)