发明名称 一种轮式机器人位姿解算方法
摘要 本发明公开了一种轮式机器人位姿解算方法,该方法至少包含以下步骤:步骤1、测量机器人平台的结构参数、求取编码器的特性参数,并确定编码器脉冲输出与嵌入式控制板外部中断之间的连接关系;步骤2、确定四个轮子的转向;步骤3、置位表征四个轮子着地或打滑的状态标志;步骤4、确定左侧和右侧轮子编码器的有效脉冲计数值;步骤5、计算单元求取机器人的相对位移和转角;步骤6、计算单元求取后一时刻机器人相对于全局坐标下的位姿。本发明仅使用轮式机器人轮子上装配的编码器进行机器人的位姿解算,而不需要任何其它的惯性器件辅助,使用编码器能同时解算机器人的两个采样时刻间的位移和转角,增强了机器人的紧凑度和可靠性,节约了成本。
申请公布号 CN103389087B 申请公布日期 2016.06.15
申请号 CN201310342103.1 申请日期 2013.08.07
申请人 上海海事大学 发明人 孙作雷;曾连荪;张波;朱大奇;朱锦顺;范志杰
分类号 G01C21/00(2006.01)I 主分类号 G01C21/00(2006.01)I
代理机构 上海信好专利代理事务所(普通合伙) 31249 代理人 周荣芳
主权项 一种轮式机器人位姿解算方法,其特征在于,位姿解算方法至少包含以下步骤:步骤1、测量机器人平台的结构参数、求取编码器的特性参数,并确定编码器脉冲输出与嵌入式控制板外部中断之间的连接关系;所述的机器人平台包含计算单元;步骤2、计算单元记录一个采样周期内四个轮子编码器的脉冲数,得到四个轮子的转向;步骤2.1、计算单元记录编码器中断发生的时刻,并记录中断发生后编码器a路输出的电平值和b路输出的电平值;步骤2.2、计算单元计算编码器a路输出电平值和b路输出电平值的相异或值;步骤2.3、上位机根据编码器a路输出电平值和b路输出电平值的相异或值判断四个轮子的转向;步骤3、计算单元根据一个采样周期内各轮子的编码器脉冲计数置位表征四个轮子着地或打滑的状态标志;步骤3.1、设定阀度M<sub>d</sub>,判断轮子转数之间的差值是否在阀度M<sub>d</sub>内;步骤3.2、计算单元分别求取编码器同侧轮子脉冲计数的绝对值的差值;步骤3.3、计算单元判断同侧轮子脉冲计数的绝对值的差值是否大于阀度M<sub>d</sub>;步骤3.4、计算单元根据不同侧轮子脉冲计数的绝对值的差值否大于阀度M<sub>d</sub>,确定各轮子着地或打滑的状态标志Λ;步骤4、计算单元根据一个采样周期内四个轮子的编码器脉冲计数的原始数据确定左侧轮子编码器的有效脉冲计数值和右侧轮子编码器的有效脉冲计数值;步骤5、计算单元求取机器人一个采样周期内前一时刻t‑1和后一时刻t的相对位移和转角;步骤5.1、计算单元计算编码器的测量系数λ,公式为λ=mnω,式中m为机器人减速电机的减速比,n为编码器的分辨率,ω为用来读取编码器的微控制器的中断编程系数;步骤5.2、当左前轮和右前轮为有效轮时,即状态标志Λ=0x11,计算单元求出相对位移s<sub>t</sub>和相对转角Φ<sub>t</sub>如下:<maths num="0001"><math><![CDATA[<mrow><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>C</mi><mrow><mo>(</mo><msub><mi>N</mi><mrow><mi>r</mi><mi>i</mi><mi>g</mi><mi>h</mi><mi>t</mi></mrow></msub><mo>-</mo><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mrow><mi>&lambda;</mi><mi>B</mi></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000021.GIF" wi="405" he="107" /></maths><maths num="0002"><math><![CDATA[<mrow><msub><mi>s</mi><mi>t</mi></msub><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>C</mi><mrow><mo>(</mo><msub><mi>N</mi><mrow><mi>r</mi><mi>i</mi><mi>g</mi><mi>h</mi><mi>t</mi></mrow></msub><mo>+</mo><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mrow><mn>2</mn><mi>&lambda;</mi></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000022.GIF" wi="404" he="101" /></maths>式中:λ为编码器的测量系数,N<sub>left</sub>为左侧轮子编码器的有效脉冲计数值,N<sub>right</sub>为右侧轮子编码器的有效脉冲计数值,B为机器人左右轮之间的轮距,C为机器人轮子的周长;步骤5.3、当左后轮和右后轮为有效轮时,即状态标志Λ=0x00,计算单元求出相对位移s<sub>t</sub>和相对转角Φ<sub>t</sub>如下:<maths num="0003"><math><![CDATA[<mrow><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>C</mi><mrow><mo>(</mo><msub><mi>N</mi><mrow><mi>r</mi><mi>i</mi><mi>g</mi><mi>h</mi><mi>t</mi></mrow></msub><mo>-</mo><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mrow><mi>&lambda;</mi><mi>B</mi></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000023.GIF" wi="404" he="102" /></maths><maths num="0004"><math><![CDATA[<mrow><msub><mi>s</mi><mi>t</mi></msub><mo>&DoubleLeftArrow;</mo><msub><mi>&Phi;</mi><mi>t</mi></msub><msqrt><mrow><msup><mrow><mo>(</mo><msub><mi>R</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>+</mo><mfrac><mi>B</mi><mn>2</mn></mfrac><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mi>L</mi><mn>2</mn></msup></mrow></msqrt><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000024.GIF" wi="500" he="109" /></maths>式中:λ为编码器的测量系数,N<sub>left</sub>为左侧轮子编码器的有效脉冲计数值,N<sub>right</sub>为右侧轮子编码器的有效脉冲计数值,R<sub>left</sub>为左轮距转弯圆心的半径,C为机器人轮子的周长,B为机器人左右轮之间的轮距,L为同侧前后轮的轮距;步骤5.4、当左后轮和右前轮为有效轮时,即状态标志Λ=0x01时,计算单元求出相对位移s<sub>t</sub>和相对转角Φ<sub>t</sub>如下:<maths num="0005"><math><![CDATA[<mrow><mi>&xi;</mi><mo>&DoubleLeftArrow;</mo><msqrt><mrow><msup><mi>B</mi><mn>2</mn></msup><mo>+</mo><msup><mi>L</mi><mn>2</mn></msup></mrow></msqrt><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000025.GIF" wi="278" he="70" /></maths><maths num="0006"><math><![CDATA[<mrow><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>C</mi><mrow><mo>(</mo><msub><mi>N</mi><mrow><mi>r</mi><mi>i</mi><mi>g</mi><mi>h</mi><mi>t</mi></mrow></msub><mo>-</mo><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mrow><mi>&lambda;</mi><mi>&xi;</mi></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000026.GIF" wi="405" he="110" /></maths><maths num="0007"><math><![CDATA[<mrow><msub><mi>R</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>&DoubleLeftArrow;</mo><mfrac><mrow><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mi>&xi;</mi></mrow><mrow><msub><mi>N</mi><mrow><mi>r</mi><mi>i</mi><mi>g</mi><mi>h</mi><mi>t</mi></mrow></msub><mo>-</mo><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000027.GIF" wi="382" he="110" /></maths><maths num="0008"><math><![CDATA[<mrow><mi>&eta;</mi><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>L</mi><mrow><mo>(</mo><mi>&xi;</mi><mo>+</mo><msub><mi>R</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mi>&xi;</mi></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000028.GIF" wi="302" he="106" /></maths><maths num="0009"><math><![CDATA[<mrow><mi>&delta;</mi><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>B</mi><mrow><mo>(</mo><mi>&xi;</mi><mo>+</mo><msub><mi>R</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mi>&xi;</mi></mfrac><mo>-</mo><mfrac><mi>B</mi><mn>2</mn></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000031.GIF" wi="381" he="110" /></maths><maths num="0010"><math><![CDATA[<mrow><msub><mi>S</mi><mi>t</mi></msub><mo>&DoubleLeftArrow;</mo><msub><mi>&Phi;</mi><mi>t</mi></msub><msqrt><mrow><msup><mi>&eta;</mi><mn>2</mn></msup><mo>+</mo><msup><mi>&delta;</mi><mn>2</mn></msup></mrow></msqrt><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000032.GIF" wi="333" he="86" /></maths>式中:λ为编码器的测量系数,N<sub>left</sub>为左侧轮子编码器的有效脉冲计数值,N<sub>right</sub>为右侧轮子编码器的有效脉冲计数值,R<sub>left</sub>为左轮距转弯圆心的半径,C为机器人轮子的周长,B为机器人左右轮之间的轮距,L为同侧前后轮的轮距;步骤5.5、当左前轮和右后轮为有效轮时,即状态标志Λ=0x10时,此时计算单元求出相对位移s<sub>t</sub>和相对转角Φ<sub>t</sub>如下:<maths num="0011"><math><![CDATA[<mrow><mi>&xi;</mi><mo>&DoubleLeftArrow;</mo><msqrt><mrow><msup><mi>B</mi><mn>2</mn></msup><mo>+</mo><msup><mi>L</mi><mn>2</mn></msup></mrow></msqrt><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000033.GIF" wi="278" he="70" /></maths><maths num="0012"><math><![CDATA[<mrow><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>C</mi><mrow><mo>(</mo><msub><mi>N</mi><mrow><mi>r</mi><mi>i</mi><mi>g</mi><mi>h</mi><mi>t</mi></mrow></msub><mo>-</mo><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mrow><mi>&lambda;</mi><mi>&xi;</mi></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000034.GIF" wi="405" he="110" /></maths><maths num="0013"><math><![CDATA[<mrow><msub><mi>R</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>&DoubleLeftArrow;</mo><mfrac><mrow><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mi>&xi;</mi></mrow><mrow><msub><mi>N</mi><mrow><mi>r</mi><mi>i</mi><mi>g</mi><mi>h</mi><mi>t</mi></mrow></msub><mo>-</mo><msub><mi>N</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub></mrow></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000035.GIF" wi="382" he="110" /></maths><maths num="0014"><math><![CDATA[<mrow><mi>&eta;</mi><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>B</mi><mrow><mo>(</mo><mfrac><mi>&xi;</mi><mn>2</mn></mfrac><mo>+</mo><msub><mi>R</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mi>&xi;</mi></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000036.GIF" wi="315" he="124" /></maths><maths num="0015"><math><![CDATA[<mrow><mi>&delta;</mi><mo>&DoubleLeftArrow;</mo><mfrac><mrow><mi>L</mi><mrow><mo>(</mo><mfrac><mi>&xi;</mi><mn>2</mn></mfrac><mo>+</mo><msub><mi>R</mi><mrow><mi>l</mi><mi>e</mi><mi>f</mi><mi>t</mi></mrow></msub><mo>)</mo></mrow></mrow><mi>&xi;</mi></mfrac><mo>-</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000037.GIF" wi="386" he="126" /></maths><maths num="0016"><math><![CDATA[<mrow><msub><mi>S</mi><mi>t</mi></msub><mo>&DoubleLeftArrow;</mo><msub><mi>&Phi;</mi><mi>t</mi></msub><msqrt><mrow><msup><mi>&eta;</mi><mn>2</mn></msup><mo>+</mo><msup><mi>&delta;</mi><mn>2</mn></msup></mrow></msqrt><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000038.GIF" wi="332" he="86" /></maths>式中:λ为编码器的测量系数,N<sub>left</sub>为左侧轮子编码器的有效脉冲计数值,N<sub>right</sub>为右侧轮子编码器的有效脉冲计数值,R<sub>left</sub>为左轮距转弯圆心的半径,C为机器人轮子的周长,B为机器人左右轮之间的轮距,L为同侧前后轮的轮距;步骤6、计算单元根据前一时刻t‑1机器人在全局坐标下的位姿、前一时刻t‑1和后一时刻t下机器人的相对位移和转角,求取后一时刻t机器人相对于全局坐标下的位姿;步骤6.1、计算单元求取机器人在全局坐标系下后一时刻t,机器人位姿的横坐标<img file="FDA0000927846700000041.GIF" wi="78" he="67" />公式为:<maths num="0017"><math><![CDATA[<mrow><msubsup><mi>x</mi><mi>w</mi><mi>t</mi></msubsup><mo>&DoubleLeftArrow;</mo><msub><mi>S</mi><mi>t</mi></msub><mi>cos</mi><mrow><mo>(</mo><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>)</mo></mrow><mi>cos</mi><mrow><mo>(</mo><msubsup><mi>&theta;</mi><mi>w</mi><mrow><mi>t</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo></mrow><mo>-</mo><msub><mi>S</mi><mi>t</mi></msub><mi>sin</mi><mrow><mo>(</mo><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>)</mo></mrow><mi>sin</mi><mrow><mo>(</mo><msubsup><mi>&theta;</mi><mi>w</mi><mrow><mi>t</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo></mrow><mo>+</mo><msubsup><mi>x</mi><mi>w</mi><mrow><mi>t</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000042.GIF" wi="933" he="63" /></maths>式中:<img file="FDA0000927846700000043.GIF" wi="78" he="61" />为航向角,s<sub>t</sub>为位移,<img file="FDA0000927846700000044.GIF" wi="76" he="63" />为前一时刻t‑1计算机器人在全局坐标系下位姿的横坐标Φ<sub>t</sub>为相对转角;步骤6.2、计算单元求取机器人在全局坐标系下后一时刻t,机器人位姿的纵坐标<img file="FDA0000927846700000045.GIF" wi="83" he="62" />公式为:<maths num="0018"><math><![CDATA[<mrow><msubsup><mi>y</mi><mi>w</mi><mi>t</mi></msubsup><mo>&DoubleLeftArrow;</mo><msub><mi>S</mi><mi>t</mi></msub><mi>cos</mi><mrow><mo>(</mo><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>)</mo></mrow><mi>sin</mi><mrow><mo>(</mo><msubsup><mi>&theta;</mi><mi>w</mi><mrow><mi>t</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo></mrow><mo>+</mo><msub><mi>S</mi><mi>t</mi></msub><mi>sin</mi><mrow><mo>(</mo><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>)</mo></mrow><mi>cos</mi><mrow><mo>(</mo><msubsup><mi>&theta;</mi><mi>w</mi><mrow><mi>t</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo></mrow><mo>+</mo><msubsup><mi>y</mi><mi>w</mi><mrow><mi>t</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>,</mo></mrow>]]></math><img file="FDA0000927846700000046.GIF" wi="932" he="63" /></maths>式中:<img file="FDA0000927846700000047.GIF" wi="88" he="63" />为前一时刻t‑1计算机器人在全局坐标系下位姿的航向角,s<sub>t</sub>为位移,<img file="FDA0000927846700000048.GIF" wi="81" he="63" />为前一时刻t‑1计算机器人在全局坐标系下位姿的横坐标;Φ<sub>t</sub>为相对转角;步骤6.3、计算单元求取机器人在全局坐标系下后一时刻t,机器人位姿的航向角<img file="FDA0000927846700000049.GIF" wi="78" he="62" />公式为:<maths num="0019"><math><![CDATA[<mrow><msubsup><mi>&theta;</mi><mi>w</mi><mi>t</mi></msubsup><mo>&DoubleLeftArrow;</mo><msubsup><mi>&theta;</mi><mi>w</mi><mrow><mi>t</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>+</mo><msub><mi>&Phi;</mi><mi>t</mi></msub><mo>,</mo></mrow>]]></math><img file="FDA00009278467000000410.GIF" wi="284" he="62" /></maths>式中:<img file="FDA00009278467000000411.GIF" wi="77" he="70" />为前一时刻t‑1计算机器人在全局坐标系下位姿的航向角,Φ<sub>t</sub>为相对转角;步骤6.4、将后一时刻t航向角<img file="FDA00009278467000000412.GIF" wi="52" he="62" />限定在定义域(‑π,π]中。
地址 201306 上海市浦东新区临港新城海港大道1550号