「クムクムロボットを歩かせてみる」とは
日ごろからみなさんが行っている「歩く」という動きをクムクムロボットで再現させるには
「”歩く”とはどういう動きなのか」を分析し、Pythonでの動かし方を理解する必要があります。
クムクムロボットをPythonで動かすための基本についてはチュートリアルを試してみてください。
左足から歩き始めて、次にまた左足で歩けるようにするには
左足を上げる
↓
左足を前に出す
↓
足を下ろす
↓
右足を上げる
↓
右足を前に出す
↓
足を下ろす
という動きが必要になります
歩かせてみる
クムクムロボットを歩かせるコードはこのようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
import time import qumcum # Qumcumと接続 qumcum.connect("COM11") # モーター電源ON err = qumcum.motor_power_on(500) # モーター座標指定 err = qumcum.motor_pos_all( 0, 90, 90, 90, 90, 90, 180) # モーター動作開始 err = qumcum.motor_start() # 一定時間待つ time.sleep(1) # # 左足を上げる # # モーター座標指定 err = qumcum.motor_angle_time(3, 115, 630) # モーター座標指定 err = qumcum.motor_angle_time(5, 60, 300) # モーター動作開始 err = qumcum.motor_start() # # 左足を前に出す # # モーター座標指定 err = qumcum.motor_angle_time(2, 70, 600) # モーター座標指定 err = qumcum.motor_angle_time(6, 70, 600) # モーター座標指定 err = qumcum.motor_angle_time(5, 115, 1000) # モーター動作開始 err = qumcum.motor_start() # # 足を下ろす # # モーター座標指定 err = qumcum.motor_angle_time(3, 90, 600) # モーター座標指定 err = qumcum.motor_angle_time(5, 90, 600) # モーター動作開始 err = qumcum.motor_start() # # 右足を上げる # # モーター座標指定 err = qumcum.motor_angle_time(3, 120, 300) # モーター座標指定 err = qumcum.motor_angle_time(5, 68, 630) # モーター動作開始 err = qumcum.motor_start() # # 右足を前に出す # # モーター座標指定 err = qumcum.motor_angle_time(2, 110, 600) # モーター座標指定 err = qumcum.motor_angle_time(6, 110, 600) # モーター座標指定 err = qumcum.motor_angle_time(3, 65, 1000) # モーター動作開始 err = qumcum.motor_start() # # 足を下ろす # # モーター座標指定 err = qumcum.motor_angle_time(3, 90, 600) # モーター座標指定 err = qumcum.motor_angle_time(5, 90, 600) # モーター動作開始 err = qumcum.motor_start() # モーター電源OFF err = qumcum.motor_power_off() # Qumcumから切断 qumcum.end() err = qumcum.get_lasterror() |
説明
クムクムロボットを歩かせるためには、クムクムロボットに命令を送ることができるように接続をします
こちらのコードでは”COM11″に接続しています。
1 2 |
# Qumcumと接続 qumcum.connect("COM11") |
接続したら、モーターを動かすためにモーターの電源をONにします
1 2 |
# モーター電源ON err = qumcum.motor_power_on(500) |
クムクムロボットを「まっすぐ立っている」状態にします
動かした後に「一定時間待つ」でプログラムが待っているのは、完全に止まったところから次の動きを始めたいからです
1 2 3 4 5 6 7 8 |
# モーター座標指定 err = qumcum.motor_pos_all( 0, 90, 90, 90, 90, 90, 180) # モーター動作開始 err = qumcum.motor_start() # 一定時間待つ time.sleep(1) |
ここからが、クムクムロボットを歩かせる動作です
左足を上げる
左足を上げる動作は、「右足首(3番のモーター) を 115°の位置へ 630 msec、左足首(5番のモーター) を 60°の位置へ 300 msecで動かす」となります。
なぜ、左足を上げるのに左足首まで動かす(右足首は体を傾けるために必ず動かします)のかというとこの左足首の動きで右側へ蹴り上げるような動きをさせています。
右足首だけで左足を上げた状態にするには、右足首の角度を大きく傾けなければいけないことと、右足首の動かし方で体が右に傾かずに右足だけが浮いたような状態になってしまうことがあるからです。
1 2 3 4 5 6 7 8 9 10 11 |
# # 左足を上げる # # モーター座標指定 err = qumcum.motor_angle_time(3, 115, 630) # モーター座標指定 err = qumcum.motor_angle_time(5, 60, 300) # モーター動作開始 err = qumcum.motor_start() |
左足を前に出す
左足を前に出す動作は、「右足 (2番のモーター)を 70°の位置へ 600 msec、左足(6番のモーター) を 70°の位置へ 600 msec、左足首(5番のモーター) を 115°の位置へ 1000 msecで動かす」となります。
この動きで、右足は軸足となるのでこの回転動作で体が回転し、身体の左側を前方へ出します。
また、左足は(身体の左側が前方へ出るので)身体が右へ向くことにより左足の向きを前に向くようにしています。そして、左足首は「左足を上げる」で足を傾けていたのでその向きを戻す動きをしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# # 左足を前に出す # # モーター座標指定 err = qumcum.motor_angle_time(2, 70, 600) # モーター座標指定 err = qumcum.motor_angle_time(6, 70, 600) # モーター座標指定 err = qumcum.motor_angle_time(5, 115, 1000) # モーター動作開始 err = qumcum.motor_start() |
足を下ろす
足を下ろす動作は簡単で「右足首(3番のモーター) を 90°の位置へ 600 msec、左足首(5番のモーター) を 90°の位置へ 600 msecで動かす」となります。
この動きは左右どちらの動作でも同じ動きで身体を傾けるために動かした両方の足首をまっすぐの状態に戻すことで足を下ろしています。
1 2 3 4 5 6 7 8 9 10 11 |
# # 足を下ろす # # モーター座標指定 err = qumcum.motor_angle_time(3, 90, 600) # モーター座標指定 err = qumcum.motor_angle_time(5, 90, 600) # モーター動作開始 err = qumcum.motor_start() |
右足を上げる
右足を上げる動作は、「右足首 (3番のモーター)を 120°の位置へ 300 msec、左足首 (5番のモーター)を 68°の位置へ 630 msecで動かす」となります。
基本の考え方は、上記の「左足を上げる」と同じで動かす角度を反対側にしています。
実際の角度が違うのは、足を上げたときの足の状態などによるもので多少異なることがあります。
1 2 3 4 5 6 7 8 9 10 11 |
# # 右足を上げる # # モーター座標指定 err = qumcum.motor_angle_time(3, 120, 300) # モーター座標指定 err = qumcum.motor_angle_time(5, 68, 630) # モーター動作開始 err = qumcum.motor_start() |
右足を前に出す
右足を前に出す動作は、「左足 を 110°の位置へ 600 msec、右足 を 110°の位置へ 600 msec、右足首 を 65°の位置へ 1000 msecで動かす」となります。
こちらも基本の考え方は、上記の「左足を前に出す」と同じで前に出す側が反対になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# # 右足を前に出す # # モーター座標指定 err = qumcum.motor_angle_time(2, 110, 600) # モーター座標指定 err = qumcum.motor_angle_time(6, 110, 600) # モーター座標指定 err = qumcum.motor_angle_time(3, 65, 1000) # モーター動作開始 err = qumcum.motor_start() |
足を下ろす
足を下ろす動作は簡単で「右足首(3番のモーター) を 90°の位置へ 600 msec、左足首(5番のモーター) を 90°の位置へ 600 msecで動かす」となり、左足から前に動いたときの「足を下ろす」と同じ動きになっています。
1 2 3 4 5 6 7 8 9 10 11 |
# # 足を下ろす # # モーター座標指定 err = qumcum.motor_angle_time(3, 90, 600) # モーター座標指定 err = qumcum.motor_angle_time(5, 90, 600) # モーター動作開始 err = qumcum.motor_start() |
動作終了
動き終わったら、モーターの電源はOFFにして、通信を切断します
1 2 3 4 5 6 |
# モーター電源OFF err = qumcum.motor_power_off() # Qumcumから切断 qumcum.end() |
コメント