控制差分驱动机器人在凉亭的Simulink万博1manbetx

此示例示出了如何控制利用Simulink中凉亭协同仿真的差分驱动器的机器人。万博1manbetx通过阅读姿势和轮编码器的位置的机器人遵循一组路点,并且产生转矩的控制命令,以驱动它。

要下载本例中使用的虚拟机(VM),请参见带有ROS 2 Bouncy和Gazebo的虚拟机

有关露台联合模拟和首次连接的介绍,请参见Simulink和凉亭之间进行协同仿真万博1manbetx

运行VM

从打开安装在虚拟机带有ROS 2 Bouncy和Gazebo的虚拟机

凉亭世界

这个例子使用VM中给定的一个世界,差速驱动机器人世界作为一个简单的地平面默认物理设置。全世界都在使用先锋机器人删除默认的控制器,使内置的控制器不与Simulink中提供的扭矩竞争。万博1manbetx先锋机器人在默认安装凉亭提供。凉亭插件引用用于连接到Simulink软件插件,如详细万博1manbetxSimulink和凉亭之间进行协同仿真万博1manbetx

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

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

CD /家庭/用户/ src目录/ GazeboPlugin /导出SVGA_VGPU10 = 0凉亭../world/differentialDriveRobot.world

模型概述

打开模型:

开放式系统('GazeboDifferentialDriveControl'

该模型有四个部分:

  • 露台步行者

  • 读取的传感器数据

  • 控制移动机器人

  • 发送驱动数据到露台

露台步行者

这一部分建立了与露台的连接。双击露台步行者阻止打开它的参数,然后点击配置露台网络和模拟设置链接。这将打开一个对话框。

指定IP地址为你的虚拟机。默认情况下,露台连接到14581港口。单击测试按钮来验证到凉亭的连接。

如果测试不成功,请确保检查中的说明Simulink和凉亭之间进行协同仿真万博1manbetx并确保凉亭被正确配置和相关的世界是启动和运行。

露台传感器输出

传感器输出读取凉亭传感器数据,并将其传递到适当的Simulink模块。万博1manbetx的XY曲线图绘制的当前的机器人位置,并且姿势数据被保存到模拟输出。

读凉亭传感器子系统提取机器人姿态和车轮传感器数据。姿势数据是XY坐标 - 和定向的四元四元数。根据车轮位置的变化率,因为它们转动车轮转速计算。

移动机器人控制

移动机器人控制区段接受一组目标航路点、当前姿态和当前轮速,并输出使机器人跟随跟踪航路点的路径所需的轮转矩。

主要有三个部分。

纯粹的追求块是一个控制器,它指定车辆速度和航向跟随航点以固定的速度所需要的车辆的角速度,考虑到当前姿势。

设置轮速MATLAB功能块转换车辆速度和航向角速度到左,右车轮的速度,使用差分驱动机器人的运动学:

ϕ ˙ 大号 = 1 [R v - d 2

ϕ ˙ [R = 1 [R v + d 2

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

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

执行器的扭矩命令

模型的最后一部分接受控制器生成的转矩命令,并使用来自万博1manbetx凉亭协同仿真库。

里面每个在此块子系统,一个总线分配块被用于将关节扭矩分配到正确的接头。

例如,在左轮凉亭扭矩命令子系统,如上图所示,一个露台空白留言ApplyJointTorque命令类型用于指定总线类型。模型和联合名称由露台精选实体块,其被连接到与左车轮在凉亭世界相关联的关节,left_wheel_hinge. 扭矩应用于以纳秒为单位指定的整个步进时间(0.01秒),因为这些输入必须以整数形式提供。总线的输出被传递给露台应用命令块。

模拟机器人

运行模型,初始化航点,并设置采样时间:

航点= [0 0;4 2;3 7;-3 6];sampleTime = 0.01;

请点击播放按钮或使用SIM卡运行模型的命令。在执行期间,机器人应该在露台上移动,并且XY坐标图更新在Simulink中观察到的姿势。万博1manbetx

附图绘制组路点和机器人的最终执行路径。