主要内容

在Simulink和Gazebo中联合仿真控制机械手机器人金宝app

利用Simulink和Gazebo联合仿真实现机械臂的控制仿真。金宝app本例使用Simulink™对机器人金宝app行为建模,生成控制命令,将这些命令发送到Gazebo,并控制Gazebo仿真的速度。

  • 露台Pacer以与Simulink相同的速度进行凉亭模拟,使命令在模拟凉亭中的物理动态时能够准确执行。金宝app

  • 露台读而且凉亭应用命令block用于MATLAB®和Gazebo之间的通信。

  • gzlinkgzjoint,gzworld函数提供了对模型参数和查询的方便访问。

本例使用一个Simulink模型来控制Universal Robotics UR10机械手的位置,详细回顾了每个组件及其配置。金宝app该模型利用逆运动学方法将末端执行器姿态与关节位置联系起来,然后应用带有动态补偿前馈项的关节空间PD控制器对运动进行控制。

有关为本例设置环境的详细信息,请参见基于Gazebo和Simulink的机械臂金宝app机器人联合仿真

用机器人模型和插件建立凉亭

若要设置Gazebo世界,安装必要的插件,并使用MATLAB和simulink测试连接,请参阅金宝app用机器人模型和插件建立凉亭部份基于Gazebo和Simulink的机械臂金宝app机器人联合仿真的例子。

凉亭的开放世界

在凉亭机的终端运行以下命令打开世界:

cd /home/user/src/ gazeboplugin /export export SVGA_VGPU10=0 gazebo /home/user/worlds/ ur10basicwithplugin。世界——详细

凉亭展示了机器人和世界上任何其他物体。如果Gazebo模拟器无法打开,您可能需要重新安装插件。看到安装Gazebo Plugin手动在Simulink和Gazebo之间进行联合仿真金宝app

连接到凉亭

接下来,初始化到MATLAB和Simulink的Gazebo连接。金宝app指定IP地址和端口号14581,这是Gazebo插件的默认端口。

ipGazebo =“192.168.116.162”将此替换为凉亭机器的IPgzinit (ipGazebo, 14581);

装载机器人模型

该模型使用了一个通用的UR10机器人,由loadrobot创建。Gazebo模型和机器人模型匹配,因为它们来自相同的源存储库。有关更多信息,请参见基于Gazebo和Simulink的机械臂金宝app机器人联合仿真

机器人=装载机器人(“universalUR10”“重力”,[0 0 -9.81],“DataFormat”“列”);showdetails(机器人)
-------------------- 机器人:(10个Body) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) ------------ ---------- ---------- ---------------- ---------------- 1 base_link world_joint fixed world(0) base(2) shoulder_link(3) 2 base base_link-base_fixed_joint fixed base_link(1) 3 shoulder_link shoulder_pan_joint revolute base_link(1) upper_arm_link(4) 4 upper_arm_link shoulder_lift_joint revolute shoulder_link(3) forearm_link(5) 5 forearm_link elbow_joint revolute upper_arm_link(4) bracelet _1_link(6) 6腕表_1_link腕表_关节转动前臂链接(5)腕表_link(7) 7腕表_link腕表_关节转动腕表_link(6)腕表_link(8) 8腕表_link腕表_关节转动腕表_link(7) ee_link(9) tool0(10) 9 ee_link ee_fixed_关节固定腕表_3_link(8) 10 tool0腕表_link- tool0_fixed_关节固定腕表_3_link(8) --------------------

设置机器人初始配置。

Q0 = [0 -70 140 0 0 0]' * pi/180;

负载Sim金宝appulink模型

gazeboCosimControl模型中使用滑块控制机械手的末端执行器位置用户输入:终端执行器部分。的逆运动学子系统生成实现所需位置的联合配置。然后,关节控制器子系统为每个关节产生力矩以达到这个位置

打开模型。

open_system (“gazeboCosimControl”);

设置控制器和轨迹采样时间

Ts = 0.01;Ts_trajectory = 0.05;

控制器采样时间短,保证良好的性能。轨迹采样时间较长,以保证仿真速度,这在摄像机传感器、逆运动学、轨迹生成等高级别任务中较为典型。

理解模型构造

Simu金宝applink模型由四个部分组成:

  • 用户输入:使用滑块提供所需的机器人末端执行器位置的输入。

  • 控制:使用逆运动学将末端执行器位置映射到关节位置,并使用计算扭矩控制器控制关节位置

  • 露台Pacer:维护与Gazebo的连接,以确保Simulink模型执行两个模拟。金宝app

  • 露台机器人:向凉亭世界发送命令,并从凉亭世界接收命令。

下面将更详细地概述这些部分。

用户输入

用户输入有6个控制末端执行器位置的滑块:3个控制空间中的X、Y和Z位置,3个控制方向。

控制

控制部分将所需的末端执行器姿态转换为关节扭矩。首先,逆运动学子系统计算满足目标末端执行器姿态的关节位置。接下来,关节控制器子系统根据关节参考位置、速度、加速度和机器人当前状态产生执行器输入力矩。状态包含瞭望台输出的测量位置和速度。

逆运动学子系统

逆运动学计算关节位置对应的末端执行器姿态(位置和方向)给出一个初始猜测。为了快速收敛,可以设置单位时延的初始条件。在这个子系统中,权重是统一的,这意味着解决方案应该同等重视实现所需姿态中的所有位置和方向。

联合控制子系统

在本例中,关节控制器使用反馈和前馈项。重力力矩和速度的乘积结合起来形成前馈项。比例导数(PD)控制器产生反馈项。有关关节控制器的详细信息,请参见使用机器人机械手块执行安全轨迹跟踪控制

露台Pacer

凉亭步行者块通过与Simulink步骤同步步进凉亭模拟来确保与凉亭的联合模拟。金宝app这对于像这个模型这样的应用程序非常重要,在这个模型中,控制器用于直接控制机器人在凉亭世界中的位置。关节测量和扭矩命令必须同步,以确保仿真反映实际行为。

在块掩码中,指定采样时间为Ts.属性测试凉亭连接配置Gazebo网络和仿真设置链接。此连接已使用gzinit

露台模型

凉亭模型子系统包含用于与凉亭世界通信的块。在这种情况下,控制器对每个关节施加扭矩,并读取关节位置和速度。

施加关节扭矩

对于每个关节,扭矩必须施加在<联合名称>发射到凉亭区域的子系统是凉亭模型子系统。例如,对于肩盘接头,送肩计划的工具都包含在子系统中套肩盘子系统。

这些子系统中的每一个都使用一个总线分配块,其输入定义了总线的类型、模型和持续时间的详细信息以及生成的命令。

凉亭空白消息块将总线类型定义为适当类型的Gazebo消息格式。在块参数对话框中,从命令类型列表中选择“ApplyJointTorque”。需要该块来确保使用了正确的总线模板,即端口是总线分配块具有正确的值。

凉亭选择实体块选择此消息将应用到的对象。在这种情况下,由于施加了扭矩,“实体”是a关节。由于该子系统将向肩关节施加扭矩,因此从实体类型列表中选择Gazebo世界中相应的关节。只要建立了到Gazebo世界的连接,这个列表就会自动填充。如果连接丢失,请单击“配置凉亭网络和模拟设置”链接重新建立,或使用gzinit命令行接口。凉亭世界必须为这次行动的成功开放。

凉亭应用命令块获取消息的内容,并将其发送到凉亭服务器。打开块对话框参数,选择命令类型参数,并选择ApplyJointTorque将相应的命令发送到Gazebo。

其余的输入控制施加力的量和持续时间。的努力import指定关节扭矩量。的指数输入指示了应施加扭矩的轴。因为每个转动关节只有1个自由度,所以这个值应该设为uint32 (0)表示第一个轴。最后,持续时间输入指定施加扭矩的持续时间,分为秒和纳秒。例如,如果持续时间是1.005秒,那么作为一个总线,它将是1秒和5,000,000纳秒。它们被分开以提高精度。在这种情况下,控制器对采样时间的长度施加扭矩,之前指定为0.01秒,或1e7纳秒。因此,第一个输入是0(0秒),第二个输入是1e7。

露台模型子系统包括与其他5个关节相对应的其他5个子系统,它们以相同的方式配置。

测量关节状态

凉亭模型接口的第二部分要求使用露台读每个关节块。例如,肩盘接头的挡块如下所示。

露台读block读取来自Gazebo服务器的消息。在方块对话框中,点击题目旁边的“Select..”,选择要读取的题目,并选择相应的测量关节值,/露台/ ground_truth / joint_state / ur10 / shoulder_pan_joint.该消息选择精确的地面真值,尽管也可以在凉亭放置传感器并从这些传感器读取。

使用总线选择器仅从消息中选择相关值。在这种情况下,只有从Gazebo模型测量的位置,最终反馈给控制器。

本节还读取了Gazebo中红框的价值。虽然也可以使用类似于上面使用的格式设置这个框的位置,但在模型执行期间,使用gzlink命令行接口在不同的时刻更新块会更简单。

自定义仿真总线对象

当在模型中引入共同仿真块时,生成凉亭总线对象。来自Gazebo的信号通过这些总线对象读取。默认情况下,尺寸被设置为可变大小,因为关节可以有多个自由度。由于本例中的所有关节都是转动关节,因此它们都是一维的,大小固定,可以将其指定为总线信号的属性此步骤是可选的,但它有助于克服的限制适应信号

加载自定义总线对象。

负载(“custom_busobjects_basic”);

要以交互方式加载总线对象,请打开式编辑器在仿真金宝app软件。在“Simul金宝appink工具条”中建模选项卡,在设计画廊,点击式编辑器

在“类型编辑器”工具条中,选择导入> MAT文件.然后,选择要加载的MAT文件。

在Type Editor表中,选择用于读取关节状态的总线对象,然后选择相应的元素名称。为命名的总线对象Gazebo_SL_Bus_gazebo_msgs_JointState选择命名为joint_position而且joint_velocity和改变1而且DimensionMode固定

运行模拟

在使用MATLAB命令进行模拟之前,重置凉亭世界和盒子位置。像这样的命令可以更直接地集成到Simulink模型中金宝appStartFcn回调,以确保在每次模拟运行时执行它们。在露台Pacer块参数时,运行模型时只有模拟时间被重置,除非您更改重置行为下拉。

gzworld (“重置”);重置世界到它的初始状态gzlink (“设置”“红”“链接”“位置”,[0.5 -0.4 .3]);将方框移动到新的位置
STATUS: Succeed MESSAGE:参数设置成功。

您还可以在模拟期间运行这些类型的命令。为此,请使用绿色的“运行”按钮来模拟Simulink模型,而不是金宝appsim卡命令,以确保在运行模拟时可以执行命令行。

运行模拟20秒,使用滑块测试不同的姿势用户输入:终端执行器.验证凉亭的逆运动学和关节控制器工作正常。

Simoutput = sim(“gazeboCosimControl”“StopTime”“20”);

使用模拟数据检查器观察关节位置的行为。该图像显示了在模拟过程中,当操纵器命令位置被改变几次时的数据。

查看性能

联合测量和参考记录。模拟完成后,绘制日志输出。

measuredPosition = simoutput.logsout{1}.Values;referencePosition = simoutput.logsout{2}.Values;图绘制(measuredPosition。时间,measuredPosition。数据,“- - -”, referencePosition。时间,referencePosition。数据,“——”)({传奇“Meas1”“Meas2”“Meas3”“Meas4”“Meas5”“Meas6”“Ref1”“Ref2”“Ref3”“Ref4”“Ref5”“Ref6”})