发明名称 一种基于弹性绳运动性质的三维空间路径规划方法
摘要 本发明提出一种基于弹性绳运动性质的三维空间路径规划方法,包括初始化寻回环境和参数、计算弹性绳上的点受弹性绳作用引起的位移、计算弹性绳上的点受弹性绳和障碍物作用引起的位移、计算移动后的位置、判断弹性绳上所有点均是否均发生了一次运动和判断弹性绳是否达到平衡位置等几个步骤。本发明提出的一种基于弹性绳运动性质的三维空间路径规划方法,相对于其它路径规划方法运算量小,寻路速度快;环境表示简单,只要知道障碍物表面指向障碍物外的法线方向即可,且不需要将空间分割成单元格的形式,所找到的路径平滑性,准确性更好。
申请公布号 CN102306399A 申请公布日期 2012.01.04
申请号 CN201110206406.1 申请日期 2011.07.22
申请人 哈尔滨工程大学 发明人 刘利强;范志超;戴运桃
分类号 G06T19/00(2011.01)I 主分类号 G06T19/00(2011.01)I
代理机构 北京永创新实专利事务所 11121 代理人 官汉增
主权项 1.一种基于弹性绳运动性质的三维空间路径规划方法,其特征在于:具体包括以下几个步骤:步骤一:设弹性绳上点为{A<sub>i</sub>},发生一次移动后为{A′<sub>i</sub>},(i=1,2,...n),n为弹性绳上点的个数,n≥3;空间中起点和终点的坐标分别为A<sub>1</sub>、A<sub>n</sub>,起点和终点的位移始终为零;障碍物的球心和半径分别为{O<sub>j</sub>},{R<sub>j</sub>},(j=1,2,...m),障碍物的个数m≥0,k为阻力系数;判断弹性绳和障碍物是否相邻的阀值参数为ξ,判断是否平衡的迭代停止阀值为ζ;步骤二:令A<sub>1</sub>′=A<sub>1</sub>,A<sub>n</sub>′=A<sub>n</sub>;弹性绳上当前运动点A<sub>i</sub>的下标i=2,弹性绳从第二个点开始运动;步骤三:根据公式<img file="FDA0000077738480000011.GIF" wi="515" he="86" />计算A<sub>i</sub>点受到弹性绳的作用所引起的位移<img file="FDA0000077738480000012.GIF" wi="85" he="72" />其中k为阻力系数,A<sub>i-1</sub>′表示A<sub>i-1</sub>一次移动后的点,A<sub>i</sub>在A<sub>i+1</sub>的引力作用下的位移为<img file="FDA0000077738480000013.GIF" wi="209" he="81" />A<sub>i</sub>在A<sub>i-1</sub>的引力作用下的位移为<img file="FDA0000077738480000014.GIF" wi="211" he="80" />令表示障碍物的下标j=1,计算A<sub>i</sub>点与障碍物O<sub>1</sub>的作用;步骤四:判断A<sub>i</sub>点是否在障碍物内O<sub>j</sub>,若<img file="FDA0000077738480000015.GIF" wi="189" he="81" />成立,则A<sub>i</sub>点在障碍物内,计算A<sub>i</sub>点弹性绳与障碍物O<sub>j</sub>共同作用下的合位移<img file="FDA0000077738480000016.GIF" wi="85" he="62" />为:<maths num="0001"><![CDATA[<math><mrow><mover><mrow><msub><mi>A</mi><mi>i</mi></msub><msubsup><mi>A</mi><mi>i</mi><mo>&prime;</mo></msubsup></mrow><mo>&RightArrow;</mo></mover><mo>=</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&prime;</mo></msubsup><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><mo>=</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover></mrow></math>]]></maths><maths num="0003"><![CDATA[<math><mrow><mo>=</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>+</mo><mfrac><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mrow><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo></mrow></mfrac><mo>*</mo><msup><mi>L</mi><mo>&prime;</mo></msup></mrow></math>]]></maths>其中<img file="FDA00000777384800000110.GIF" wi="494" he="140" />然后转入步骤八,<img file="FDA00000777384800000111.GIF" wi="111" he="83" />表示障碍物球心到A<sub>i</sub>的距离,<img file="FDA00000777384800000112.GIF" wi="109" he="83" />为寻路起点到终点的距离;若<img file="FDA00000777384800000113.GIF" wi="208" he="83" />不成立,则A<sub>i</sub>点不在障碍物内,进入步骤五;其中,<maths num="0004"><![CDATA[<math><mrow><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover><mo>=</mo><mfrac><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mrow><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo></mrow></mfrac><mo>*</mo><msup><mi>L</mi><mo>&prime;</mo></msup><mo>*</mo><mi>g</mi><mrow><mo>(</mo><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo><mo>-</mo><msub><mi>R</mi><mi>j</mi></msub><mo>)</mo></mrow><mo>,</mo><mi>g</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>0</mn></mtd><mtd><mi>x</mi><mo>&GreaterEqual;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><mi>x</mi><mo>&lt;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths><maths num="0005"><![CDATA[<math><mrow><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover><mo>=</mo><mo>-</mo><mfrac><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><msup><mrow><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo></mrow><mn>2</mn></msup></mfrac><mo>*</mo><mrow><mo>(</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>&CenterDot;</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>)</mo></mrow><mo>*</mo><mi>f</mi><mrow><mo>(</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>&CenterDot;</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>)</mo></mrow><mo>*</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>R</mi><mi>j</mi></msub><mo>-</mo><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo><mo>)</mo></mrow><mo>*</mo><mi>f</mi><mrow><mo>(</mo><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo><mo>-</mo><msub><mi>R</mi><mi>j</mi></msub><mo>-</mo><mi>&xi;</mi><mo>)</mo></mrow><mo>,</mo><mi>f</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>0</mn></mtd><mtd><mi>x</mi><mo>></mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><mi>x</mi><mo>&le;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths><maths num="0006"><![CDATA[<math><mrow><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo></mo></mrow></msubsup><mo>&RightArrow;</mo></mover><mo>=</mo><mfrac><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mrow><mo>|</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>|</mo></mrow></mfrac><mo>*</mo><mrow><mo>(</mo><mi>L</mi><mo>-</mo><mo>|</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>|</mo><mo>-</mo><mi>&xi;</mi><mo>)</mo></mrow><mo>*</mo><mi>g</mi><mrow><mo>(</mo><msub><mi>R</mi><mi>j</mi></msub><mo>+</mo><mi>&xi;</mi><mo>-</mo><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo><mo>)</mo></mrow><mo>*</mo><mi>g</mi><mrow><mo>(</mo><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>|</mo><mo>-</mo><msub><mi>R</mi><mi>j</mi></msub><mo>)</mo></mrow><mo>,</mo><mi>g</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>0</mn></mtd><mtd><mi>x</mi><mo>&GreaterEqual;</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><mi>x</mi><mo>&lt;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>步骤五:判断A<sub>i</sub>点是否在障碍物表面,若<img file="FDA0000077738480000023.GIF" wi="282" he="82" />成立,则A<sub>i</sub>点在障碍物表面,此时若有<img file="FDA0000077738480000024.GIF" wi="251" he="73" />成立,则计算A<sub>i</sub>点在弹性绳与障碍物O<sub>j</sub>共同作用下的合位移<img file="FDA0000077738480000025.GIF" wi="108" he="64" />其中ξ为用于判断弹性绳和障碍物是否相邻的阀值参数;<maths num="0007"><![CDATA[<math><mrow><mover><mrow><msub><mi>A</mi><mi>i</mi></msub><msubsup><mi>A</mi><mi>i</mi><mo>&prime;</mo></msubsup></mrow><mo>&RightArrow;</mo></mover><mo>=</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&prime;</mo></msubsup><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover></mrow></math>]]></maths><img file="FDA0000077738480000027.GIF" wi="232" he="76" />计算得到A<sub>i</sub>点在弹性绳与障碍物O<sub>j</sub>共同作用下的合位移<maths num="0008"><![CDATA[<math><mrow><mo>=</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>-</mo><mfrac><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><msup><mrow><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo></mrow><mn>2</mn></msup></mfrac><mo>*</mo><mrow><mo>(</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>&CenterDot;</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>)</mo></mrow></mrow></math>]]></maths><img file="FDA0000077738480000029.GIF" wi="108" he="64" />然后进入步骤八;若<img file="FDA00000777384800000210.GIF" wi="252" he="73" />不成立,则直接进入步骤七;若<img file="FDA00000777384800000211.GIF" wi="282" he="82" />不成立,则A<sub>i</sub>点不在障碍物表面,进入步骤六;步骤六:判断A<sub>i</sub>点受到弹性绳的作用所引起的位移<img file="FDA00000777384800000212.GIF" wi="57" he="73" />下是否会运动到障碍物O<sub>j</sub>内,若<img file="FDA00000777384800000213.GIF" wi="310" he="82" />成立,则A<sub>i</sub>点会运动到障碍物O<sub>j</sub>内,则计算A<sub>i</sub>点在弹性绳与障碍物O<sub>j</sub>共同作用下的合位移<img file="FDA00000777384800000214.GIF" wi="106" he="63" /><maths num="0009"><![CDATA[<math><mrow><mover><mrow><msub><mi>A</mi><mi>i</mi></msub><msubsup><mi>A</mi><mi>i</mi><mo>&prime;</mo></msubsup></mrow><mo>&RightArrow;</mo></mover><mo>=</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&prime;</mo></msubsup><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>&RightArrow;</mo></mover></mrow></math>]]></maths><maths num="0010"><![CDATA[<math><mrow><mo>=</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>+</mo><mover><msubsup><mi>S</mi><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mrow><mo>&prime;</mo><mo></mo><mo></mo></mrow></msubsup><mo>&RightArrow;</mo></mover></mrow></math>]]></maths><maths num="0011"><![CDATA[<math><mrow><mo>=</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>+</mo><mfrac><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mrow><mo>|</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>|</mo></mrow></mfrac><mo>*</mo><mrow><mo>(</mo><mi>L</mi><mo>-</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>-</mo><mi>&xi;</mi><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0012"><![CDATA[<math><mrow><mo>=</mo><mfrac><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mrow><mo>|</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>|</mo></mrow></mfrac><mo>*</mo><mrow><mo>(</mo><mi>L</mi><mo>-</mo><mi>&xi;</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中<maths num="0013"><![CDATA[<math><mrow><mi>L</mi><mo>=</mo><mo>-</mo><mfrac><mrow><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>&CenterDot;</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover></mrow><mrow><mo>|</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>|</mo></mrow></mfrac><mo>-</mo><msqrt><msup><mrow><mo>(</mo><mfrac><mrow><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>&CenterDot;</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover></mrow><mrow><mo>|</mo><mover><msub><mi>S</mi><msub><mi>A</mi><mi>i</mi></msub></msub><mo>&RightArrow;</mo></mover><mo>|</mo></mrow></mfrac><mo>)</mo></mrow><mn>2</mn></msup><mo>-</mo><msup><mrow><mo>|</mo><mover><mrow><msub><mi>O</mi><mi>j</mi></msub><msub><mi>A</mi><mi>i</mi></msub></mrow><mo>&RightArrow;</mo></mover><mo>|</mo></mrow><mn>2</mn></msup><mo>+</mo><msubsup><mi>R</mi><mi>j</mi><mn>2</mn></msubsup></msqrt><mo>,</mo></mrow></math>]]></maths>计算A<sub>i</sub>点在弹性绳与障碍物O<sub>j</sub>共同作用下的合位移<img file="FDA00000777384800000220.GIF" wi="107" he="64" />进入步骤八;若<img file="FDA00000777384800000221.GIF" wi="309" he="83" />不成立,则说明A<sub>i</sub>点不会运动到障碍物O<sub>j</sub>内,直接进入步骤七;步骤七:A<sub>i</sub>点仅受弹性绳的作用而不受障碍物的作用,A<sub>i</sub>点在弹性绳与障碍物O<sub>j</sub>共同作用下的合位移<img file="FDA0000077738480000031.GIF" wi="215" he="73" />然后令表示障碍物的下标j进行加1,再判断j是否大于m,若大于m,进入步骤八,否则返回步骤四;步骤八:计算A<sub>i</sub>点移动后的位置<img file="FDA0000077738480000032.GIF" wi="297" he="62" />令当前运动点A<sub>i</sub>的下标i进行加1,并判断i是否大于等于n,若i大于等于n,进入步骤九,否则返回步骤三;步骤九:判断弹性绳是否达到平衡位置,若<img file="FDA0000077738480000033.GIF" wi="457" he="126" />成立,则说弹性绳达到平衡位置,停止寻路,此时弹性绳所处的位置即为所要寻找的路径,其中ζ为判断平衡的迭代停止阀值,否则没有达到平衡位置,令A<sub>i</sub>=A<sub>i</sub>′(i=1,2,...,n),并返回步骤二。
地址 150001 黑龙江省哈尔滨市南岗区南通大街145号