webots自學筆記(六)實用控制器函數補充


原創文章,來自博客園,_阿龍clliu http://www.cnblogs.com/clliu/,轉載請注明原文章出處。

 

      用Webots軟件做機器人仿真時,可以編輯自己的控制器,比較靈活,和現實中燒單片機的過程更接近,這一次介紹比較常用的函數。

 

      1.玩機器人的時候都會用到手柄或者其他設備來控制機器人,使它完成不同的指令,在webots仿真中,可以用鍵盤輸入來控制機器人。(這個代碼來之例程 GhostDog)如下:

   //原創文章,來自“博客園,_阿龍clliu” http://www.cnblogs.com/clliu/,轉載請注明原文章出處 

   //得到新按鍵值
    new_key = wb_robot_keyboard_get_key();
    
    //按鍵改變后執行
    if (new_key != prev_key) {
      switch (new_key) {
      case WB_ROBOT_KEYBOARD_UP:
       printf("UP pressed\n");
       //此處插入按指定代碼
        break;

      case WB_ROBOT_KEYBOARD_DOWN:
        printf("DOWN pressed\n");
       //此處插入按指定代碼
        break;

      case WB_ROBOT_KEYBOARD_LEFT:
        printf("LEFT pressed\n");
        //此處插入按指定代碼
        break;

      case WB_ROBOT_KEYBOARD_RIGHT:
        printf("RIGHT pressed\n");
        //此處插入按指定代碼
        break;

      case 'A':
        printf("A pressed\n");
        //此處插入按指定代碼
        break;
      
        default: break;
     
      }
      prev_key = new_key;

 

 

      2.延時(等待)函數

 

         有時候做完一件事需要延時幾毫秒,有些單片機里是用Delay()來表示,有些地方是用Thread.Sleep()表示,不管哪個函數,webots里用哪個呢。

          wb_robot_step();

          在webots用這個函數,可以模擬控制器進行延時,而仿真的世界繼續運行的情況。和單片機延時差不多的意思。

          在用這個函數需要注意一點,webots里的控制器並不是以最快的速度一直循環執行代碼,而是間隔basicTimeStep(worldInfo下的屬性)時間執行一次,單位是ms。假設 basicTimeStep = 32,我們需要在每次循環延遲100ms,應該在循環中寫wb_robot_step(68);才能達到指定的效果。如果你的延時較短,將basicTimeStep改小吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM