这个例子展示了如何使用Simulink在Gazebo联合仿真中控制差动驱动机器人。机器人通过读取姿态和车轮编码器的位置来跟踪一组航路点,并生成扭矩控制命令来驱动它。金宝app
要下载本例中使用的虚拟机,请参见带有ROS和Gazebo的虚拟机。
有关Gazebo联合模拟和首次连接的介绍,请参阅在Simulink和Gazebo之间执行联合仿真金宝app。
打开从安装的虚拟机带有ROS和Gazebo的虚拟机。
这个例子使用了VM中给定的一个世界,differentialDriveRobot.world
,作为具有默认物理设置的简单地平面。世界使用先锋机器人,默认控制器被移除,因此内置控制器不会与Simulink提供的扭矩竞争。先锋机器人在默认的露台安装中可用。Gazebo插件引用了连接Simulink所需的插件,如中所述金宝app在Simulink和Gazebo之间执行联合仿真金宝app。
双击露台差动驱动机器人偶像
另一种选择,在终端中运行以下命令:
cd/home/user/src/GazeboPlugin/export-export-SVGA_VGPU10=0 gazebo../world/differenticsdriverobot.world
如果Gazebo模拟器无法打开,您可能需要重新安装插件。看见安装露台插件手动在里面在Simulink和Gazebo之间执行联合仿真金宝app。
打开模型:
open_system (“GazeboDifferentialDriveControl”)
该模型有四个部分:
露台Pacer
读取传感器数据
控制移动机器人
向露台发送驱动数据
本节建立与露台的连接。双击露台Pacer块打开其参数,然后单击配置露台网络和仿真设置链接这将打开一个对话框。
指定IP地址你的虚拟机。缺省情况下,Gazebo连接在14581
端口。单击测验按钮以验证与露台的连接。
如果测试不成功,一定要检查说明书在Simulink和Gazebo之间执行联合仿真金宝app并确保露台已正确配置,相关世界已启动并运行。
传感器从Gazebo输出读取的传感器数据,并将其传递到相应的Simulink块。XY图形绘制当前机器人位置,姿势数据保存到模拟输出中。金宝app
这个阅读露台传感器子系统提取机器人的姿态和车轮传感器数据。姿势数据是xy-坐标和用于方向的四元素四元数。车轮转速是根据车轮旋转时车轮位置的变化率计算的。
这个移动机器人控制Section接受一组目标路径点、当前姿态和当前车轮速度,并输出车轮扭矩,以使机器人遵循遵循路径点的路径。
有三个主要组成部分。
这个单纯的追求块是一个控制器,指定在给定当前姿势的情况下,以固定速度跟随航路点所需的车辆速度和航向角速度。
这个设置车轮速度函数块利用差动驱动机器人的运动学,将车辆速度和航向角速度转换为左右轮速度:
和 是左右车轮速度, 是车速,, 为飞行器的航向角速度, 是轨道宽度,以及 是车轮半径。此外,此MATLAB®功能还包括调节车轮速度的代码。自从单纯的追求在MATLAB函数块中,有两个if语句。当机器人处于一定距离阈值范围内时,第一种方法以与目标距离成比例的速度减慢速度。第二个if语句在机器人处于严格的阈值范围内时停止机器人。这有助于机器人慢慢停下来。
最后是先锋轮控制子系统使用比例控制器将所需的车轮转速转换为扭矩。
模型的最后一部分采用控制器产生的扭矩命令,并使用来自金宝appGazebo联合仿真库。
在该块中的每个子系统内公交车分配块用于将接头扭矩分配给正确的接头。
例如,在左轮转台扭矩指令子系统,如上图所示,是一个露台空白信息与ApplyJointTorque
命令类型用于指定总线类型。控件提供了模型和联合名称露台选择实体块,链接到与露台世界中的左轮关联的关节,左车轮铰链
。力矩作用于整个步长时间(0.01秒),单位为纳秒,因为这些输入必须以整数形式提供。总线的输出被传递给总线露台使用命令块
要运行模型,请初始化航路点并设置采样时间:
航路点=[0;42;37;-36];采样时间=0.01;
点击玩按钮或使用模拟
命令运行模型。在执行过程中,机器人应在凉亭内移动XY图更新在Simulink中观察到的姿势。金宝app
这些图形绘制了一组航路点和机器人的最终执行路径。