masimaro blog

menu

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

Raspberry piで2足歩行ロボットの作成④「Python Adafruit_PCA9685ライブラリでモーションの作成」


Raspberry pi
2021-07-22


今回は、このロボットをプログラムで歩かせたいと思います。

最終的にはwebiopiでブラウザからの操作を考えているので、deviceInstanceのライブラリを使ってモーションを作成したい所ですが、こちらは微調整するのにいちいち再起動する必要があったので、ある程度の所まではAdafruit_PCA9685ライブラリを使用して開発していく事にします。

Pythonのプログラムですので、ラズパイにプリインストールされている「Thonny Python IDE」などのエディタを使えばイイと思います。

ちなみに以下のプログラムのモーションはオリジナルですので、少々変な動作にはなっていますが、そこは愛嬌ということでよろしくお願いします。

 

モーションプログラム

test.py

import time
import Adafruit_PCA9685

pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)

def FW():
    pwm.set_pwm(3, 0, 300)  #R up
    pwm.set_pwm(1, 0, 310)
    time.sleep(0.5)
    pwm.set_pwm(0, 0, 370)
    pwm.set_pwm(2, 0, 370)
    time.sleep(0.5)
    pwm.set_pwm(3, 0, 360) #R down
    pwm.set_pwm(1, 0, 370)
    time.sleep(0.5)
    pwm.set_pwm(1, 0, 430) #L up
    pwm.set_pwm(3, 0, 420)
    time.sleep(0.5)
    pwm.set_pwm(0, 0, 430)
    pwm.set_pwm(2, 0, 430)
    time.sleep(0.5)
    pwm.set_pwm(1, 0, 370) #L down
    pwm.set_pwm(3, 0, 360)
    time.sleep(0.5)
    
def BK():
    pwm.set_pwm(3, 0, 300)  #R up
    pwm.set_pwm(1, 0, 310)
    time.sleep(0.5)
    pwm.set_pwm(0, 0, 410)
    pwm.set_pwm(2, 0, 410)
    time.sleep(0.5)
    pwm.set_pwm(3, 0, 360) #R down
    pwm.set_pwm(1, 0, 370)
    time.sleep(0.5)
    pwm.set_pwm(1, 0, 430) #L up
    pwm.set_pwm(3, 0, 420)
    time.sleep(0.5)
    pwm.set_pwm(0, 0, 370)
    pwm.set_pwm(2, 0, 370)
    time.sleep(0.5)
    pwm.set_pwm(1, 0, 370) #L down
    pwm.set_pwm(3, 0, 360)
    time.sleep(0.5)

def RT():
    pwm.set_pwm(3, 0, 300)  #R up
    pwm.set_pwm(1, 0, 310)
    time.sleep(0.5)
    pwm.set_pwm(0, 0, 410)
    time.sleep(0.5)
    pwm.set_pwm(3, 0, 360) #R down
    time.sleep(0.5)
    pwm.set_pwm(0, 0, 370)
    time.sleep(0.5)
    pwm.set_pwm(1, 0, 370)
    time.sleep(0.5)
    
def LT():
    pwm.set_pwm(1, 0, 430) #L up
    pwm.set_pwm(3, 0, 420)
    time.sleep(0.5)
    pwm.set_pwm(2, 0, 370)
    time.sleep(0.5)
    pwm.set_pwm(1, 0, 370) #R down
    time.sleep(0.5)
    pwm.set_pwm(2, 0, 390)
    time.sleep(0.5)
    pwm.set_pwm(3, 0, 370)
    time.sleep(0.5)
    
def SET():
    pwm.set_pwm(1, 0, 370)
    time.sleep(1)
    pwm.set_pwm(0, 0, 390)
    time.sleep(1)
    pwm.set_pwm(3, 0, 360)
    time.sleep(1)
    pwm.set_pwm(2, 0, 390) 
    
while(True):
    print('0/forward, 1/back, 2/right, 
    3/left,
    4/reset, 5~/TEST END')
    select = int(input('choice No:'))
    if select == 0:
        FW()
    elif select == 1:
        BK()
    elif select == 2:
        RT()
    elif select == 3:
        LT()
    elif select == 4:
        SET()
    else:
        exit()
    

pwm.set_pwm()のインスタンスメソッドの第二引数が開始パルス、第三引数が終了パルスとなっていますが、ここの値でサーボモーターの角度が決まります。

ざくっと説明すれば、開始が0とすれば、「終了パルスが150=0°」「終了パルスが500=180°」となります。

したがって、サーボの位置を真ん中(90°)にしたければ開始0,終了が175になります。(ざくっと)

これを基準に、前後左右に歩かせるプログラムを作成していきます。

なお、今回使用しているサーボモーターは格安のレビュー最悪品ですので、初期位置をセンター(90°)にしていてもズレる事が多いので、そこは175の値を前後させて90°になるよう微調整します。

プログラムを実行すれば、インプット関数で数字を入力する画面になるので、任意の番号を入力します。

番号に応じて前進、後退、左旋回、右旋回、初期位置、の関数が実効されます。

終了時は、1~4以外のキーを入力すれば強制終了となります。

少々使い勝手が悪いかもしれないので、その辺は自由に改造して頂ければと思います。

 

プログラムの実行

作成したプログラムを実行すれば、下のように動作するはずです。

決してスムーズとは言い難いですので、気になる方は個人で自分好みに合わせたモーションに変更してください。

次回は、今回作成したプログラムをもとに、webiopiで使えるPythonプログラムを作成します。

コメントを残す

お名前

コメント



コメント一覧

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