赛车休息室

学生竞赛的最佳实践和团队合作

在Simulink中建模机器人船金宝app

康奈尔大学D’索萨我们的合作博主与一个开发机器人船的团队合作。结果显然令人印象深刻。

- - - - - -

对于今天的帖子,我想向大家介绍冈萨雷斯.亚历克斯是机器人船队的一员VantTecTecnológico蒙特雷在墨西哥蒙特雷。我在RoboBoat 2018上遇到了Alex,在那里我有机会看到他的团队对比赛任务的创新解决方案-无人机(UAV)引导无人水面车辆(USV)通过课程,当Alex提出为赛车Lounge博客写他的团队用MATLAB和Simulink的工作时,我很高兴!金宝appAlex将讨论如何使用机器人系统工具箱开发路径规划算法,以及使用Aerospace Blockset构建船舶的动态模型来调整控制器。下载本文中使用的代码在MATLAB的Add-Ons选项卡中的文件交换.所以,让我把它交给亚历克斯来拿走-亚历克斯,舞台是你的了!

- - - - - -

我领导着VantTec,一个学生机器人小组,我们为RoboBoat建造了一艘自动机器人船。竞赛鼓励无人机(UAV)和无人水面交通工具(USV)之间的合作对接任务——无人机告诉USV在哪里对接。我们决定进一步开展这种合作,并使用无人机为USV开发一条路径,以遵循整个课程。

机器人自主导航的挑战有三个方面:

  1. 创建环境的映射
  2. 选择/开发路径规划算法
  3. 开发一个鲁棒控制器来遵循所期望的路径

那么,我们如何应对这些挑战呢?

创建环境地图

为了创建环境地图,我们使用无人机点击球场的鸟瞰图。这张照片可以创建一个网格来工作。在这里,计算机视觉和人工智能算法可以根据图片尺寸或车辆本身给出障碍物的相对位置。

要做到这一点,首先我们用飞行器从上面拍一张照片。我们使用大疆幻影4我们为自主航路点导航开发了一个移动应用程序;无人机拍下照片并将其发送到手机上。接下来,我们将这张照片发送到我们的中央地面站,在那里我们开发的神经网络检测浮标并在它们周围创建边界框。从这些包围框中,我们获得每个浮标的中心,我们将其排列在矩阵中以创建地图。

使用机器人系统工具箱的二进制占用网格,收集的数据创建了一个机器人可以导航的地图。在这里,障碍物的相对坐标将设置它们在网格中的位置。

下面是一个关于如何创建网格的示例;值50和10应该改为无人机相机在拍摄的照片上帧的米的尺寸。然后,变量xy是从它们的中心取出的障碍集合。示例代码是应该介绍的那种矩阵的示例。我们的计算机视觉模块为每个障碍物创建了一个类似的矩阵,其中包含相应的坐标向量。

robotics.BinaryOccupancyGrid(50, 10、30);Xy = [3 2;8 5;13日7;20 1;25 8;32 6;38 3;40 9;42 4; 23 2; 28 5; 33 7]; setOccupancy(map, xy, 1);

然后,函数膨胀可以改变一个已知或获得的半径的障碍尺寸。

充气(图0.3);

路径规划算法的选择/开发

机器人系统工具箱提出了另一种解决方案,这次使用了一种基于采样的路径规划算法概率的路线图.在这种情况下,车辆上的标签可以帮助其进行空中识别,因此需要开始位置坐标和结束位置坐标以及需要设置的节点数量来获得车辆需要遵循的路线。

人口、难民和移民事务局 = 机器人。 startLocation =[3 3]; endLocation =[47 7]; PRM . map = map;NumNodes = 25; % 在起始位置和结束位置之间搜索解决方案。 路径 = findpath(人口、难民和移民事务局 startLocation, endLocation); 当 isempty(路径)     prm.NumNodes = 人口、难民和移民事务局。NumNodes + 25;     更新(人口、难民和移民事务局);     路径 = findpath(人口、难民和移民事务局, startLocation, endLocation);  结束

鲁棒控制器的研制

有了车辆模型的参考,开发鲁棒控制器的挑战就容易多了。模型越好,控制器就越好。运动学模型可以作为开始,但机器人的动态模型更适合创建仿真环境。对于欠驱动USV,三自由度动态模型可以实现工作所需的环境。

金宝appSimulink是开发这类模型的一个很好的工具,甚至更多地使用可用的工具箱。Aerospace Blockset展示了Utilities块,其中包括3自由度动态模型所需的3×3矩阵的数学运算。

建立模型

动态模型方程为:

$ \tau = M \dot{\nu} + C(\nu)\nu + D(\nu)\nu $

或重写:

$ \dot{\nu} = M^{-1} [\tau - C(\nu) - D(\nu)] $

方程中的第一个矩阵是惯性张量。这个M矩阵是使用Aerospace block set中的3×3 matrix实用程序块构造的。

M = \ {pmatrix}开始美元——间{\点{你}}& 0 & 0 & M - M y_G \ \ - Y_{\点{你}}& M间{G} - Y_{\点{r}} \ \ -my_ {G} & M间{G} - N_{\点{\ν}}& I_ {Z} - N_{\点{r}} \ {pmatrix} $

然后,以飞行器物理常数(m, X_G, Y_G, I_Z)和水动力系数为输入,以矩阵(m)为输出,将其作为整体动力学模型的子系统。

系统中的第二个矩阵是力的矢量($\tau $-matrix),其编程如下所示。然后,将其插入到整体模型的子系统中,以船梁(B)和单个推力(Tport & Tstbd)为输入,力向量(T)为输出。

$ {pmatrix} \ \τ= \开始tau_ {x} \ \ \ tau_ {y} \ \ \ tau_ {z} \ {pmatrix} = {pmatrix} \开始结束(T_}{端口识别+ T_{右舷})识别\ \ 0 \ \ 0.5 * B (T_{港口}- T_{右舷})识别识别\ {pmatrix} $

然后,将其插入到整体模型的子系统中,以船梁和单个推力为输入,力矢量为输出。

类似地,下一个矩阵是科里奥利矩阵(C矩阵)。如下所示,需要两个3×3矩阵的和,因此使用矩阵和块。然后,创建一个子系统,其输入为物理参数(X_G, Y_G, m)、水动力系数和浪涌、摆速以及偏航速率(V局部)的值,输出为科里奥利矩阵:

$ C(\ν)= \ {pmatrix}开始0 & 0 & - m (x_G r + \ν)\ \ & 0 & m - m (y_G r - u) \ \ (x_G r + \ν)& m (y_G r - u) & 0 \ {pmatrix} +结束\ {pmatrix}开始0 & 0 & \压裂{Y_{\点{\ν}}\ν+ \压裂{Y_{\点{r}} + N_{\点{\ν}}}{2}r}{200} \ \ & 0 &间{\点{你}}\ \ \ u压裂{-Y_{\点{\ν}}\ν- \压裂{Y_{\点{r}} + N_{\点{\ν}}}{2}r}{200} &间{\点{你}}u & 0 \ {pmatrix} $

下一个矩阵是拖动矩阵。像科里奥利矩阵一样,Drag矩阵是两个矩阵的和,但这次带一个负号。再次,创建了一个子系统,所有所需的水动力系数,浪涌和摇摆速度,偏航率作为输入,矩阵作为输出。

$ D(\ν)= \ {pmatrix}开始Y_u & 0 & 0 \ \ 0 & Y_{\ν}& Y_r \ \ 0 & N_{\ν}& N_r \ {pmatrix} - {pmatrix} \开始结束间{中期u中期\ \}\ u中期\中期& 0 & 0 \ \ 0 & Y_{中期\ν\中\ν\}\ \ν\中期中期+ Y_{中期\ν中期\ r \} \ r \中期中期& Y_{中期r \中\ν\}\ \ν中期\ +中期Y_{中期中期\ r \} \ r \中\ \ 0中期& Y_{中期\ν\中\ν\}\ \ν\中期中期+ Y_{中期\ν中期\ r \} \ r \中期中期& Y_{中期r \中\ν\}\ \ν中期\ +中期Y_中期{中期中期\ r \} \ r \中\ {pmatrix} $

然后,一个矩阵和被用于方程的第一个代数部分。

然后,将合成矩阵与倒M矩阵相乘。结果是局部参考系速度矢量的导数,然后对其进行积分。

变换矩阵表示如下所示,用于将局部参考系与全局参考系联系起来:

$ J(\eta) = \begin{pmatrix} cos \psi & -sin \psi & 0\\ sin \psi & cos \psi & 0\ 0 & 0 & 1 \\ \end{pmatrix} $

以V-local表示的局部速度向量转化为全局参考系,然后进行积分得到船的x、y和方向或航向,并存储在由“n_global”定义的向量中,如下图所示。您可以使用demux块来索引到向量的各个元素中。

最后,在引入可测量或估计的参数后,创建了一个子系统,其中包含获得水动力系数所需的方程。这些水动力系数被收集到一个Simulink总线,以使数据传输到模型的其他子系统。金宝app

开发基于模型的控制器

编程方程创建一个动态的船模型,以控制器为基础。这里体固定帧(v)和东北向下固定帧(n)是输出,推进器值或控制命令作为模型的输入。你也可以设置船的参数作为掩码变量,这将给你一个参数化的模型,当你对你的船做物理改变时可以修改。有了这个参数化模型,您可以使用Control System Toolbox和Simulink Control Design来设计一个控制器,金宝app该控制器可以遵循前面生成的所需路径。

这里我给你们展示一个我们开发的浪涌速度和航向控制器的例子。为了测试这个控制器,我们使用Signal Builder块创建了一个表示所需标题的正弦轨迹示例。正如您可以想象的那样,在我们的完整系统中,这个轨迹是由我们前面讨论过的映射生成的,但是我们现在显示的是一个测试输入。

从下面的图中,我们可以看到我们的控制器能够很好地跟踪标题。这可以通过调整控制器增益。下面的XY图显示了给定正弦航向和步进速度作为测试输入的船只轨迹。

* A. Gonzalez-Garcia和H. Castañeda,“无人水面飞行器的建模、识别和控制”,AUVSI XPONENTIAL 2019:所有的东西无人驾驶,2019

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。