999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

機器人小車單眼循線方法實現

2018-01-17 12:39:15袁開鴻
電子技術與軟件工程 2017年22期

在機器人小車循線中,用于循線的數/模傳感器被稱做“眼睛”。本文對機器人小車單眼循線提出了三種方法,從理論上分析闡述實現三種單眼循線的原理思路。單眼循線具有設備簡單、程序代碼短、邏輯編程靈活等特點。單眼循線能有效的鍛煉的程序設計者的編程能力,是有效合理利用資源的典型編程案例。同時,輔助其它傳感器能有效的提高智能小車的平順和穩定性,具有良好的實際應用價值。

【關鍵詞】機器人小車 數/模傳感器 眼睛 單眼循線

本文探討機器人小車循線時使用單眼(一個模擬或數字傳感器)完成小車的循線操作。為了將問題抽象出來,本文不對機器人路口轉向展開討論,以小車沿線直走或走圈說明單眼循線的方法。

現在學習用機器人很多,本文采用亮寧機器人循線,也可用其它單片機。為了提高測試可靠性,采用模擬傳感器測試。

亮寧機器人使用anduino編程環境,函數在頭文件LNDZ.h中,包含有如下幾個主要函數:

voidinit()是void setup()函數別名,只執行一次;

void repeat()是void loop()函數別名,反復執行函數;

void motor(long,long) 定義左右輪的速度和轉向(正向前,負向后),形參long類型;如:motor(20,30); 小車是往前慢速大角度左轉,快速右轉可用motor(70,-70);速度范圍-100至100。

intAR()是analogRead()的別名,讀取模擬傳感器獲取返回值。接傳感器的模擬1號口,AR(1)表示從模擬1口接收讀取數據。

代碼中讀取數字,“0”、“1”分別代表眼睛讀取到白色、黑色區域的值;

直線循線一般采用兩眼,左右眼睛檢測叛斷,編程簡單。單眼循線設備簡單,偏左偏右調整需一只眼睛完成識別完成,如圖1所示,單眼循線。循線編程實現看似無法完成,只有一只眼睛,如何準確、有效完成循線呢?

首先循線時先要求固定小車走向,如左向走后,傳感器識別到變化后右向走,后面接著交替進行使小車走之字,完成循線過程。

這里列出了三種方法進行單眼循線。第一種也是最容易想到的單眼之字循線;第二種黑白交界線循線;第三種自動調整循線。

1 單眼之字循線

單眼之字循線原理圖如圖2中左圖a所示。小車左右行走路徑是之字型,眼睛識別黑線走,遇白色則掉頭往相反方向走。小車的速度量值低值、高值如用整型變量tnL,tnH保存,左轉:motor(tnL,tnH); 右轉:motor(tnH,tnL);

所以,程序代碼簡單為:

intad,dms=20,tnL=0,tnH=25;

void repeat()

{

do { motor(tnL,tnH);delay(dms); ad=( AR(1)>250?1:0); }while(ad==1);

do { motor(tnH,tnL); delay(dms); ad=(AR(1)>250?1:0); }while(ad==1);

}

程序中發現兩個代碼是一致的,只是左右輪數值相反。所以,寫一函數完成。

#include

inttnL=0,tnH=25;

void repeat() {turnLR(tnL,tnH); turnLR(tnH,tnL); }

voidturnLR(intturnL,intturnR)

{do { motor(turnL,turnR); delay(dms); ad=( AR(1)>250?1:0); }while(ad==1);}

實際上由于慣性,會如圖2中右圖b所示,沖出黑線區域,使小車不走動。程序還可以采用遇白色反向循環回到黑色區域。程序代碼如下:

#include

inttnL=20,tnH=40; //車速值

intdms=20; //延時20毫秒

bool ad; //存讀取的數據,為布爾型(只能存0或1數字值)

void init() { }

void repeat()

{

turnLR(tnL,tnH); turnQLR (tnH,0);turnLR(tnH,tnL); turnQLR(0,tnH);

}

void turnLR(intturnL,intturnR)

{

do

{ motor(turnL,turnR);delay(dms);

ad=( AR(1)>250?1:0);

}while(ad==1);

}

void turnQLR(intturnL,intturnR)

{

do{ motor(turnL,turnR); ad=(AR(1)>250?1:0);}while(ad==0) ; //遇白色反向急轉回

}

以上分析和實際操作可以看到,小車能左右搖晃的循寬線前行,單眼循線是可行的。

2 交界線循線

交界線循線是以黑線的兩條邊線存在有黑白的不同選定其中一條邊線完成循線的循線方法。如圖3所示,循線采用的也是之字型。由于如圖選取為右邊線,所以,開始的小車單眼放置黑線上,行進方向要保證為右轉進入右邊白色區域。達到之字型循線目的,可利用左右輪的一只輪子變速完成。

馬達的左輪速度值turnL不變,而語句turnR+=sign*(sg?10:6);使turnR總是低于、高于turnL保存的值,交替變化。用語句sign=-sign;在repeat循環里面,每輪循環都改變符號。“1”,“-1”交替變化。用語句sg=!sg;在repeat循環里面,每輪循環都會取反一次,“1”,“0”交替變化。

下列程序代碼左輪速度不變,右輪變速。

程序代碼如下:

#include

#define SPEED 20

bool s,sg=1;//s,sg布爾型,s存讀取數字值;sg存黑白的判別值,開始為“1”后為“0”。

intdms=3,sign=-1;

intturnL,turnR;//左右輪如果轉速不同,可視具體情況調整

voidinit(){ B_start(); turnL=turnR=SPEED;}

void repeat()

{

turnR+=sign*(sg?10:6); //10:6 表示加速量相對少,也可用turnR+=sign*SPEED

do{motor(turnL,turnR); delay(dms);}while(readData()==sg);// sg先黑后白

delay(4*dms); //到了交界線了,再繼續走一段。

turnR=SPEED;

sign=-sign; //sign第1次為“-1”,第2次為“1”,代表速度的加減

sg=!sg; //sg第1次為“1”,第2次為“0”,分別代表黑白區域的值

}

boolreadData(){ return s=AR(1)>250?1:0; }

從循寬線到循黑白交界線,其實基本的思維方式都是一樣。即圍繞著線調整后,總的方向還是循線走。

3 自動調整循線

前面兩種情況主要是以之字型向前行走的方式進行,左右搖擺行進。如果循線的線寬較窄,循線時易走偏。可采用自動調整循線法。

自動調整循線法指循線時如果走偏,不管是左偏還是右偏,在一定次數檢測中,都未檢測到黑線,則小車改為往相反方向行走,直至循到黑邊。

#include

#define SPEED 20

lclcd;

bool sg=1;

intmts=0,smts=5,dms=15,signL=-1,signR=1,error=0;

intturnL,turnR;

voidinit()

{

B_start();

lcd.begin(16,2);lcd.bg(1);

turnL=turnR=SPEED;

while(btns()==1){ s=readData();displayData(0,0,s); }

lcd.clear();

}

void repeat(){ goLine(turnL,turnR);displayData(0,0,error); }

boolreadData()

{

int s0=0,s1=0;

unsigned long temp=millis();

for(inti=0;i<2;i++) // 提高讀數可靠性,讀兩次

{

if((AR(1)>320?1:0)==1) s0++;if((AR(1)>320?1:0)==0) s1++;

}

displayData(0,1,1000*(millis()-temp));if(s0==2) return 1;if(s1==2) return 0;

error++; return 2;

}

voidgoLine(intleft,int right)

{ //直線往前走,走出黑線,退出循環

do{ motor(left,right);delay(dms); }while(readData()==sg);

delay(dms/2);// 調整更多一點,避免太靠近黑線

sg=!sg;//sg取反

do

{ //signL與signR符號總是相反

motor(signL*left*2/3,signR*right*2/3);mts++;//delay(dms/2);

if(mts>smts) { signL=-signL; signR=-signR; mts=-1000*smts; }

}while(readData()==sg); mts=0;sg=!sg;

}

voiddisplayData(intcol,introw,int di)

{

lcd.clear(); lcd.setCursor(col,row);lcd.print(di);

}

4 總結

單眼循線設備簡單、程序編寫容易實現,可根據實際情況選擇合理的循線方法。單眼循線對學習者提高編程能力有極大的幫助,是合理使用資源的典型編程案例。同時,輔助其它傳感器能有效的提高智能小車的平順和穩定性,具有很好的實用價值。

(通訊作者:魏麗君)

參考文獻

[1]張男,毛瓊.PID模糊控制器的設計及在智能車轉向控制上的應用[J].科技風,2012,49(05):66-67.

[2]周南.基于圖像識別的智能小車路徑跟隨系統設計[D].湖南大學(碩士學位論文),2016.

[3]汪明磊.智能車輛自主導航中避障路徑規劃與跟蹤控制研究[D].合肥工業大學博士學位論文,2013:52-64.

[4]劉巍.自動導引小車_AGV_控制系統研究[D].吉林大學(碩士學位論文),2015.

作者簡介

袁開鴻(1965-),男,畢業于湖南師范大學,大學本科學歷。副教授。主要研究方向為計算機算法、電子技術。

魏麗君(1983-),男,畢業于中南大學,碩士,講師。主要研究方向為電子技術、傳感器技術應用。

作者單位

湖南鐵道職業技術學院 湖南省株洲市 412001

主站蜘蛛池模板: 国产91无码福利在线| 亚洲男人天堂久久| 亚洲精选高清无码| 亚洲欧美精品日韩欧美| 精品伊人久久久久7777人| 国产爽妇精品| 人人91人人澡人人妻人人爽| 国产精品白浆无码流出在线看| 国产新AV天堂| 高清无码手机在线观看| 亚洲愉拍一区二区精品| 欧美精品成人一区二区在线观看| 亚洲综合香蕉| 久久亚洲日本不卡一区二区| 91精品网站| 国产精品网址你懂的| 欧美a级完整在线观看| 国产日韩精品一区在线不卡| 免费毛片在线| 欧美久久网| 91www在线观看| 亚洲欧洲综合| 国产最新无码专区在线| 国内毛片视频| 国产美女久久久久不卡| 国产欧美日韩一区二区视频在线| 国产乱人乱偷精品视频a人人澡| 日韩在线1| 一级毛片视频免费| 国产男女免费视频| 无码不卡的中文字幕视频| 精品自窥自偷在线看| 国产99视频免费精品是看6| 国产欧美视频在线观看| 日韩在线成年视频人网站观看| 欧美乱妇高清无乱码免费| 区国产精品搜索视频| 免费中文字幕一级毛片| 91精品啪在线观看国产60岁 | 九九九精品成人免费视频7| 亚洲国产无码有码| 天天躁夜夜躁狠狠躁图片| 亚洲一级无毛片无码在线免费视频| 久久这里只有精品2| 97久久精品人人| 欧美影院久久| 天堂av综合网| 久久福利网| 怡红院美国分院一区二区| 中文字幕av一区二区三区欲色| 国产拍揄自揄精品视频网站| 91破解版在线亚洲| 真实国产乱子伦视频| 欧美亚洲网| 精品视频一区在线观看| 亚洲国产天堂久久综合| 人妻21p大胆| AV网站中文| 国产亚洲精品91| 天堂在线视频精品| 国产波多野结衣中文在线播放| 999国产精品| 国产小视频免费观看| 麻豆国产原创视频在线播放| 99热最新网址| 日韩av手机在线| 在线观看精品自拍视频| 国产麻豆aⅴ精品无码| 全免费a级毛片免费看不卡| 久久无码免费束人妻| 国产福利在线免费| 精品一区二区无码av| 亚洲bt欧美bt精品| 亚洲中文字幕日产无码2021| 久久伊人久久亚洲综合| 亚洲V日韩V无码一区二区| 国产91导航| 91精品在线视频观看| 尤物亚洲最大AV无码网站| 免费人成视网站在线不卡| 久久久久久久久亚洲精品| 欧美翘臀一区二区三区|