主要内容

用Simulink控制凉亭中差动驱动机器人

本实例展示了如何使用Simulink在Gazebo联合仿真中控制差动驱动机器人。机器人通过读取姿态和轮编码器的位置来跟踪一组路径点,并生成扭矩控制命令来驱动它。

运行虚拟机

按照下面的说明在Simulink和Gazebo之间进行联合仿真下载带有Gazebo的虚拟机。

露台的世界

这个例子使用了虚拟机中的一个世界,differentialDriveRobot.world,作为具有默认物理设置的简单接地面。这个世界使用的先锋机器人去掉了默认控制器,这样内置控制器就不会与Simulink提供的扭矩相竞争。先锋机器人在默认的Gazebo安装中可用。Gazebo插件引用连接到Simulink所需的插件,详见在Simulink和Gazebo之间进行联合仿真

双击凉亭差动驱动机器人图标。

或者,在终端中运行以下命令:

cd /home/user/src/ gazeboplugin /export export SVGA_VGPU10=0 gazebo .

如果Gazebo模拟器无法打开,您可能需要重新安装插件。看到安装露台插件手动在Simulink和Gazebo之间进行联合仿真

模型概述

打开模型:

open_system (“GazeboDifferentialDriveControl”

该模型有四个部分:

  • 露台Pacer

  • 读取传感器数据

  • 控制移动机器人

  • 发送驱动数据到凉亭

露台Pacer

本节建立到Gazebo的连接。双击露台Pacer块以打开其参数,然后单击配置Gazebo网络和模拟设置链接。这将打开一个对话框。

指定IP地址你的虚拟机。默认情况下,Gazebo连接在14581端口。单击测试按钮以验证与Gazebo的连接。

如果测试不成功,请务必检查说明在Simulink和Gazebo之间进行联合仿真并确保Gazebo配置正确,相关世界正常运行。

露台传感器输出

传感器从Gazebo输出读取的传感器数据,并将其传递到适当的Simulink块。XY图绘制出当前机器人的位置,姿态数据保存到仿真输出中。

读露台传感器子系统提取机器人的姿态和车轮传感器数据。姿势数据是xy-坐标和用于定位的四元四元数。车轮速度是根据车轮位置的变化率计算的,因为他们旋转。

移动机器人控制

移动机器人控制Section接受一组目标路径点、当前姿态和当前车轮速度,并输出所需的车轮扭矩,以使机器人遵循路径点。

有三个主要组成部分。

单纯的追求Block是一个控制器,它指定车辆的速度和车辆的航向角速度,以固定的速度跟随路径点,给定当前的姿势。

组轮速度MATLAB函数块利用差动驱动机器人的运动学,将车辆速度和航向角速度转换为左右轮速度:

ϕ ˙ l 1 r v - d 2

ϕ ˙ R 1 r v + d 2

ϕ ˙ l 而且 ϕ ˙ R 是左右轮的速度, v 是车速, 是车辆航向角速度, d 是轨道宽度,和 r 是车轮半径。此外,这个MATLAB®函数包括代码油门车轮速度。自单纯的追求块始终使用固定的速度,在MATLAB函数块中,有两个if语句。当机器人在一定距离阈值内时,第一种方法以与目标距离成正比的速率减慢速度。第二个if-语句在处于一个较紧的阈值内时停止机器人。这有助于机器人慢慢停下来。

最后,先锋轮控制子系统转换所需的车轮速度到力矩使用比例控制器。

执行器扭矩命令

模型的最后一部分采用控制器产生的扭矩命令,并使用模块将其发送到Simulink露台联合仿真库。

在这个块中的每个子系统内部,有一个总线分配块用于将关节扭矩分配到正确的关节。

例如,在左轮凉亭转矩指令子系统,如上所示,a露台空白信息ApplyJointTorque命令类型用于指定总线类型。提供的模型和联合名称露台选择实体块,它与Gazebo世界中与左轮相关的关节相连,left_wheel_hinge.扭矩应用于整个步骤时间,0.01秒,以纳秒为单位指定,因为这些输入必须作为整数提供。总线的输出被传递给露台使用命令块。

模拟机器人

要运行模型,初始化路径点并设置样本时间:

路径点= [0 0;4 2;3 7;3 6];sampleTime = 0.01;

点击按钮或使用sim卡命令运行模型。在执行过程中,机器人应该在Gazebo中移动XY情节更新在Simulink中观察到的姿势。

图中绘制了机器人的路径点集和最终执行路径。

Baidu
map