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

主站蜘蛛池模板: 国产综合在线观看视频| www亚洲天堂| 久久香蕉国产线看观看式| 97成人在线观看| 88国产经典欧美一区二区三区| 四虎影视8848永久精品| 成年人福利视频| 女人av社区男人的天堂| 色婷婷综合在线| 免费毛片网站在线观看| 思思热精品在线8| 一区二区三区成人| 乱人伦视频中文字幕在线| 欧美精品aⅴ在线视频| 巨熟乳波霸若妻中文观看免费| 99ri精品视频在线观看播放| 欧美日韩一区二区在线免费观看| 亚洲精品制服丝袜二区| 亚洲中文无码av永久伊人| 黄色网站不卡无码| 亚洲最大看欧美片网站地址| 狠狠v日韩v欧美v| 日本精品视频| 国产爽爽视频| 亚洲AⅤ无码国产精品| 国产精品九九视频| 日本亚洲国产一区二区三区| 亚洲精品成人福利在线电影| 国产精品欧美激情| 91无码网站| 成人在线观看不卡| 亚洲成人网在线观看| 中文字幕在线播放不卡| 狠狠综合久久| 看看一级毛片| 天天爽免费视频| 东京热一区二区三区无码视频| 成人在线不卡视频| 国产精品原创不卡在线| 精品国产一二三区| 成人毛片免费观看| 国产精品久久久久久影院| 久久免费精品琪琪| 国产欧美日韩视频怡春院| 白浆免费视频国产精品视频| 国产欧美自拍视频| h网站在线播放| 亚洲国产成人久久精品软件| 天天色天天综合网| 日韩一区精品视频一区二区| 国产一区二区三区在线无码| 成人国产一区二区三区| 亚洲日韩国产精品无码专区| 国产免费网址| 久久精品66| 国产中文一区二区苍井空| 欧美福利在线| 91免费精品国偷自产在线在线| a网站在线观看| 美女一区二区在线观看| 日韩精品欧美国产在线| 国产又粗又猛又爽| 欧美日韩国产在线人| 国产成人高清在线精品| 99国产在线视频| 在线观看国产精品日本不卡网| 国产网站免费看| 免费女人18毛片a级毛片视频| 国产免费自拍视频| 好吊日免费视频| 久青草免费视频| 草逼视频国产| 国产91九色在线播放| 国产导航在线| 无码'专区第一页| 精品国产aⅴ一区二区三区| 国产导航在线| 伊人色天堂| 国产女人18毛片水真多1| 亚洲免费成人网| 国产精品第5页| 蜜桃臀无码内射一区二区三区|