[Robotics Studio] 改良自走型機器車[II] -- Day6

  • 8209
  • 0
  • 2009-02-17

[Robotics Studio] 改良自走型機器車[II] -- Day6

上次 Day4 的機器車雖然可以跑, 可是一旦撞到東西就翻車了.

現在我們來為它加上一點點腦筋, 先考慮撞上東西的時候就停止.

要加上這樣的判斷其實非常簡單, 只要拖出 GenericContactSensors 服務就可以搞定.

將 GenericContactSensors 放在  Diagram 當中以後,
記得在 GenericContactSensors 的設定上使用 use a manifest , 直接使用原本就已經存在的 (GenericDifferentialDriver 在使用的) LEGO.NXT.Tribot.Simulation.Manifest.xml , 然後加上 If 判斷, 從 GenericContactSensors 的通知當中選取 ContactSensorUpdate , If 判斷當中輸入 value.Pressed (意思就是當碰撞感應器被壓下去的時候) , 然後就餵一個 AllStop 給 GenericDifferentialDriver (可以拖拉一個, 但記得選原本的, 或是從 RunL 當中複製一個出來用), 如下圖:

image

恩, 看起來非常棒, 執行看看...

image

才一停下來就 Stop 了...

看樣子是我們之前的程式太過於暴力 (沒辦法, 我應該說是 GenericDifferentialDriver 的 DriveDistance 實在是暴力停止),
以這麼激烈的停止動作, 上面的機器腦袋一定被震昏了, 所以碰撞感應器就觸發, 然後就...不讓我們得...償...所...望

那我們該如何解決這樣的問題?

有一個簡單的解決辦法, 就是把 DriveDistance 的 Power 設定改為 0.5 (以一半的馬力輸出) , 這樣就好多了. (記得總共有兩個地方有用到 DriveDistance , 所以要改兩次)

恩, 果然這樣做了, 機器車子在轉彎時還是以驚險翹孤輪的方式...但至少碰撞感應器可以正常運作了,
而且最後碰到東西也會停止.

事實上把 DriveDistance 的 Power 設定為 0.3, 將可以看到更穩定的車子行進畫面,
但是跑好久歐, 而且也太像是新手駕駛了...
明天來考慮把新手駕駛改良吧.