■足踏み
4足歩行ロボット(動物)の歩行形態にはいくつも種類がありますが、ここではトロットと呼ばれる対角線の脚を同時に動かす方式で作成していきます。最近商用に販売されている4足歩行ロボットは皆この方式です。他にも脚を一つずつ持ち上げるウォークと呼ばれる歩行もあります。こちらは常に3脚が接地しているのでバランス的には有利ですが、関節角度のデータを作成するのが厄介なのでまずはトロット歩行で作っていきます。
歩行動作作成の準備として、足踏み動作を行います。各脚の動きは屈伸のときと同じです。
歩行データは6行になっていて、最初の3行で左前脚、右後ろ脚の上げ下げ、後半の3行で右前脚、左後ろ脚の上げ下げを行います。2本足のときには接地が面ではなく線になってしまうため、余り長時間脚をあげていると(というよりもかなりの短時間でも)倒れてしまいます。対策として今回は行間の遷移時間を短く、「divide = 3」としています。
また行数が増えたので、next_key_frameの更新は、
if next_key_frame > 5:
と変更しています。
List9 step.py
from machine import Pin, PWM
import time
SV_FREQ = 50.0 # サーボ信号周波数
MAX_DUTY = 65025.0 # 周期内の分割数
MIN_SV_PULSE = 0.6 # 最小パルス幅 0°
MAX_SV_PULSE = 2.4 # 最大パルス幅 180°
correction = [14,-14,4, 0,0,6, -25,-12,4, 20,-4,-8]
servo = []
temp_angle = [90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90]
angle = [\
[90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90],\
[90,100,110, 90, 90, 90, 90, 90, 90, 90, 80, 70],\
[90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90],\
[90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90],\
[90, 90, 90, 90, 80, 70, 90,100,110, 90, 90, 90],\
[90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90]\
]
divide = 3
div_counter = 0
key_frame = 0
next_key_frame = 1
# パルス幅を計算する関数
def get_pulse_width(angle):
pulse_ms = MIN_SV_PULSE + (MAX_SV_PULSE - MIN_SV_PULSE) * angle / 180.0
x = (int)(MAX_DUTY * (pulse_ms * SV_FREQ /1000.0))
return x
# 全てのサーボを順番に駆動
for i in range(12):
servo.append(PWM(Pin(11 - i)))
servo[i].freq(50)
servo[i].duty_u16(get_pulse_width(90 + correction[i]))
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 = [14,-14+2,4, 0,0-2,6, -25,-12+2,4, 20,-4-2,-8]
またトロット歩行でもう少しゆっくり歩かせたい場合などには足先に接地面積を増やすための部品(写真は基板用スペーサー)をつける手もあります。
なお、これから各種歩行動作を作成していきますが、後で参照するために逐一パソコンに名前を付けて保存しておきましょう。
コメント