■左右の体重移動
歩行動作作成の準備として、左右の体重移動を行います。足首のロール軸の動きだけで 実現できます。リストは変更箇所のみ掲載しています。
歩行データは6行になっていて、1行目はイニシャル姿勢、2行目で左体重、3行目はその姿勢を維持、4~6行目は逆に右側に体重移動しています。
片方の足に体重を載せている(支持脚)間に反対側の足を移動させる(遊脚)というの が 2 足歩行の基本です。本来左右の体重移動をする場合、股関節のロール軸も同時に回転させて脚全体で平行四辺形をつくるようにするのが普通です。本機の場合はひざ関節がなく、この方法をとると遊脚を上に持ち上げることができませんので、体全体で遊脚を浮かせる動きをさせています。このため股関節ロール軸は 90°で固定しています。
devideは動作を速くするために
device = 10
に変更、また行数が増えたので、next_key_frameの更新は、
if next_key_frame > 5:
と変更しています。
リスト7-1 step.py(部分)
angle = [
[90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90],#イニシャル
[90, 90, 90, 90, 90, 80, 80, 90, 90, 90, 90, 90],#左体重
[90, 90, 90, 90, 90, 80, 80, 90, 90, 90, 90, 90],#ステップ
[90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90],#イニシャル
[90, 90, 90, 90, 90,100, 100, 90, 90, 90, 90, 90],#右体重
[90, 90, 90, 90, 90,100, 100, 90, 90, 90, 90, 90]#ステップ
]
divide = 10
div_counter = 0
key_frame = 0
next_key_frame = 1
while True: # 繰り返し
# キーフレームを更新
div_counter += 1
if div_counter >= divide:
div_counter = 0
key_frame = next_key_frame
next_key_frame += 1
if next_key_frame > 5:
next_key_frame = 0
# 角度計算
for i in range(12):
temp_angle[i] = angle[key_frame][i] +\
(angle[next_key_frame][i] - angle[key_frame][i])\
* div_counter / divide
# サーボ駆動
for i in range(12):
servo[i].duty_u16(get_pulse_width(int(temp_angle[i]) + correction[i]))
time.sleep(0.03) # 0.03秒待ち
プログラムを書き込んで動かしてみましょう。USBのケーブルがつながっているとバランスに影響を及ぼしますので、今回からはバッテリーで駆動します。スイッチをOFF側にした状態でバッテリーをつなぎ、USBでプログラムを書き込んでからスイッチをONにしてその後USBケーブルを抜きます。あるいはプログラムを「main.py」の名前にすればUSBケーブルを抜いたあとからスイッチをONできます。
バランスが悪い時には前後や左右の関節角度の調整が関係しているということなので、これを修正する方向で対策します。ソフトでの対策としては例えば重心を前に寄せたい場合、correctionの数値をいじります。
correction = [0,-12, -4,0,4+a,0, 4,-6-a,4,-12, 0,0]
なお、これから各種歩行動作を作成していきますが、後で参照するために逐一パソコンに名前を付けて保存しておきましょう。
コメント