Robofun 機器人論壇

標題: 自走車循跡 銳角的問題 [打印本頁]

作者: a26265788    時間: 2018-3-11 18:09
標題: 自走車循跡 銳角的問題
請問各位大大

小弟最近在做專題

想用自走車搭配8路循跡

目前直走跟小轉彎.直角都沒什麼問題

速度的話目前是用最慢的速度在跑(再慢下去就會輪子轉不動的速度)

但是遇到銳角就很容易直接出線(感覺是來不及感測不到或來不及轉彎)或者直接停下(轉彎時偵測到全部的感測器而停下)
想請問遇到這種角度比較尖的路線
有什麼方法可以讓車子順利循跡通過呢?

麻煩有經驗的各位大大幫忙解答
卡關好久了拜託!!!
謝謝你們

作者: 超新手    時間: 2018-3-12 13:07
如果是銳角,
車子在直走時, 就會看到兩條黑線
所以當車子看到兩條黑線, 就要特別處理
.....
作者: a26265788    時間: 2018-3-19 01:43
本帖最後由 a26265788 於 2018-3-20 01:19 編輯
超新手 發表於 2018-3-12 13:07
如果是銳角,
車子在直走時, 就會看到兩條黑線
所以當車子看到兩條黑線, 就要特別處理


了解,小弟多寫幾個判斷之後有解決目前的問題了,不好意思現在才看到您的回覆
另外還有個問題想請教您 ,我想要把循跡+避障整合在自走車內(兩種功能同時運行),
一開始單用循跡都正常,但是加了超音波避障就變成不會循跡  可以請大大撥空幫我看一下程式碼是否哪邊寫錯嗎?
在此先感謝大大的幫忙,謝謝
以下為程式碼

作者: 超新手    時間: 2018-3-19 08:35
1) 你是用那一種超音波?
為什麼輸入和輸出是用同一根腳?
你有先寫程式先測過這個超音波, 或是這個寫法是 OK 的嗎?
2) 另外, 應該不是這個原因
但 pulseIn 如果沒收到回波, 它可是會卡住一陣子(秒級)
這時候你就沒辦法尋跡
可以使用 pulseIn(pin, value, timeout);
讓卡住時間不會那麼久
但判斷式就要改成
if ( inches <= 5 && inches > 0 ){

作者: a26265788    時間: 2018-3-19 10:55
本帖最後由 a26265788 於 2018-3-19 11:02 編輯
超新手 發表於 2018-3-19 08:35
1) 你是用那一種超音波?
為什麼輸入和輸出是用同一根腳?
你有先寫程式先測過這個超音波, 或是這個寫法是 OK ...


我用的是PARALLAX的PING超音波
他只有GND.VCC.SIG三根腳位
SIG腳位我改在digital 7
下面是他們提供的程式
我有單獨測試超音波程式有成功回傳距離回來

  1. const int pingPin = 11;
  2. unsigned int duration, inches;

  3. void setup() {
  4.   Serial.begin(9600);
  5. }

  6. void loop() {
  7.   pinMode(pingPin, OUTPUT);          // Set pin to OUTPUT
  8.   digitalWrite(pingPin, LOW);        // Ensure pin is low
  9.   delayMicroseconds(2);
  10.   digitalWrite(pingPin, HIGH);       // Start ranging
  11.   delayMicroseconds(5);              //   with 5 microsecond burst
  12.   digitalWrite(pingPin, LOW);        // End ranging
  13.   pinMode(pingPin, INPUT);           // Set pin to INPUT
  14.   duration = pulseIn(pingPin, HIGH); // Read echo pulse
  15.   inches = duration / 74 / 2;        // Convert to inches
  16.   Serial.println(inches);            // Display result
  17.   delay(200);                             // Short delay
  18. }
複製代碼


如果單獨跑上面程式
並把  duration = pulseIn(pingPin, HIGH); // Read echo pulse
這一段改成
並把  duration = pulseIn(pingPin, HIGH,50); // Read echo pulse
回傳值就都變成0
作者: 超新手    時間: 2018-3-19 11:08
本帖最後由 超新手 於 2018-3-19 11:14 編輯

1) 50 太短
50 / 74 / 2 根本不到 1 INCH
1 INCH 約為 74*2 =148
如果你要看 5 INCHES, 至少設個遠大於 5 INCHES 的值即可

2) 重點是, 如果改成 50, 就可以尋跡了嗎?


3) 對了, 你不可以設成 >=0
因為找不到時, 它的值就是 0, 改成
if ( inches <= 5 && inches > 0 ){

作者: a26265788    時間: 2018-3-19 12:01
超新手 發表於 2018-3-19 11:08
1) 50 太短
50 / 74 / 2 根本不到 1 INCH
1 INCH 約為 74*2 =148

1.改50之後還是不行循跡

2.後來我把這一段改成
  1. duration = pulseIn(pingPin, HIGH,2600); // Read echo pulse
複製代碼

回傳的距離可以到10 inch
但還是只有超音波功能沒有循跡..

3.這一段有修正為>0了
  1. if ( inches <= 5 && inches > 0 ){
  2.   avoid();
  3. }
  4. else{
  5.   follow();
  6. }
複製代碼


目前還是只有避障正常使用@@
作者: 超新手    時間: 2018-3-19 12:27
改成這樣試試
if ( inches <= 5 && inches > 0 ) {
  avoid();
  state = READ_LINE;// 加這行
}
作者: a26265788    時間: 2018-3-19 12:47
超新手 發表於 2018-3-19 12:27
改成這樣試試
if ( inches  0 ) {
  avoid();

還是一樣無法耶@@
我試了
  1. if ( inches <= 5 && inches > 0 ){
  2.   avoid();
  3.   nextState = READ_LINE;
  4. }
複製代碼


還有您說的
  1. if ( inches <= 5 && inches > 0 ) {
  2.   avoid();
  3.   state = READ_LINE;// 加這行
  4. }
複製代碼

作者: 超新手    時間: 2018-3-19 13:17
1) avoid 程式是誰寫的 ?
我看RedBot的程式, 馬達該是接 2, 4, 5, 6, 7, 8
而馬達接腳 7, 又和  pingPin 衝到
但是超音波的測試程式, 又在 11
而 avoid  的馬達接腳, 為什麼又變成 10, 11, 12, 13
你的接腳到底是怎麼接的?

2) 馬達避障後, 有回到線上嗎?
如果沒回到線上, 它是不會走的   


作者: a26265788    時間: 2018-3-19 13:33
本帖最後由 a26265788 於 2018-3-19 13:35 編輯
超新手 發表於 2018-3-19 13:17
1) avoid 程式是誰寫的 ?
我看RedBot的程式, 馬達該是接 2, 4, 5, 6, 7, 8
而馬達接腳 7, 又和  pingPin 衝 ...


阿抱歉忘了提到
我用的不是REDBOT
所以腳位有自行調整過
以下是馬達的腳位
  1. #define    L_CTRL_1   13
  2. #define    PWM_L      11

  3. #define    R_CTRL_1   12
  4. #define    PWM_R      10
複製代碼


Avoid是我自己再加進去的

我的測試是
先將車子放在黑線上(循跡狀態)
開機後會先8顆全亮,滅掉後
就開始看哪幾顆感測器感應到黑線  循跡板上的LED就會亮哪顆
並開始循跡動作

但是加入超音波變成一開機
亮完8顆滅掉後  就變成很微微的亮光而已
我剛試著用手抓著車子讓他循線
他會作動但是循跡變成卡卡的感覺會一直出去跑黑線 (有偵測到黑線但不像一開始的LED很亮,只有微亮)
然後感覺變成慢半拍

超音波用監控視窗看
發現也比單獨跑測試程式回傳的速度慢
感覺像是跑不動..
電源的部分我是用電源供應器
9V給UNO的板子

作者: a26265788    時間: 2018-3-19 13:48
另外我剛剛看到超音波的手冊有提到
Note:
記得要串接1K歐姆電阻在超音波的SIG輸出腳到Propeller的腳位,因為,Propeller的I/O是3.3V的邏輯準位。

我目前是沒有接電阻,但是可以使用超音波
這樣會影響到循跡的運作嗎?
作者: 超新手    時間: 2018-3-19 18:38
聽起來比較像是電源問題, 因為那些 LED "應該"不是你控制的
比較簡單的測試方法就是,
不改任何程式的情形下
=> 單獨拔掉接腳 7, 看看LED會不會保持之前亮度
如果還是暗的
=> 單獨拔掉超音波電源, 看看LED會不會保持之前亮度
作者: a26265788    時間: 2018-3-20 01:18
超新手 發表於 2018-3-19 18:38
聽起來比較像是電源問題, 因為那些 LED "應該"不是你控制的
比較簡單的測試方法就是,
不改任何程式的情形 ...


非常感謝大大的幫忙給了這麼多的建議!!

後來又去買了另一顆超音波交叉測試
發現換了HY SRF05之後就可以了
再次感謝!!
作者: a26265788    時間: 2018-3-21 22:19
標題: Delete
本帖最後由 a26265788 於 2018-3-22 00:33 編輯

Delete




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2