1. 功能說明
在機器人車體上安裝2個 灰度傳感器 ,實現機器人按照下圖所指定的路線進行導航運動,來模擬倉庫物流機器人按指定路線行進的工作過程。
2. 使用樣機
本實驗使用的樣機為R023e樣機。
3. 功能實現
在這個示例中,我們采用了以下硬件,請大家參考:
主控板 | Basra(兼容Arduino Uno) |
擴展板 | SH-01外圍電路擴展板(與Bigfish擴展板相似)? |
傳感器 | 灰度傳感器 |
電池 | 7.4V鋰電池 |
電路連接說明:
② 2個灰度傳感器分別接在擴展板的傳感器接口A0、A4上。
3.2 編寫程序
傳感器觸發情況、小車行駛狀態、對應行為策略表:
傳感器1 | 傳感器2 | 小車狀態 | 動作 |
0 | 1 | 小車左偏 | 向右調整 |
1 | 0 | 小車右偏 | 向左調整 |
1 | 1 | 到達終點 | 停止 |
0 | 0 | 正常 | 前進 |
① 根據實驗內容,利用多分支結構設計出程序流程圖。
機器人軌跡導航任務流程圖
② 根據設計好的程序流程圖進行編程,編寫并燒錄以下程序(blackline_4if.ino),該程序將實現演示視頻中的動作【完整例程源代碼下載詳見https://www.robotway.com/h-col-113.html】
編程環境:Arduino 1.8.19
/*------------------------------------------------------------------------------------ 版權說明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved. Distributed under MIT license.See file LICENSE for detail or copy at https://opensource.org/licenses/MIT by 機器譜 2023-02-09 https://www.robotway.com/ ------------------------------------------------------------------------------------*/ void turnleft_slow(); void forward(); void carstop(); void turnright_slow(); void setup() { pinMode( 18, INPUT); pinMode( 14, INPUT); pinMode( 10, OUTPUT); pinMode( 6, OUTPUT); pinMode( 5, OUTPUT); pinMode( 9, OUTPUT); } void loop() { if (( digitalRead(14) && digitalRead(18) )) { forward(); } if (( !( digitalRead(14) ) && digitalRead(18) )) { turnleft_slow(); } if (( digitalRead(14) && !( digitalRead(18) ) )) { turnright_slow(); } if (( !( digitalRead(14) ) && !( digitalRead(18) ) )) { carstop(); delay( 5000 ); } } void turnright_slow() { analogWrite(6 , 80); analogWrite(10 , 0); analogWrite(5 , 0); analogWrite(9 , 0); } void carstop() { analogWrite(6 , 0); analogWrite(10 , 0); analogWrite(5 , 0); analogWrite(9 , 0); } void turnleft_slow() { analogWrite(6 , 0); analogWrite(10 , 0); analogWrite(5 , 80); analogWrite(9 , 0); } void forward() { analogWrite(6 , 80); analogWrite(10 , 0); analogWrite(5 , 80); analogWrite(9 , 0); }
也可以使用if…else嵌套寫法(blackline_ifelse.ino)。
void stop(); void left(); void right(); void forwards(); void setup() { pinMode( 18, INPUT); pinMode( 14, INPUT); pinMode( 10, OUTPUT); pinMode( 6, OUTPUT); pinMode( 5, OUTPUT); pinMode( 9, OUTPUT); } void loop() { if (( !( digitalRead(14) ) && digitalRead(18) )) { right(); } else { if (( digitalRead(14) && !( digitalRead(18) ) )) { left(); } else { if (( !( digitalRead(14) ) && !( digitalRead(18) ) )) { stop(); } else { forwards(); } } } } void stop() { analogWrite(5 , 0); analogWrite(9 , 0); analogWrite(6 , 0); analogWrite(10 , 0); } void right() { analogWrite(5 , 150); analogWrite(9 , 0); analogWrite(6 , 0); analogWrite(10 , 150); } void forwards() { analogWrite(5 , 150); analogWrite(9 , 0); analogWrite(6 , 150); analogWrite(10 , 0); } void left() { analogWrite(5 , 0); analogWrite(9 , 150); analogWrite(6 , 150); analogWrite(10 , 0); }
審核編輯黃宇
?
-
傳感器
+關注
關注
2548文章
50698瀏覽量
752073 -
機器人
+關注
關注
210文章
28212瀏覽量
206568
發布評論請先 登錄
相關推薦
評論