发明名称 一种动力定位船水动力系数辨识方法
摘要 本发明涉及船舶动力定位领域,具体涉及一种基于最小二乘法的自适应遗传算法,对动力定位船舶进行建模,辨识动力定位船舶的水动力系数的方法。本发明包括如下步骤:(1)确定船舶水动力系数;(2)获取实船航行的纵向速度u,横向速度v,回转率数据r;(3)获取船模的纵向速度us、横向速度vs、回转率数据rs;(4)确定目标函数J;(5)确定适应度函数F;(6)对水动力系数进行编码;(7)对种群进行选择遗传操作;(8)对种群进行交叉变异遗传操作;(9)把二进制编码转化为水动力系数估计值;(10)设定最大进化代数,进行多代遗传计算。本发明只需记录实船航行的速度,不需进行模型试验,节省了动力定位系统设计成本。
申请公布号 CN102789538A 申请公布日期 2012.11.21
申请号 CN201210149980.2 申请日期 2012.05.15
申请人 哈尔滨工程大学 发明人 付明玉;谢文博;邢家伟;王元慧
分类号 G06F19/00(2011.01)I 主分类号 G06F19/00(2011.01)I
代理机构 代理人
主权项 1.一种动力定位船水动力系数辨识方法,其特征是,包括如下步骤:(1)确定船舶水动力系数,其中动力定位船运动数学模型为:<maths num="0001"><![CDATA[<math><mrow><mover><mi>&eta;</mi><mo>&CenterDot;</mo></mover><mo>=</mo><mi>R</mi><mrow><mo>(</mo><mi>&psi;</mi><mo>)</mo></mrow><mi>&upsi;</mi></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><mi>M</mi><mover><mi>&upsi;</mi><mo>&CenterDot;</mo></mover><mo>+</mo><mi>D&upsi;</mi><mo>=</mo><mi>&tau;</mi><mo>,</mo></mrow></math>]]></maths><maths num="0003"><![CDATA[<math><mrow><mi>M</mi><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><mi>m</mi><mo>-</mo><msub><mi>X</mi><mover><mi>u</mi><mo>&CenterDot;</mo></mover></msub></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mi>m</mi><mo>-</mo><msub><mi>Y</mi><mover><mi>v</mi><mo>&CenterDot;</mo></mover></msub></mtd><mtd><msub><mi>mx</mi><mi>G</mi></msub><mo>-</mo><msub><mi>Y</mi><mover><mi>r</mi><mo>&CenterDot;</mo></mover></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><msub><mi>mx</mi><mi>G</mi></msub><mo>-</mo><msub><mi>N</mi><mover><mi>v</mi><mo>&CenterDot;</mo></mover></msub></mtd><mtd><msub><mi>I</mi><mi>z</mi></msub><mo>-</mo><msub><mi>N</mi><mover><mi>r</mi><mo>&CenterDot;</mo></mover></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths><maths num="0004"><![CDATA[<math><mrow><mi>D</mi><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><msub><mrow><mo>-</mo><mi>X</mi></mrow><mi>u</mi></msub></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><msub><mrow><mo>-</mo><mi>Y</mi></mrow><mi>v</mi></msub></mtd><mtd><msub><mrow><mo>-</mo><mi>Y</mi></mrow><mi>r</mi></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><msub><mrow><mo>-</mo><mi>N</mi></mrow><mi>v</mi></msub></mtd><mtd><msub><mrow><mo>-</mo><mi>N</mi></mrow><mi>r</mi></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>η=[n,e,ψ]<sup>T</sup>为船体位姿,υ=[u,v,r]<sup>T</sup>为船体速度,R(ψ)为坐标转换矩阵:<maths num="0005"><![CDATA[<math><mrow><mi>R</mi><mrow><mo>(</mo><mi>&psi;</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mi>cos</mi><mrow><mo>(</mo><mi>&psi;</mi><mo>)</mo></mrow></mtd><mtd><mo>-</mo><mi>sin</mi><mrow><mo>(</mo><mi>&psi;</mi><mo>)</mo></mrow></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mi>sin</mi><mrow><mo>(</mo><mi>&psi;</mi><mo>)</mo></mrow></mtd><mtd><mi>cos</mi><mrow><mo>(</mo><mi>&psi;</mi><mo>)</mo></mrow></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>n为北向位置,e为东向位置,ψ为艏向,u为纵向速度,v为横向速度,r为回转率,τ<sub>thrust</sub>为推进器推力,m为船舶质量,x<sub>G</sub>为船舶重心横坐标,在M和D矩阵中,<img file="FDA00001640855700016.GIF" wi="79" he="49" />X<sub>u</sub>,Y<sub>v</sub>,Y<sub>r</sub>,<img file="FDA00001640855700017.GIF" wi="174" he="49" />N<sub>v</sub>,N<sub>r</sub>,<img file="FDA00001640855700018.GIF" wi="52" he="49" />为需要辨识的船舶水动力系数,X<sub>u</sub>为船体纵向速度产生的纵向线性水阻尼系数,Y<sub>v</sub>为船体横向速度产生的横向线性水阻尼系数,Y<sub>r</sub>为船体艏向角速度产生的横向线性水阻尼系数,N<sub>v</sub>为船体横向速度产生的艏向矩线性水阻尼系数,N<sub>r</sub>为船体艏向角速度产生的艏向线性水阻尼系数,<img file="FDA00001640855700019.GIF" wi="55" he="48" />为船体纵向加速度产生的纵向附加质量系数,<img file="FDA000016408557000110.GIF" wi="46" he="48" />为船体横向加速度产生的横向附加质量系数,<img file="FDA000016408557000111.GIF" wi="35" he="48" />为船体艏向角加速度产生的横向附加质量系数,<img file="FDA000016408557000112.GIF" wi="52" he="48" />为船体艏向角加速度产生的艏向附加转动惯量系数,以上船舶水动力系数的初值为<img file="FDA000016408557000113.GIF" wi="195" he="57" /><img file="FDA000016408557000114.GIF" wi="725" he="57" />船舶数学模型参数变为:<maths num="0006"><![CDATA[<math><mrow><mi>M</mi><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><mi>m</mi><mo>-</mo><msub><mover><mi>X</mi><mo>&OverBar;</mo></mover><mover><mi>u</mi><mo>&CenterDot;</mo></mover></msub></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mi>m</mi><mo>-</mo><msub><mover><mi>Y</mi><mo>&OverBar;</mo></mover><mover><mi>v</mi><mo>&CenterDot;</mo></mover></msub></mtd><mtd><msub><mi>mx</mi><mi>G</mi></msub><mo>-</mo><msub><mover><mi>Y</mi><mo>&OverBar;</mo></mover><mover><mi>r</mi><mo>&CenterDot;</mo></mover></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><msub><mi>mx</mi><mi>G</mi></msub><mo>-</mo><msub><mover><mi>N</mi><mo>&OverBar;</mo></mover><mover><mi>v</mi><mo>&CenterDot;</mo></mover></msub></mtd><mtd><msub><mi>I</mi><mi>z</mi></msub><mo>-</mo><msub><mover><mi>N</mi><mo>&OverBar;</mo></mover><mover><mi>r</mi><mo>&CenterDot;</mo></mover></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths><maths num="0007"><![CDATA[<math><mrow><mi>D</mi><mo>=</mo><mfenced open='(' close=')'><mtable><mtr><mtd><mo>-</mo><msub><mover><mi>X</mi><mo>&OverBar;</mo></mover><mi>u</mi></msub></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mo>-</mo><msub><mover><mi>Y</mi><mo>&OverBar;</mo></mover><mi>v</mi></msub></mtd><mtd><mo>-</mo><msub><mover><mi>Y</mi><mo>&OverBar;</mo></mover><mi>r</mi></msub></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mo>-</mo><msub><mover><mi>N</mi><mo>&OverBar;</mo></mover><mi>v</mi></msub></mtd><mtd><mo>-</mo><msub><mover><mi>N</mi><mo>&OverBar;</mo></mover><mi>r</mi></msub></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>(2)获取时间段t中,给定控制力τ<sub>thrust</sub>时实船航行的纵向速度u,横向速度v,回转率数据r;(3)获取时间段t内,给定控制力τ<sub>thrust</sub>时船模的纵向速度u<sub>s</sub>、横向速度v<sub>s</sub>、回转率数据r<sub>s</sub>;(4)确定目标函数J:<maths num="0008"><![CDATA[<math><mrow><mi>J</mi><mo>=</mo><mfrac><mn>1</mn><mi>N</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>t</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mo>{</mo><msup><mrow><mo>[</mo><mi>u</mi><mo>-</mo><msub><mi>u</mi><mi>s</mi></msub><mo>]</mo></mrow><mi>T</mi></msup><mo>[</mo><mi>u</mi><mo>-</mo><msub><mi>u</mi><mi>s</mi></msub><mo>]</mo><mo>+</mo><msup><mrow><mo>[</mo><mi>v</mi><mo>-</mo><msub><mi>v</mi><mi>s</mi></msub><mo>]</mo></mrow><mi>T</mi></msup><mo>[</mo><msub><mrow><mi>v</mi><mo>-</mo><mi>v</mi></mrow><mi>s</mi></msub><mo>]</mo><mo>+</mo><msup><mrow><mo>[</mo><mi>r</mi><mo>-</mo><msub><mi>r</mi><mi>s</mi></msub><mo>]</mo></mrow><mi>T</mi></msup><mo>[</mo><mi>r</mi><mo>-</mo><msub><mi>r</mi><mi>s</mi></msub><mo>]</mo><mo>}</mo><mo>,</mo></mrow></math>]]></maths>其中N为时间段t的数据个数;(5)确定适应度函数F:<maths num="0009"><![CDATA[<math><mrow><mi>F</mi><mo>=</mo><mfrac><mn>1</mn><mrow><mi>J</mi><mo>+</mo><mi>&epsiv;</mi></mrow></mfrac></mrow></math>]]></maths>其中,ε=0.01为防止溢出常量;(6)对水动力系数进行编码,以随机二进制编码排列的生物种群代表未知水动力系数;(7)对种群中的个体利用轮盘赌方法进行选择遗传操作;(8)对种群进行交叉变异遗传操作,以自适应遗传算法中的交叉概率和变异概率公式确定种群中每一代的交叉概率和变异概率;(9)利用随机二进制编码的对应关系对高适应度生物种群进行解码,把二进制编码转化为水动力系数估计值<img file="FDA00001640855700023.GIF" wi="849" he="63" />(10)设定最大进化代数,进行多代遗传计算,将步骤(9)中获得的水动力系数估计值作为下一代的水动力系数初值,重复步骤(2)~(8)获得下一代水动力系数估计值,直至获得与具有最大进化代数的种群对应的水动力系数估计值。
地址 150001 黑龙江省哈尔滨市南岗区南通大街145号哈尔滨工程大学科技处知识产权办公室