没有合适的资源?快使用搜索试试~ 我知道了~
国际自动控制联合会俄罗斯控制教育新进展——虚拟实验室非线性控制课程教学软件
第九届国际会计师联合会控制教育进展国际自动控制联合会,俄罗斯下诺夫哥罗德,2012年非线性控制谢尔盖湾放大图片作者:J. 戈卢别夫河莫斯科国立鲍曼技术大学(BMSTU)数学建模系,2-ya Baumanskaya Str.,5,Moscow,105005,Russia(电子邮件:mathmod@bmstu.ru)翻译后摘要:本文介绍了在数学建模系(BMSTU)开发的虚拟实验室软件该实验室被设计为非线性控制课程的教学工具 它允许看到各种非线性系统的控制过程的3D演示。实验室软件包使用Python编程语言开发。它有开放的代码和架构。该实验室包括汽车倒立摆、球和梁系统、反作用轮摆、古田摆等最流行的非线性系统模型。关键词:虚拟实验室,非线性控制,控制教学1. 介绍为非线性系统设计各种控制算法是现代自动控制的发展趋势之一。这些算法基于微分几何方法、积分器反推工具、基于无源性的方法等(参见Isidori(1995)、Kras-noshchechenko和Krishchenko(2005)、Sira-Ramirez和Agr awal(2004)、K rst i′c等人)。(1995),Kha lil(2002))。Fantoni和Lozano(2002)收集了各种模型和算法面向计算机的技术现在是教育过程的重要组成部分。 这些技术使学生在控制各种动力系统方面获得一些实际经验。机械系统控制过程的真实感三维可视化是理解控制技术的良好工具。假设有一组学生有一个控制理论的任务要做:每个人都必须综合一个控制算法(例如, 作为反馈),其利用输入稳定给定的动态系统或沿着规定的参考轨迹跟踪该动态系统。而不是仅仅找到所需的控制器,必须花时间测试和表示结果。这意味(1) 为所述给定动态系统编程建模环境;(2) 实施控制算法以形成闭环系统;(3) 获得所述状态向量分量的图;(4) 获得所述输入变量的图形(5) 使用所获取的图来检查针对状态向量和输入值的给定限制,或者在代码中正确地定义这些限制;(6) 将图表转移到最终报告中。这项工作得到了RFBR的支持(赠款11-01-00733和12-07-329)事实上,只有第二项和第五项活动无疑是有用的,但它们不能与其他活动分开进行。此外,前五个步骤不仅要由小组中的每个学生执行,而且要由课程教授执行,以防有人想要对报告中表示的结果进行一些额外的验证。存在不同的方法来自动执行此例程。简化该过程的方法之一是使用高级技术计算语言,例如Mathematica或M ATLAB。两者都支持快速可视化。医生-在Mathematica中准备的数据甚至可以被格式化以产生相对容易理解和检查的报告。另一种方法是为这些特定需求创建虚拟实验室。这就是下面几节的内容。2. 虚拟实验室描述虚拟实验室是软件包,旨在通过自动执行数值建模,可视化,有时甚至是结果验证的步骤来简化所述程序必须区分虚拟实验室(对过程进行数字模拟)和远程实验室(允许用户通过互联网远程设置和控制真实实验)。虚拟实验室仍然可以使用互联网传输数据。2.1 总要求以下是应用于控制理论的虚拟实验室的理想功能:(1) 动态系统的模型应易于创建和添加;(2) 应要求用户仅给出系统参数算法;© 2012 IFAC 166 10.3182/20120619-3-RU-2024.000542012年6月19日至21日,俄罗斯下诺夫哥罗德,国际会计师联合会第九届研讨会167设置初始状态,状态更新控制器设置从GUI模型设置/更新GUI视图(3) 实验室应保持接近所见即所得的概念,允许得到的结果,只要用户提供了所有必要的信息,而无需重新编译任何代码;(4) 作为(3)的扩展,实验室不仅应提供绘制各种参数的图形的机会,而且还应提供以3D方式观察事物的机会(前提是这是适当的);(5) 需要基于Web的接口,以便将合成的控制算法发送到服务器,使得课程教授可以将其加载到实验室的实例中并验证结果。2.2 工具选择有特殊的工具需要开发我们的虚拟实验室,以满足上述所有要求。该工具包包括编程语言和库,用于动态创建接口并可视化闭环系统状态演化。此外,实验室的服务器部分还需要一些数据库管理系统.编程语言. 选择的语言是Python。这是由于以下原因:它是跨平台的(运行在Windows,Linux/ Unix,Mac OS X上,已经移植到Java和.NET虚拟机上);它是大多数 Linux发行版的标准组件,可以在MacOS X终端上运行它在Python软件基金会许可证下分发,这意味着它可以在开源和商业产品中免费使用它提供了快速的开发(代码通常比用C++或Java编写的代码短2主要特点是Python是一种动态(脚本)语言,因此支持在运行时中对源代码进行预编译这提供了一种方法,让用户输入任意的控制算法,并立即提供相应的结果。3D图形API。虽然Direct3D可能是Windows平台的更好选择,但OpenGL用于保持跨平台的可移植性。OpenGL似乎是一个很好的解决方案,用于创建简单的场景,而无需额外的效果。它仍然是一个低级的,过程性的API,而不是一个描述性的API(例如,它没有对场景图的原生支持,所以这是一个单独编程的东西)。通过PyOpenGL库实现了Python对OpenGL的访问。数据库管理系统。MySQL与PHP语言结合使用。可操作性已测试使用Apache服务器与mod PHP扩展虽然其他选择是可以接受的。Python没有标准的接口构建器此外,由于不同的模型需要输入不同的参数,因此接口的某些部分没有预定义,在运行时创建因此,选择wxPython库来满足接口创建的需求我们作出选择的原因是:• 软件是跨平台的;• 它完全免费使用,而且大部分是开源的;• 它易于分发。最后一个功能意味着用户不必安装任何额外的软件。在注册表或系统文件中没有记录;这个应用程序可以在复制到计算机后立即运行(当然,这不适用于我们实验室的服务器部分)。其他选择。 我们可以提出另一种方法来实现这样的实验室,使用任何.NET语言(例如C#)而不是Python作为程序的主要部分。Python可以只用于脚本功能(即用户输入控制器算法)。 Python和.NET语言可以通过微软提供的动态语言运行时(DLR)互连。应该使用IronPython而不是CPython语言实现 对于跨平台的应用程序,使用为Mono框架重新编译的DLR和IronPython库就足够了。用户仍然不需要安装任何额外的软件,除了.NET框架或Mono框架。2.3 主要概念我们的应用程序使用模型-视图-控制器架构模式,见图。1.一、 这个概念直接适用于这类问题,这一点将在后面进一步说明。图1.一、模型-视图-控制器模式的使用模型块。该模型是一个容器的所有参数的动态系统。它实现了一个接口来恢复默认参数,设置系统的任何初始状态,并按照控制器块的规定进行更改它还允许视图块读取系统的当前状态,因此可以更新用户界面视图块。它的任务是根据存储在模型中的数据执行图形用户界面(GUI)的渲染。 尽管视图生成了界面的一部分,但它并不意味着是与用户交互的前端,因为它不接受来自用户的任何信息。我们使用一个视图块,但如果需要的话,可以使用更多视图块控制器块。 这是三位一体的核心要素。它执行两个功能:从GUI读取信息和处理动态系统的当前状态,以预测其在一段时间后的变化····2012年6月19日至21日,俄罗斯下诺夫哥罗德,国际会计师联合会第九届研讨会168··模型必须支持不同类型的参数,包括整数、浮点数、字符串和布尔值。一些参数可以编辑(例如,动力系统的期望物理特性,其初始状态);其他参数必须是只读的(当前时间,系统的当前全能量等)。 该模型还定义了在模拟过程中应显示和定期更新的参数。所有不可显示的常数,如标准重力加速度g0,也在此块中定义。一旦控制器更新了参数,就会调用某个函数,强制视图块更改屏幕上对象的当然,3D视图并不是在每次参数改变时都被重绘,而是仅为了产生所需的帧速率。参数的2D图形也是如此控制器块通常这样操作:预编译用户定义的控制算法;开始循环,每次迭代时间变量增加在循环的每次迭代检查所有附加条件是否成立,否则中断循环;积分描述系统的一个时间步长的微分方程;修改模型使其匹配新的状态(正如上面提到的,这将导致视图被刷新);• 根据用户的请求停止循环2.4 实现的为了实现模型-视图-控制器架构,定义了一个特殊的命名空间 它包含四个模块:模型、视图、控制器和参数。前三个模块中的每一个都为模型-视图-控制器模式的各个块定义了一个基类模型的基类实现了与配置文件交互的过程,这个类很大程度上依赖于参数模块,其中所有类型的参数都用相应的编辑器作为子类来描述。 这些编辑器由主模块在构建用户界面时使用。模块视图为3D可视化定义了一个基类它包含对模型对象和活动OpenGL引擎的引用。所有功能必须根据建模的系统单独实现(参见进一步描述)。必须指出的是,视图块的其他功能分布在主模块和绘制参数图的模块这是因为它们不依赖于被模拟的动态系统,因此不需要定义相应的基类。2.5 包络OpenGLOpenGL本身不支持对象,因此需要手动实现大量的新类因此,OpenGL被封装,以便不直接调用其低级过程。上面提到的类代表了相机、OpenGL画布和图形基元。在基元中,定义了盒子、球体和圆柱体(或圆锥截头体)。这对于简单的场景来说已经足够了尽管如此,更复杂的原语可以编程另外。另一个定义的构造是三角化的表面,它是由一个枚举的顶点集和一个三元组列表。每个三元组包含的顶点数,以形成一个三角形。3D引擎中包含的一个关键功能是支持场景图。 这意味着,任何对象都可以有一个“父对象”,这样应用于“父对象”的每个变换都会立即应用于它的所有“子对象”。 这使得创建复杂的场景变得更加容易和快捷。场景构建的代码变得更加可读;它可以在本地修改,而无需重写大块。通常,有两种方法来构建场景:创建其所有组件,然后使用场景图将它们合并,或者在创建后立即将每个组件添加到图中。 在源代码中实现了一个表示这种图的节点的特殊类。它唯一的方法(不考虑类构造函数)是递归地渲染图树,从当前节点开始,在回溯之前尽可能沿着每个分支前进。可用的变换包括平移、旋转和非均匀缩放。为每个对象指定一个轴心点。它成为该对象及其所有“子对象”的旋转和缩放变换的固定点3. 添加新插件对于像我们这样的应用程序来说,添加代表各种动力系统的新插件的能力是必须的至少有两种方法允许提供这种功能。第一个依赖于动态链接库。按照这种方式,程序员应该创建一个库,包括模型,视图和控制器的所有必要类。每个类都必须实现某些接口,以便被主程序成功地处理该方法可用于.NET语言+ DLR + IronPython结合实现虚拟第二种方法对Python程序员来说更自然一些。 Python脚本在每次运行时都会被重新解释。因此,创建一个新的插件所需要做的就是将其源文件放到特定的目录中,并修改配置文件,这样主脚本就可以检测到新的插件。也可以省略最后一步,因为Python有强大的代码内省工具,所以主脚本可以自动搜索插件3.1 需要的源文件每个新插件都在其自己的名称空间中定义。在Python中,命名空间对应于文件系统的目录,因此首先应该创建一个新的目录,所有文件都将存储在其中。(对于要运行的目录,就像命名空间一样,有必要将init.py文件放在那里。但可能是空的)。一般有四····2012年6月19日至21日,俄罗斯下诺夫哥罗德,国际会计师联合会第九届研讨会169要放入此目录的源代码文件。其中三个表示模型-视图-控制器三元组的块;还需要一个来提供有关插件的信息(例如名称、作者、描述等)。模型源文件。这里实现了基本模型类它至少包括两种方法:构造函数init和恢复参数默认状态构造函数为变量赋值,这些变量表示一个参数表和一个默认情况下要绘制的参数对列表。参数表本身就是一个列表。列表中的每个条目对应于一个参数;该条目是一个包含两个元素的元组:参数这样的实例可以通过调用它的构造器就地创建(例如FloatParameter(hint=“initialposition”,default = 1,minValue=-1))。 这样的结构很容易被Python处理,因为它原生支持可迭代类型,包括列表和元组。查看源文件。在这个模块中,必须定义基本视图类的后代。它包括初始化场景并在参数更改时对其进行修改的方法。第一种方法创建场景的对象并形成场景图。第二个方法在每次需要重绘视图时调用它为移动的对象设置新的位置,并更新可显示的值,如建模时间。控制器源文件。与前面的情况一样,这里定义的类继承自基本控制器类,并指定在模拟开始时以及模拟的每个时间步要执行的操作只有一种方法可以添加。它为模型的更改参数计算新的值,并发送一个已进行更改的信号,因此可以刷新场景3.2 处理控制算法。与大多数其他动态语言一样,Python有一个指令exec(它是Python 3.x中的一个函数),它执行以字符串形式给出的表达式,就像它是在源代码中编写的一样。一个人只需要do是传递多行文本参数,该参数包含用户定义的控制算法到这个指令。问题是,这个动作发生在每个时间步上,所以我们的应用程序可能会消耗过多的计算资源。幸运的是,Python不仅支持对源文件的预编译,还支持对运行时产生的代码的预编译。因此,控制算法可以使用编译函数编译一次,然后将结果在每个时间步传递给exec一个简单的调试器。如果用户在对控制算法进行编程时犯了错误,则错误将停止整个程序的执行。这当然是不可取的情况。它可以通过try-except- finally块和打开内置调试器来处理。有两种类型的错误:编译时错误(通常是语法错误)和运行时错误。如果控制算法中存在语法错误,则预编译将不成功。 在这种情况下,编译语句被包装在try- except块中,以取消模拟并显示图二、用户界面的总体视图错误信息。函数sys.exc info()用于获取有关语法错误位置的信息。try-except块也会捕获错误,但只是将它们标记为已处理。这里的主要角色由调试器扮演。在使用exec之前,它是通过调用sys.settrace(tracer)过程打开的(tracer是一个实际处理错误的回调函数 如果发生后一种情况,跟踪程序将停止模拟并显示错误消息。否则,调试器将被关闭,直到下一个时间步,因此它不会处理用户定义算法之外的任何错误。使用模板。事实证明,不同插件的文件在结构上非常相似。 为了更快地添加新插件,创建了一个模板,其中包含创建插件的通用代码和注释。由于这一点,它变得更容易理解和修改由他人创建的源文件进一步的自动化是可能的。4. 接口我们的应用程序提供了简单的单窗口界面,整体视图如图所示二、它分为三个垂直区域,还包括一个操作栏。后者提供了与服务器建立连接、添加和删除仿真会话、添加和删除图形以及控制仿真过程的按钮4.1 插入式选择器最左边的,见图。3、区域允许选择一个插件(即一个动态系统)来工作。图三.动态系统选择面板2012年6月19日至21日,俄罗斯下诺夫哥罗德,国际会计师联合会第九届研讨会17021≈.公司简介2Σ2首先,用户应该通过选择相应的粗体项目来选择要使用的动力系统。然后,可能需要创建新的仿真或修改并运行现有仿真。 在第一种情况下,应使用操作栏上的添加按钮。否则,用户只需从展开子列表中选择现有的模拟 要删除模拟,应选择它并按下操作栏上的Delete(删除)按钮。退出时,所有模拟会话都将自动保存到配置文件中4.2 可视化区域窗口的中心部分是面向视觉化。在它的上部放置3D视图。下半部分是图表。由于可能没有足够的空间容纳所有的图形,因此添加了一个滚动条当然,要创建或删除一个图形,应该单击操作栏上的相应按钮可以选择任何一对可显示的参数来创建图形(它们中没有一个必须是当前时间)。4.3 监控系统状态Krishchenko et al ( 2002 ) , Tkachev ( 2011 ) ,Ortega and Spong ( 2000 ) , Olfati-Saber andMegretski(1998).5. 例如选择光束和球系统来描述应用程序的工作方式。该系统是稳 定 的 backstepping 过 程 ( 见 Olfati-Saber 和 Megretski(1998))。图五、系统的广义坐标该系统的欧拉-拉格朗日方程(不包括阻尼)具有以下形式:窗口的最右边区域(见图4)用于显示和修改电流的参数。mq<$1− mq1q tec 2+ mg sinq2= 0,(I+m q2)q<$2+2mq1qtec1qtec2+mgq1cosq2=τ.(一)仿真会话,包括所需的控制算法。不可编辑的参数通常随时间变化,而可编辑的参数则由用户在模拟开始前设置。这里q1和q2是中所示的广义坐标图5,m表示球的质量,g 9。81 m/s2是重力常数,I代表梁的惯性,τ是施加在梁上的扭矩。还有一些限制条件定义了可操作性的范围。首先,广义坐标应该是有界的:L L-<2q1(t)2,<(二更)π π图四、参数窗格(省略了一些参数-2< q2(t)<2。其次,如果球和梁之间失去接触,因此,对于所有t≥0,必须检查另一个条件N(t)=m( q1 (t) q?2 ( t)+2qstec1 (t) qstec2(t)+gcosq2(t))>0。(三)目标是使系统由于上述要求,局部稳定根据反推过程,我们得出结论,闭环系统成为局部渐近稳定,如果所施加的控制是4.4 现有插件τ=哪里ML212平方米1v+mgq1 cosq2 +2mq1q tec1qtec2,(4)目前,虚拟实验室包括五个开发的插件,对应于以下动力系统:(1) 反作用轮摆(2) 古田摆(倒立摆);(3) 推车摆(推车和杆系统);(4) 单连杆柔性机器人;(5) beam和ball系统插件提供有预定义的控制算法,例如Fantoni和Lozano(2002)提出的算法v=c4c5q2+(c4+c5)qtec2−c1c4c5tanh(c2(c3q1+qtec1))+c1c2(c3(−c4−c5)qtec1−((c3+c4+c5)q1+qtec1)qtec2+gqtec2cosq2+(c3+c4+c5)gsinq2 +2c2(−c3qtec1−q1qtec2 +g sinq2)2×tanh(c2(c3q1+qtec1)/(2c1c2q1q tec2− cosh2(c2(c3q1+qtec1)其中ci是常数值:c1= 0。1,c2= 5/4, c3= 1,c4= 20,c5= 20。2012年6月19日至21日,俄罗斯下诺夫哥罗德,国际会计师联合会第九届研讨会171在上述表达式中,M表示梁的质量为了在我们的实验室中实现此控件,我们只需将相应的Python代码放入多行编辑器2012年6月19日至21日,俄罗斯下诺夫哥罗德,国际会计师联合会第九届研讨会172系统、反作用轮摆和古田摆。还可以添加新的3D虚拟对象。该实验室包含一组内置的控制律,并允许添加用户定义 的控 制 算法 。 它 可以 帮 助非 线 性控 制 教育 , 并 在BMSTU的本科生和研究生培训图第六章用Python编写的控制算法由插件提供,见图。第六章在设置所有初始值之后立即运行建模3D模型可以在图2中看到。它包含系统本身和三个坐标轴,以便在空间中更好地定位(因为允许用户旋转场景以及放大和缩小)。在建模的这一部分中,选择了两个图形进行绘制。 第一张图是施加在球上的反压力的曲线图,见图2。第七章这表明条件(3)成立。第二个图是状态空间中的轨迹在(q1,qstec1)平面上的投影,见图。八、应该注意的是,条件(2),(3)在模拟过程中自动检查,以便一旦其中任何一个不满足,它就会停止;然后描述问题的消息如图所示。第九章见图7。反压的时间变化图八、轨迹在(q1,qstec1)平面上的投影图第九章报告不满足条件的消息开发的虚拟实验室软件可以实现3D可视化,各种非线性系统的控制过程它包括了一些常见的机械系统的非线性模型,如小车上的倒立摆,球和梁引用Isidori,A.(1995年)。非线性控制系统第三版。London:Springer-Verlag.Krasnoshchechenko,V.I.,Krishchenko,A.P.(2005年 ) 。 Ne-linejnye sistemy : geometricheskie metodyanaliza i sin-teza ( Nonlinear systems : geometricmethods of analysisand synthesis ) .M : Izd-voMGTU im.N.Je. Baumana.K rst ic,M. ,Kanella ko pou losI. 和Ko kot ovicP. V。非线性和自适应控制设计。纽约:约翰·威利父子。Sira-Ramirez,H.,Agrawal,S.(2004年)。不同的平面系统。New York:New York.哈利勒,香港2002非线性系统。3d版。New York:Prentice Hall.凡托尼岛洛萨诺河(2002年)的报告。欠驱动机械系统的非线性控制。London:Springer-Verlag.Ortega,R., S pong,M., G'ome z-Estern,F. (2000年)的第10/2000号决议。通过互连和阻尼分配的欠驱动机械系统的可表化。IEEE自动控制,47,1218-1233。Olfati-Saber河,Megretski,A.(1998年)。 控制器设计用于光束和球系统。第37届IEEE决策与控制会议论文集,坦帕,佛罗里达州(pp. 4555-4560)。Krishchenko,A.P,Panfilov,D. U.,Tkachev,S.B.(2002年)的报告。最小相位仿射系统设计DifferentialEquations,V. 38,No. 11,1574-1580.Tkachev,S.B.(2011年)。非极小值的镇定部 分 变 量 线 性 化 的 相 位 仿 射 系 统 。http://technomag.edu.ru科学和教育:电子科学和技术期刊,11,URL:http://technomag.edu.ru/doc/255087.html(俄文)。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功