主要内容

在Simulink®中的路径跟随和障碍物回避

使用Simulink在跟随差动驱动机器人的路径时避开障碍物。本例使用ROS从基于MATLAB®的模拟器发送和接收信息。您可以用其他基于ros的模拟器替换该模拟器,如Gazebo®。

先决条件:从Simulink®连接到一个支持ros的机器人(ROS工具箱)

简介

本例使用了一个实现路径跟踪控制器的模型,该控制器具有避障功能。控制器接收来自模拟机器人的机器人姿态和激光扫描数据,并发送速度命令,驱动机器人在给定的路径上运行。您可以在模型运行时调整参数,并观察对模拟机器人的影响。

启动一个机器人模拟器

启动一个简单的基于matlab的模拟器:

  • 类型rosinit(ROS工具箱)在MATLAB命令行。的网络地址(URI)创建一个本地ROS主节点http://localhost:11311

  • 类型ExampleHelperSimulinkRobotROS(“ObstacleAvoidance”)以启动机器人模拟器。这将打开一个图形窗口:

该基于matlab的仿真器是一种基于ros的差动机器人仿真器。模拟器接收和发送关于以下主题的消息:

  • 它以类型消息的形式接收速度命令geometry_msgs /扭,在/ mobile_base /命令/速度主题

  • 它发送地面真相机器人姿势信息,作为类型的消息nav_msgs /测程法,/ ground_truth_pose主题

  • 它以类型消息的形式发送激光距离数据sensor_msgs /提升,/扫描主题

用Gazebo替换基于matlab的模拟器:

您也可以使用Gazebo模拟器模拟TurtleBot®。看到开始与露台和模拟乌龟机器人(ROS工具箱)参阅设置Gazebo环境的说明。看到从Simulink®连接到一个支持ros的机器人(ROS工具箱)参阅如何连接到Gazebo的网络。启动虚拟机后,启动露台的办公室世界使用桌面快捷方式。在Gazebo模拟器中模拟的Turtlebot,接收速度命令,作为类型的消息geometry_msgs /扭,在/ cmd_vel的话题。你还需要一个定位算法来获得机器人在Gazebo中的位置。看到蒙特卡罗定位算法在乌龟机器人定位中的应用参阅在Gazebo环境中寻找机器人位置的说明。

打开现有的模型

模型实现了基于避障算法的路径跟踪。该模型分为四个子系统。以下部分将解释每个子系统。

open_system (“pathFollowingWithObstacleAvoidanceExample”);

过程的输入

“输入”子系统处理算法的所有输入。

有两个订阅者从模拟器接收数据。的上发送的消息/扫描的话题。然后对激光扫描信息进行处理,提取扫描范围和角度。的上发送的消息/ ground_truth_pose的话题。的(x, y)然后从姿态信息中提取机器人的位置和偏航方向。

路径被指定为一组路径点。本例使用3x2常量输入。你可以指定任意数量的路径点作为一个Nx2数组。要在运行时更改路径的大小,可以使用可变大小的信号,也可以使用固定大小的信号填充。此示例使用固定大小的输入未知路径点的填充。

open_system (“pathFollowingWithObstacleAvoidanceExample /输入”“标签”);

计算路径跟踪的速度和方向

“计算速度和路径跟随的方向”子系统计算线速度和角速度命令和目标移动方向使用单纯的追求块。纯追求方块位于移动机器人算法sub-library内机器人系统工具箱选项卡。或者,你也可以打字robotalgslib的命令行打开移动机器人算法sub-library。

你还需要在机器人到达目标点时停止它。在本例中,目标是路径上的最后一个路径点。该子系统还将机器人当前姿态与目标点进行比较,以确定机器人是否接近目标点。

open_system ('pathFollowingWithObstacleAvoidanceExample/计算速度和路径跟踪的方向'“标签”);

调整速度以避开障碍物

“调整速度以避免障碍”子系统计算调整线性和角速度由路径追随者计算。

矢量场直方图块使用激光距离读数来检查使用Pure Pursuit块计算的目标方向是否基于激光扫描数据无障碍。如果目标方向上有障碍,矢量场直方图块计算一个最接近目标方向且无障碍的转向方向。向量场直方图块也位于移动机器人算法sub-library。

转向方向为值,当传感器视场中没有无障碍方向时。在这种情况下,需要一个恢复运动,机器人在现场转向,直到有一个无障碍的方向。

该子系统根据转向方向计算线速度和角速度的调整。

open_system ('pathFollowingWithObstacleAvoidanceExample/调整速度以避免障碍'“标签”);

发送速度命令

“输出”子系统发布线速度和角速度来驱动模拟机器人。它将使用Pure Pursuit路径跟踪算法计算的速度与使用矢量场直方图避障算法计算的调整相加。最终速度设定在geometry_msgs /扭消息和发表的主题/ mobile_base /命令/速度

这是一个已启用的子系统,当接收到新的激光消息时触发。这意味着只有当新的传感器信息可用时,速度命令才会发布。这可以防止机器人在接收传感器信息延迟的情况下撞到障碍物。

open_system (“pathFollowingWithObstacleAvoidanceExample /输出”“标签”);

注意:若要使用Gazebo模拟器,请选择/ cmd_vel发布块中的主题。

配置并运行模型

配置并运行您的模型,并在模拟器中观察机器人的运动。

  • 设置仿真停止时间为

  • 点击Play按钮开始模拟。观察机器人在模拟中开始移动。

  • 当模拟运行时,打开“计算速度和路径跟踪的方向”子系统,并双击单纯的追求块。将所需线速度参数更改为0.5.观察机器人速度的增加。

  • 默认路径[2 2;8 8]通过障碍。观察机器人绕着障碍物绕路到达路径的终点。

  • 打开“输入”子系统并双击锚点的输入块。更改常量值[2 2;8 8;楠楠][2 2;8 8;12 5].注意,机器人继续沿着新的路径,到达新的目标点(5) 12同时避免障碍。

  • 要停止模拟,请单击stop按钮。

另请参阅

Baidu
map