masimaro blog

menu

home > 電子工作:Raspberry pi > Raspberry piで2足歩行ロボットの作成⑤「webiopi deviceInstanceライブラリを使いPython でモーションの作成」

Raspberry piで2足歩行ロボットの作成⑤「webiopi deviceInstanceライブラリを使いPython でモーションの作成」


Raspberry pi
2021-07-22


今回はブラウザからi2c制御を可能にするため、webiopiで使える「deviceInstanceライブラリ」を利用したPythonプログラムを作成します。

記述の方法が異なりますが、前回作成したプログラムを見本とすれば、サーボを動かす順番、角度などが分かりますので、あとはそれをwebiopiに合った記述に変更していくだけです。

はじめに、html、css、javascriptにも変更があるので、変更箇所を抜粋して記載しておきます。

各種ファイルは、第2回で作成した場所、pi/webiopi/のディレクトリ配下にあるはずです。

 

HTML/css

motor.html

  • SET
  • class n の部分を上記のように変更します。

    style.css

    .a li, .b li, .c li, .d li, .n li {
        border: solid 1px;
        }
    .n {
        margin-right: 3px;
        margin-left: 3px;
    }

    border: solid にn classを追加しました。

    また、n class にマージンを追加しました。

    追加したボタンのスタイリングをしただけです。

     

    javascript

    motor.js

    } else if(mode == 'LEFT') {     // 左旋回
          w().callMacro('LT');
        } else if(mode == 'SET') {  // 初期位置
          w().callMacro('SET');
        }
      }
    
         *
         *
         *
    
    // 「set」ボタンが押されたときのイベント処理
      $('#set').bind(BUTTON_DOWN, 
        function(event) {
        if(direction == 'STOP') {
          $(this).addClass('ledon');
          change_direction('SET');
        }
      }).bind(BUTTON_UP, function(event) {
          $(this).removeClass('ledon');
        change_direction('STOP');
      });
    
    });    
    

    追加したボタン(SET)の関数呼び出しと、イベント処理を追加しました。

    続いて、Pythonのプログラムを変更します。

     

    Python

    macro_pwm.py

    import webiopi
    import time
    from webiopi import deviceInstance
    
    pwm0 = deviceInstance('pwm0')
    
    @webiopi.macro
    def SET():
        pwm0.pwmWriteAngle(0, 10)
        time.sleep(1)
        pwm0.pwmWriteAngle(1, 0)
        time.sleep(1)
        pwm0.pwmWriteAngle(2, 10)
        time.sleep(1)
        pwm0.pwmWriteAngle(3, 0)
        time.sleep(1)
    
    @webiopi.macro
    def FW():
        pwm0.pwmWriteAngle(3, -20)
        pwm0.pwmWriteAngle(1, -20)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(0, -10)
        pwm0.pwmWriteAngle(2, -10)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(3, 0)
        pwm0.pwmWriteAngle(1, 0)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(1, 10)
        pwm0.pwmWriteAngle(3, 10)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(0, 30)
        pwm0.pwmWriteAngle(2, 30)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(1, 0)
        pwm0.pwmWriteAngle(3, 0)
        time.sleep(0.5)
     
    @webiopi.macro
    def BK():
        pwm0.pwmWriteAngle(3, 10)
        pwm0.pwmWriteAngle(1, 10)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(0, -10)
        pwm0.pwmWriteAngle(2, -10)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(3, 0)
        pwm0.pwmWriteAngle(1, 0)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(1, -20)
        pwm0.pwmWriteAngle(3, -20)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(0, 30)
        pwm0.pwmWriteAngle(2, 30)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(1, 0)
        pwm0.pwmWriteAngle(3, 0)
        time.sleep(0.5)
        
    @webiopi.macro
    def LT():
        pwm0.pwmWriteAngle(3, -60)
        pwm0.pwmWriteAngle(1, -30)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(0, 30)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(3, 0)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(1, 0)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(0, 0)
        time.sleep(0.5)
        
    @webiopi.macro
    def RT():
        pwm0.pwmWriteAngle(3, 20)
        pwm0.pwmWriteAngle(1, 50)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(2, -20)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(1, 0)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(3, 0)
        time.sleep(0.5)
        pwm0.pwmWriteAngle(2, 0)
        time.sleep(0.5)

    macro_pwm.pyを、上記のように変更します。

    deviceInstanceのメソッドを使えるように、pwm0 = deviceInstance('pwm0')でインスタンス化しています。

    pwm0.pwmWriteAngle()は、第一引数がサーボのチャンネル、第二引数が角度になります。

    それぞれjavascriptからのマクロ呼び出しに対して、前進、後退、左右旋回、初期位置、の動作になるよう設定しています。

    上下左右ボタンに加え、中央に「SET」のボタンを配置しました。

    これはサーボモーターの位置を「初期位置」に戻すボタンとします。

    動作確認

    それでは、ブラウザから実際にプログラムを動かしてみます。

    予めラズパイのwebiopiを起動させておき、

    ブラウザから「ラズパイのローカルIP:8000/test/motor.html」 にアクセスします。

    パスワード入力後、任意のボタンをクリックして、意図した動作が実行されればOKです。

    ※サーボモーターによって角度の誤差が生じるので、動作が不安定であれば微調整をお願いします。

    次回は、頭にラズパイ、電源、ドライバ、などを収納して完成させたいと思います。

    コメントを残す

    お名前

    コメント



    コメント一覧

    コメントはまだありません
    MENU