⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 [原创]循线算法原理与实践.htm

📁 机器人应用的全套实例寻机小车
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      <BR>*&nbsp;&nbsp;说明:&nbsp;&nbsp;&nbsp;&nbsp;该函数放在定时器或者主循环里面用于产生软PWM* 
      <BR>********************************************************/ 
      <BR>void&nbsp;SpeedPWM(char&nbsp;PWMLine) <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;PWMLine_L&nbsp;=&nbsp;PWMLine; 
      <BR>char&nbsp;PWMLine_R&nbsp;=&nbsp;PWMLine; 
      <BR>static&nbsp;char&nbsp;PWMCount_L&nbsp;=&nbsp;0; 
      <BR>static&nbsp;char&nbsp;PWMCount_R&nbsp;=&nbsp;0; 
      <BR><BR>char&nbsp;Temp&nbsp;=&nbsp;0; 
      <BR><BR>if&nbsp;(FollowLineEnable&nbsp;==&nbsp;True) <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temp&nbsp;=&nbsp;(char)fabs((float)CG_X); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(AdcValueFlag&nbsp;==&nbsp;0) 
      <BR>&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temp&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;else <BR>&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(CG_X&nbsp;&lt;0) 
      <BR>&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((Temp&lt;&lt;4)&nbsp;&lt;=&nbsp;PWMLine_R) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWMLine_R&nbsp;-=&nbsp;((Temp&lt;&lt;5)+Temp&lt;&lt;2); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;else 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWMLine_R&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;} 
      <BR>&nbsp;&nbsp;&nbsp;else <BR>&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((Temp&lt;&lt;4)&nbsp;&lt;=&nbsp;PWMLine_L) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWMLine_L&nbsp;-=&nbsp;(Temp&lt;&lt;5); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;else 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWMLine_L&nbsp;=&nbsp;0; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;} 
      <BR>} <BR><BR>PWMCount_L&nbsp;++; <BR>PWMCount_R&nbsp;++; 
      <BR>if&nbsp;(PWMCount_L&nbsp;&gt;&nbsp;Fastest) <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWMCount_L&nbsp;=&nbsp;Stop; <BR>} 
      <BR>if&nbsp;(PWMCount_R&nbsp;&gt;&nbsp;Fastest) <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWMCount_R&nbsp;=&nbsp;Stop; <BR>} 
      <BR><BR>if&nbsp;(PWMCount_L&nbsp;&lt;&nbsp;PWMLine_L) <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(GoDirection) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Front: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Left_GoFront; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Back: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Left_GoBack; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Left: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Left_GoFront; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Right: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Left_GoBack; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Stop: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Left_Stop_Free; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>} <BR>else <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Left_Stop_Free; <BR>} 
      <BR><BR>if&nbsp;(PWMCount_R&nbsp;&lt;&nbsp;PWMLine_R) <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(GoDirection) 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Front: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Right_GoFront; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Back: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Right_GoBack; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Left: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Right_GoBack; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Right: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Right_GoFront; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Stop: 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Right_Stop_Free; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>} <BR>else <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Motor_Right_Stop_Free; <BR>} <BR>} 
      <BR><BR><BR>/******************************************************** 
      <BR>*&nbsp;&nbsp;函数说明:获取偏离轨迹线的数值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* 
      <BR>*&nbsp;&nbsp;输入:&nbsp;&nbsp;&nbsp;&nbsp;表明寻线状态的字节&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* 
      <BR>*&nbsp;&nbsp;[说明]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* 
      <BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过类质心算法获取当前机器人偏离轨迹线的量&nbsp;&nbsp;* 
      <BR>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;表示偏左&nbsp;+&nbsp;表示偏右&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* 
      <BR>********************************************************/ 
      <BR>signed&nbsp;char&nbsp;GetCG_X(unsigned&nbsp;char&nbsp;AdcValues) <BR>{ 
      <BR>signed&nbsp;char&nbsp;a&nbsp;=&nbsp;0; 
      <BR>signed&nbsp;char&nbsp;Temp&nbsp;=&nbsp;0; 
      <BR>signed&nbsp;char&nbsp;Totals&nbsp;=&nbsp;0; 
      <BR>for&nbsp;(a&nbsp;=&nbsp;0;a&lt;8;a++) <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;if&nbsp;((AdcValues&nbsp;&lt;&lt;a)&gt;&gt;7) 
      <BR>&nbsp;&nbsp;&nbsp;{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temp&nbsp;+=&nbsp;((-7)+&nbsp;(a&lt;&lt;1)); 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;Totals++; <BR>&nbsp;&nbsp;&nbsp;} <BR>} 
      <BR><BR>if&nbsp;(Totals&nbsp;==0) <BR>{ 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;0; <BR>} 
      <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;(Temp&nbsp;/&nbsp;Totals); 
      <BR>} <BR><BR>函数调用GetCG_X函数,用来获取CG_X,CG_X直接在PWM输出函数里面指导机器人的运动。 
      <BR><BR>以上方法的好处是,提供了一个比例调节循线动作的可能。支持多传感器的情况,尤其适合线性CCD类的线性数据的处理。为机器人提供了一个相对完整的视觉,不可能出现无法识别的情况,而且,这种情况可以使机器人在不加修改程序的情况下直接在在白线循线和黑线循线状态下切换。 
      <BR></FONT></TD></TR>
  <TR>
    <TD class=f03 
    style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: #ffffff 0.5pt solid" 
    vAlign=bottom bgColor=#d1d9e2>__________________________<BR><IMG 
      src="[原创]循线算法原理与实践.files/armok01129547.jpg"> </TD></TR>
  <TR>
    <TD class=f03 
    style="BORDER-RIGHT: #ffffff 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: #bbbbbb 0.5pt solid; BORDER-BOTTOM: #bbbbbb 0.5pt solid" 
    align=left width="19%" bgColor=#d1d9e2><IMG height=1 src="" 
      width=7>2005-10-26,17:46:44 </TD>
    <TD class=f03 
    style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: #bbbbbb 0.5pt solid" 
    vAlign=top width="81%" bgColor=#d1d9e2 ?>
      <TABLE width="100%">
        <TBODY>
        <TR>
          <TD align=left><IMG height=1 src="" width=7> <A class=tt4 
            href="http://www.ouravr.com/bbs/user_information.jsp?user_name=Gorgon Meducer" 
            target=_blank>资料</A> <IMG height=1 src="" width=7> <A class=tt4 
            href="mailto:Embedded_Zhuoran@hotmail.com">邮件</A> <IMG height=1 
            src="" width=7> </TD>
          <TD align=right><IMG height=1 src="" width=2> <IMG height=1 src="" 
            width=2> <IMG height=1 src="" width=2> <IMG height=1 src="" width=2> 
            <IMG height=1 src="" width=2> <IMG height=1 src="" width=2> <SPAN 
            class=f01>编辑</SPAN> <IMG height=1 src="" width=7> <SPAN 
            class=f01>删除</SPAN> <IMG height=1 src="" width=7> <IMG height=1 
            src="" width=7> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0 
cellPadding=6 width="100%" border=0>
  <TBODY>
  <TR>
    <TD class=f03 
    style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: #bbbbbb 0.5pt solid; BORDER-BOTTOM: #bbbbbb 0.5pt solid" 
    vAlign=top align=left width="19%" bgColor=#e8e8e8 rowSpan=2>【5楼】 <FONT 
      color=#000000>ljpfjfj </FONT><BR>积分:<FONT 
      color=#000000>136</FONT><BR>派别:<FONT color=#000000></FONT><BR>等级:<FONT 
      color=#000000>------</FONT><BR>来自:<FONT color=#000000></FONT><BR></TD>
    <TD class=f03 
    style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" 
    vAlign=top width="81%" bgColor=#e8e8e8><FONT color=#000000>好文章.</FONT> 
  </TD></TR>
  <TR>
    <TD class=f03 
    style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: #bbbbbb 0.5pt solid" 
    vAlign=bottom bgColor=#e8e8e8>  </TD></TR>
  <TR>
    <TD class=f03 
    style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: #bbbbbb 0.5pt solid; BORDER-BOTTOM: #bbbbbb 0.5pt solid" 
    align=left width="19%" bgColor=#e8e8e8><IMG height=1 src="" 
      width=7>2005-10-29,07:37:39 </TD>
    <TD class=f03 
    style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: #bbbbbb 0.5pt solid" 
    vAlign=top width="81%" bgColor=#e8e8e8 ?>
      <TABLE width="100%">
        <TBODY>
        <TR>
          <TD align=left><IMG height=1 src="" width=7> <A class=tt4 
            href="http://www.ouravr.com/bbs/user_information.jsp?user_name=ljpfjfj" 
            target=_blank>资料</A> <IMG height=1 src="" width=7> <SPAN 
            class=f01>邮件</SPAN> <IMG height=1 src="" width=7> </TD>
          <TD align=right><IMG height=1 src="" width=2> <IMG height=1 src="" 
            width=2> <IMG height=1 src="" width=2> <IMG height=1 src="" width=2> 
            <IMG height=1 src="" width=2> <IMG height=1 src="" width=2> <SPAN 
            class=f01>编辑</SPAN> <IMG height=1 src="" width=7> <SPAN 
            class=f01>删除</SPAN> <IMG height=1 src="" width=7> <IMG height=1 
            src="" width=7> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0 
cellPadding=6 width="100%" border=0>
  <TBODY>
  <TR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -