您可能已經注意到了,程式館中有一部分專門用於SR04超聲波測距儀。這是為了獲取有關機器人所處環境的一些資訊。當然,一個固定不動的感測器是不夠的,因此在上一篇文章中我們在一個額外的伺服系統上也安裝了一個感測器。
我相信大多數嘗試製造六足機器人的人對超聲波測距儀的工作原理是有一定程度瞭解的。對於與該感測器的介面我建議您使用AP_Utils::sr04_median函數。它可以提供程式館中所有SR04函數最準確的結果。您甚至可以輸出資料的單位,目前可以支援毫米、釐米和米!
重要提示: 請注意,您需要Adafruit PWM驅動程式程式館來使AP_Utils運行,您可以點擊此處下載。下載完成後,和其他Arduino程式館一樣對其進行安裝。
以下是一個非常簡單的“自主”模式的範例,使用了到目前為止我們所討論的所有內容:行走、轉向和從SR04中讀取距離。如果您認真閱讀了這篇文章,那麼應該能完全理解以下代碼中最重要部分的內容。有關所有函數的更多細節,請參考程式館資料夾中或GitHub 頁面上的 README.md文件。
Arduino 代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <AP_Utils.h> //define the pins that the SR04 is connected to #define TRIG 3 #define ECHO 2 //create an instance of AP_Utils class AP_Utils ardupod; //you will have to supply your own offsets here //see examples/calibration.ino for details int offsets[16] = {5, 0, 0, -7, 10, -3, 6, -4, 3, -5, 10, -3, 0, 0, 0, 0}; void setup() { //reset the robot ardupod.begin(offsets); } void loop() { //take one step directly forward ardupod.walk(0, 1); //if an obstacle is closer than 20 cm, we have to turn if(sr04_median(TRIG, ECHO, CM, 100, 500) < 20.0) { //turn 90 degrees to the right ardupod.turn(90); } } |
恭喜您完成了這個最具挑戰性的項目之一!做得很好!在嘗試使您自己的Ardupod行走之前,請確認同時運行範例資料夾中的calibration.ino 和 servo_test.ino。這對於正確設定所有伺服系統至關重要,這樣伺服系統才不會被損壞!在下一篇文章中,我們可能對此項目進行最後一次探索,以對一些機械性能較差的點進行改善,以及,更重要的是,增加一些改進的功能,例如遠端控制。