前言:

本文是基于下方B站视频P1 - P3 的学习笔记,此外还有基于视频教程的实例训练。

1. 用Matlab学习机器人学都要做那些东西?

Perception -》 Control -》 Prototyping -》Implementation

翻译过来就是(非直译):

传感器 -》 控制系统 -》原型机仿真 -》实体机器人测试

专栏中的文章的学习顺序,可能与以上的顺序不同

2. 接触力(Contact Force)概念

一上来就让小伙伴们接触这个感觉,可能会觉得文章跳跃性太大了,如果有这样感觉的同学,可以去先看一下以下文章,细致的讲解如何将3D CAD 文件导入Simscape仿真空间。

Contact Force的计算是机器人仿真中的基础,为了做出更加真实的物理效果,防止模型之间出现穿模现象,我们需要用到此类Contact Force算法。

首先我们来了解一下,什么是Contact Force:

在两个物体接触的时候,就会产生一个法向力和一个与速度方向相反的摩擦力

当我们引入重心概念的时候,这两个力就可以平移到重心位置,从而使得图中蓝色的球体产生一个绕着圆心旋转的力,因而使我们的球体发生旋转,像乒乓球与球拍发生碰撞从而产生转动一样。


当然,我们的球体在受到力的同时,根据牛顿第三定律,平面也会受到一个反向作用力:

以上就是我们碰撞过程正产生的所有力了,接下来我们讲一下,这些力都是怎么进行计算的

1) 法向力

在Simulink中法向力的计算我们遵循能量守恒和弹性碰撞。

最基础的公式是:

[公式]

稍微复杂一点的是:
[公式]

[公式]

当然,这些公式帮助我们找到了

[公式]

中a的值,外加我们已知的M,就可以帮助我们计算出F来。

但这样的计算只能用于一些简单的模型,而机器人系统,比如六轴机器人,是一个复杂模型,有许多的相互作用在其中,那么就需要我们使用更加复杂的计算方法,其中较为全面一点的计算方法是Lagrange,它通过一些列非常复杂且需要大量运算的公式可以将物体之间的相互作用力较为准确的计算出来。即使是使用计算机,运算量也比较大。想要避免大量运算,就要使用到一个较为轻量级的算法,Penalty Force的算法。这个算法是允许模型之间发生一定的重合,然后将重合部分视为弹簧、阻尼系统来进行力的运算。从而大大减少了计算量,但是要想得到准确的计算结果,需要我们设计出合适的参数,比如弹性模量和阻尼大小。

当然,如果仅仅是为了避免穿模,最简单的方法就是利用运动约束,比如一个铰链,我规定他只能从0°转到120°,那这样不需要计算我们也可以得到一个相对真实的仿真效果。但真实性远远低于另外两者。

2)摩擦力

摩擦力比较简单,比较是我们从初中就开始接触的力了,这里我就放几张图表:

3. 接触力库(Contact Force library )

1. Spatial Contact Force

那么,在Matlab中都有哪些我们可以直接使用的库,首先就是我们Matlab中自带的Sptial Contact Force. 它用到的算法就是我们前面所提到的 penalty force 算法。

那么我们来实际操作体验一下吧。要使用这个功能,我们要确保我们的MATLAB add_on 中有simscape。然后再命令行中输入

ssc_new

创建一个新的simscape空间:

删除多余的部分,并添加mechanism configuration, world frame, rigid transform, reference frame,6 DOF joint,brick solid,spherical solid模块,并连线成如下图所示的模型。

添加模块有2个方法,一是直接左键双击空白处,用搜索功能输入关键字,从而找到对应模块。

或者是通过上方library中,simscape大标题下找型对应的模块。

物体模型的G口需要通过手动打开,双击球体和长方体的小方块,就能进入参数调节的页面,然后勾选export entire geometry即可。

建立好模型后,我们对其参数进行调整,一般来说,我们双击小的方块就可以进入到模型的设置层了,但是对于一个复杂的系统来说,模型的参数可能有成百上千个,一个一个的双击小方块调整参数过于浪费时间,所以可以采用脚本的方式来调节参数,接下来我们来讲解具体的方法。

首先对于我们的这个系统来说,需要调节的参数有:

  1. rigid tranform

用于调节平面相对于地的地坐标系的位置。还有一个与小球相连的world2ball,用于调节小球相对于地面的位置。

2. solid

在solid中我们需要对平面和小球的长宽高,半径,颜色进行调整。

3. spatial contact force

对于spatial contact force我们要调节弹性和阻尼

那么针对以上的参数,我们新建一个script(脚本),脚本内容如下:
plane.x = 3;    % m
plane.y = 3;   
plane.z = 0.01;

ball.radius = 10; % cm
ball.r = 0.2;
ball.g = 0.6;
ball.b = 0.2;

world2plane.x_angle = 5; % deg

world2ball.x = 0;   % m
world2ball.y = 1;
world2ball.z = 0;

force_p2b.stiffness = 1e6;	% N/m
force_p2b.damping = 10;     % N/(m/s)
force_p2b.damping = 1e-4;   %cm
force_p2b.s_friction = 0.5; 
force_p2b.d_friction = 0.3;
force_p2b.critical_velocity = 1e-3; m/s

然后我们将运行脚本,并将脚本里的变量复制到对应的位置处,比如:

完成后我们就可以运行simscape了

结果如下:

ball2plane
TIM 的视频
 · 13 播放

2. Simscape Multibody Contact Forces Library

这是库不是MATLAB上自带的(至少我这里没有)需要从MATLAB的官方下载对应版本的压缩包文件,网址如下:

这里为了方便大家,博主提前下载好了r2020b版的包放在了这里:

链接:pan.baidu.com/s/143M0sd

提取码:he6p

其中包含多种情况下接触力的算法模型,大家可以自行探索。

到此,接触力(Contact Force)部分完结!好耶!