¹æÔòÒªÇó³µÁ¾Í¨¹ýÊ®×Ö½»²æÂ·¿ÚÐèÒªÖ±ÐУ¬²»ÔÊÐí×óת¡¢ÓÒת¡£ÈüµÀÈçͼ4.6Ëùʾ¡£Õâ¾ÍÐèÒªÎÒÃÇÄܹ»×¼ÇеÄÅжÏÊ®×Ö·ÀֹͼÏñ½«CCDµ±×÷ÍäµÀ½øÐд¦Àí¡£ÎÒÃǶÔÓÚÊ®×ÖµÄÅжÏÊÇÏÈÓõÚÈý¸öÒ²¾ÍÊÇ×îÔ¶µÄÄǸöCCD½øÐÐÔ¤ÅУ¬È»ºó¶ÔÓÚѰÏßÏÈÊÇÑ¡Ôñ×î½üµÄÄÇÒ»¸öCCD½øÐÐѰÏߣ¬µ±µÚ¶þ¸öCCD³öÊ®×ÖµÚÒ»¸öCCDÈëÊ®×ÖºóÓÖÑ¡ÔñµÚ¶þ¸öCCD½øÐÐѰÏߣ¬ÕâÑù¾ÍÄܹ»×¼È·µÄÅжϺʹ¦ÀíÊ®×Ö½»²æÂ·¿ÚÁË¡£¾ßÌå³ÌÐòÈçÏ£º
ͼ4.6 Ê®×Ö½»²æÂ·¿Ú
void cross_road()//Ê®×ÖccdÇл»,ÓÅÏÈÑ¡Ôñ½Ï½øµÄccdѲÏß {
cross_in_flag=0; cross_out_flag=0;
if(//ccd1_both_lost_count>=4 // &&
ccd3_roadwidth[0]>70 &&ccd3_roadwidth[1]>70 &&ccd3_roadwidth[2]>70 &&ccd3_roadwidth[3]>70
)//ccd3¶ªÏߣ¬µÚÈý¸öCCD½øÈëÊ®×Ö
{ccd3_cross_flag=1;} else ccd3_cross_flag=0; if(ccd1_roadwidth[0]>70 &&ccd1_roadwidth[1]>70 &&ccd1_roadwidth[2]>70 &&ccd1_roadwidth[3]>70
)//ccd1¶ªÏߣ¬µÚ¶þ¸öCCD½øÈëÊ®×Ö ccd1_cross_flag=1;
else ccd1_cross_flag=0; if(ccd2_roadwidth[0]>70 &&ccd2_roadwidth[1]>70 &&ccd2_roadwidth[2]>70
39
µÚ¾Å½ìÈ«¹ú´óѧÉúÖÇÄÜÆû³µÑûÇëÈü¼¼Êõ±¨¸æ
&&ccd2_roadwidth[3]>70
)//ccd1¶ªÏߣ¬µÚÒ»¸öCCD½øÈëÊ®×Ö {ccd2_cross_flag=1;}
else if(ccd1_cross_flag==1
&&ccd2_roadwidth[0]>70 &&ccd2_roadwidth[1]>70 )
{ccd2_cross_flag=1;} else ccd2_cross_flag=0;
if(ccd3_cross_flag==1&&ccd1_cross_flag==0&&ccd2_cross_flag==1)//ccd2Ê®×Ö£¬ccd1·ÇÊ®×Ö£¬ÓÅÏÈÑ¡ÔñÓÐЧ×î½üccdѲÏß {
if(ccd1_right_record[0]==1
&&ccd1_right_record[1]==1 &&ccd1_left_record[0]==1 &&ccd1_left_record[1]==1 &&ccd1_roadwidth[0]<45
&&ccd1_roadwidth[1]<45//ccd1ÒѾ³öÊ®×Ö,ÇÒËÑÏßÕý³££¬Æ«²îÓÐЧ
&&ccd1_roadwidth[2]<45 &&ccd1_roadwidth[3]<45 )
{cross_out_flag=1;bellring=100;} }
if(ccd2_cross_flag==1&&ccd1_cross_flag==1&&ccd3_cross_flag==0)//ccd2£¬ccd1Ê®×Ö£¬ccd3·ÇÊ®×Ö { if(
ccd3_right_record[0]==1
&&ccd3_right_record[1]==1 &&ccd3_left_record[0]==1 &&ccd3_left_record[1]==1 &&ccd3_roadwidth[0]<=70 &&ccd3_roadwidth[1]<=70 &&ccd3_roadwidth[2]<=70
)//ccd3ÒѾ³öÊ®×Ö£¬ÇÒËÑÏßÕý³££¬Æ«²îÓÐЧ {cross_in_flag=0;bellring=100;} } }
40
4.3.5 Õϰ²ßÂÔ·ÖÎö
ÈüµÀÕϰÊǶԳÆÐ¨ÐÎÌ壬³¤¿í¸ß·Ö±ðΪ 30¡¢10¡¢5ÀåÃס£Â·ÕÏÄÚ²à±ßÔµ¾àÀëÈüµÀÖÐÐÄÏß¾àÀëÊÇ 5 ÀåÃס£Â·ÕϵijöÏÖ¸øÖ±Á¢Ð¡³µ´øÀ´Á˷dz£´óµÄÓ°Ï죬ÈçÈôäĿµÄ³åײÉÏÈ¥£¬±ØÈ»»áµ¼Ö·³µ¶ùÎÞ·¨¼ÌÐø½øÐб¾È¦µÄ±ÈÈü£¬Òò´Ë£¬ÎÒÃDz»µÃ²»¶ÔÆä½øÐмì²â£¬µ±CCD¼ì²âµ½Á¬Ðø4³¡È«ºÚµÄÇé¿öÏ£¬ÎÒÃDZãĬÈÏΪС³µÇ°·½³öÏÖÁË·ÕÏ£¬²¢¶ÔËÙ¿ØÒÔ¼°×ªÏò½øÐд¦Àí£¬½ø¶ø´ïµ½Æ½Îȹý·ÕϵÃЧ¹û¡£
ͼ4.7 ·ÕÏ
4.3.6 ÆÂµÀ²ßÂÔ·ÖÎö
CCDÔÚÈëÆÂµÀʱ£¬ÓÉÓÚÑöÊÓ£¬CCD¿´²»µ½ÆÂµÀÐÅÏ¢£¬ÇÒCCD¼ì²â²»³öÊÇ·ñ´¦ÓÚÆÂµÀ¡£ÎÒÃÇÀûÓÃÍÓÂÝÒÇÔÚ´¹Ö±Ë®Æ½ÃæµÄ·½ÏòÉϵĽÇËÙ¶È»ý·ÖÀ´Åб𣬵±»ý·ÖÖµ´óÓÚÉ趨ֵ£¬¼´ÈÏΪ£¬´¦ÓÚÉÏÆÂ½×¶Î¡£Í¬ÑùÒ²ÄÜÅбðÏÂÆÂ¡£
4.4¶ÔËٶȵıջ·¿ØÖÆ
ͼ4.7 PID¿ØÖƹ¤×÷ÔÀí
PID¿ØÖƲßÂÔÆä½á¹¹¼òµ¥£¬Îȶ¨ÐԺ㬿ɿ¿ÐԸߣ¬²¢ÇÒÒ×ÓÚʵÏÖ¡£ÆäȱµãÔÚÓÚ¿ØÖÆÆ÷µÄ²ÎÊýÕû¶¨Ï൱·±Ëö£¬ÐèÒªºÜÇ¿µÄ¹¤³Ì¾Ñé¡£Ïà¶ÔÓÚÆäËûµÄ¿ØÖÆ·½Ê½£¬ÔÚ³ÉÊìÐԺͿɲÙ×÷ÐÔÉ϶¼ÓÐןܴóµÄÓÅÊÆ¡£ËùÒÔ×îºóÎÒÃÇÑ¡ÔñÁËPIDµÄ¿Ø
41
µÚ¾Å½ìÈ«¹ú´óѧÉúÖÇÄÜÆû³µÑûÇëÈü¼¼Êõ±¨¸æ
ÖÆ·½Ê½¡£
ÔÚС³µÅܶ¯ÖУ¬ÒòΪ²»ÐèÒª¿¼ÂÇС³µÖ®Ç°×ß¹ýµÄ·Ïߣ¬ËùÒÔ£¬ÎÒÃÇÉáÆúÁËI¿ØÖÆ£¬½«Ð¡³µ×ªÏòµÄPID¿ØÖƼò»¯³ÉPD¿ØÖÆ¡£
steer_d = steer_kn+char_abs((int)(diserror))*d_rate;//תÏòD¸úËæÆ«²î±ä»¯ÂÊ
steerpwmout=temp*(steer_control_count+1)/5+steerpwmold;
±¾·½°¸ÖÐͨ¹ýË«µç»úµÄ²îËÙ¿ØÖƲÉÓÃλÖÃʽµÄPD¿ØÖÆ£¬Ëٶȱջ·¿ØÖƲÉÓÃÁËλÖÃʽPI¿ØÖÆ¡£
speed_pout=speed_kp*(speed_error);
ËÙ¶ÈI¿ØÖÆ£¬»ý·Ö·ÖÀë,ÔÚÆ«²î¹ý´óʱ¹Ø±Õ»ý·Ö¡£ if (speed_error<=15&&speed_error>=-15) {speed_integration+=speed_ki*speed_error;}
if(speed_integration>=180)//»ý·ÖÏÞ·ù£¬ÐèÒª²âÊÔÈ·¶¨ÏÞ·ùÖµ speed_integration=180;
if(speed_integration <=-180) speed_integration=-180;
speedpid_out =speed_integration+speed_pout; if(speedpid_out>=speedpidout_limit) speedpid_out=speedpidout_limit;
if(speedpid_out<=-speedpidout_limit) speedpid_out=-speedpidout_limit;
}
uint8 speed_sample_count=0;
void SpeedControlOut() //ËÙ¶ÈÆ½»¬Êä³ö {
speedpid_pwm=speedpidold_out+(speedpid_out-speedpidold_out)*(speed_sample_count+1)/50.0;
}
ÔÚ±¾·½°¸ÖУ¬Ê¹ÓÃÊÔ´Õ·¨À´È·¶¨¿ØÖÆÆ÷µÄ±ÈÀý¡¢»ý·ÖºÍ΢·Ö²ÎÊý¡£
ÊÔ´Õ·¨ÊÇͨ¹ý±Õ»·ÊÔÑ飬¹Û²ìϵͳÏìÓ¦ÇúÏߣ¬¸ù¾Ý¸÷¿ØÖƲÎÊý¶ÔϵͳÏìÓ¦µÄ´óÖÂÓ°Ï죬·´¸´ÊÔ´Õ²ÎÊý£¬ÒÔ´ïµ½ÂúÒâµÄÏìÓ¦£¬×îºóÈ·¶¨PID¿ØÖƲÎÊý¡£ÊÔ´Õ²»ÊÇäĿµÄ£¬¶øÊÇÔÚ¿ØÖÆÀíÂÛÖ¸µ¼Ï½øÐеġ£ÔÚ¿ØÖÆÀíÂÛÖÐÒÑ»ñµÃÈç϶¨ÐÔ֪ʶ£º
±ÈÀýµ÷½Ú£¨P£©×÷ÓãºÊǰ´±ÈÀý·´Ó¦ÏµÍ³µÄÆ«²î£¬ÏµÍ³Ò»µ©³öÏÖÁËÆ«²î£¬±ÈÀýµ÷½ÚÁ¢¼´²úÉúµ÷½Ú×÷ÓÃÓÃÒÔ¼õÉÙÆ«²î¡£±ÈÀý×÷Óô󣬿ÉÒÔ¼Ó¿ìµ÷½Ú£¬¼õÉÙÎó²î£¬µ«Êǹý´óµÄ±ÈÀý£¬Ê¹ÏµÍ³µÄÎȶ¨ÐÔϽµ£¬ÉõÖÁÔì³ÉϵͳµÄ²»Îȶ¨¡£
»ý·Öµ÷½Ú£¨I£©×÷ÓãºÊÇʹϵͳÏû³ýÎÈ̬Îó²î£¬Ìá¸ßÎÞ²î¶È¡£ÒòΪÓÐÎó²î£¬»ý·Öµ÷½Ú¾Í½øÐУ¬Ö±ÖÁÎ޲»ý·Öµ÷½ÚÍ£Ö¹£¬»ý·Öµ÷½ÚÊä³öÒ»³£Öµ¡£»ý·Ö×÷ÓõÄÇ¿ÈõÈ¡¾öÓë»ý·Öʱ¼ä³£ÊýTi£¬TiԽС£¬»ý·Ö×÷ÓþÍԽǿ¡£·´Ö®Ti´óÔò»ý·Ö
42