7.モーターのコントロール

クムクムプログラミング

クムクムのモーターについて

クムクムは頭・腕(左右)・ふともも(左右)・足(左右)の7か所にそれぞれサーボモーターがあり動かすことができます。
これらのモーターはそれぞれ、下表のような動きができます。

モーターの場所 動き 動かすことができるモーターの角度
左右に振ることができます 0度~180度
腕(左右) 上下に動かすことができます 0度~180度
ふともも(左右) 足の向きを変えることができます 55度~125度
足(左右) 足の傾きを変えることができます 55度~125度

 

クムクムのモーターを動かすときの考え方

クムクムはモーターを動かすときの基本の考え方は

  1. モーターの電源を入れる(最初のみ)
  2. モーターの角度を設定する
  3. モーターに動けという指示をする
  4. モーターの電源を入れる(最後のみ)

となります。

モーターの場所はそれぞれに割り当てられた番号があります。

モーターは、それぞれ
右手・・・モーター1
右太もも・・・モーター2
右足・・・モーター3
頭・・・モーター4
左足・・・モーター5
左太もも・・・モーター6
左手・・・モーター7

となっています。

この番号は、モーターを動かすときに「どのモーターを動かすか」の指定と、全軸同時に動かすときの引数の順番になります。

ご注意ください
作成したプログラムを初めてクムクムを動かすとき、最初から立たせたままで動かそうとすると指示する角度や組み合わせでコケたりして、クムクムが破損したりする恐れがありますので、クムクムを寝かせた状態でプログラムの動きを確認してから立たせて実際の動きをみることをお勧めします

クムクムのモーターを動かすプログラムを作成するために必要な情報

VS CodeでPythonプログラムのプロジェクトやソースファイルを作成する方法については「5. VS CodeによるPythonプログラムの開発」を確認してください。

Pythonプログラムから直接QumcCommLib.dllを呼び出す場合は、「3.Qumcum PythonライブラリでコントロールできるAPI仕様(QumCommLib.dll呼出し)」にあるモーター制御の各項を確認してください。

 

Pythonプログラムからqumcum.pyを経由して呼び出す場合は、「2.Qumcum PythonライブラリでコントロールできるAPI仕様」にあるモーター制御の各項を確認してください。

 

クムクムと接続する方法についての説明は、「4.クムクムとの接続~LEDの点灯」を参考にしてください。

Pythonプログラムから直接QumcCommLib.dllを呼び出す

サンプルのコード全体はこのようになります。

※ここで、QumcCommLib.dllはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。

import os
import time
from ctypes import *

# DLLのフォルダにカレントディレクトリを追加します
os.add_dll_directory(os.getcwd())

# DLLをロードします
dll = cdll.QumCommLib

# COMポートの番号文字列を生成
port = c_char_p('COM5'.encode('utf-8'))

# Qumcumと接続
h = dll.qumcomm_connect(port, 115200)

#
# モーター動作
#

# モーター電源ON
err = dll.qumcomm_motor_power_on(h, 500);

# モーター座標指定
err = dll.qumcomm_motor_pos_all(h, 90, 90, 90, 90, 90, 90, 90);

# モーター動作開始
err = dll.qumcomm_motor_start(h);

# モーター座標および動作時間指定
err = dll.qumcomm_motor_angle_multi_time(h, 180, 80, 80, 180, 110, 110, 180, 300);

# モーター動作開始
err = dll.qumcomm_motor_start(h);

# モーター座標および動作時間指定
err = dll.qumcomm_motor_angle_multi_time(h, 0, 110, 110, 0, 80, 80, 0, 1000);

# モーター動作開始
err = dll.qumcomm_motor_start(h);

# モーター座標および動作時間指定
err = dll.qumcomm_motor_pos_all(h, 90, 90, 90, 90, 90, 90, 90);

# モーター動作開始
err = dll.qumcomm_motor_start(h);

# モーター電源OFF
err = dll.qumcomm_motor_power_off(h);

# Qumcumから切断
dll.qumcomm_end(h)

 

モーターを動かす方法はいくつかありますが、ここでは全軸を同時に動かす関数(qumcomm_motor_pos_all())と全軸の位置と動作時間を指定して動かす関数(qumcomm_motor_angle_multi_time())を使います。

22行目が、qumcomm_motor_power_on()関数でモーターの電源をONにします。第一引数はハンドルで、第二引数はデフォルトの動作時間です。

25行目にある最初のqumcomm_motor_pos_all()関数ではすべてのモーターの位置を90度にします。すべてのモーターの位置を90度にしたとき、クムクムは「気をつけ」ではなく「前にならえ」をします。
そして、28行目のqumcomm_motor_start()関数でモーターを動かします。(←実際にはこの関数呼び出しによりモーターが動き始めます)

31行目にあるqumcomm_motor_angle_multi_time()関数でモーターの角度を行い、動作時間を指定しています。ここでは300msec(0.3秒)で指定した位置に動くよう指示しています。
34行目のqumcomm_motor_start()関数でモーターを動かします。

37行目にあるqumcomm_motor_angle_multi_time()関数でモーターの角度を行い、動作時間を指定しています。ここでは1000msec(1.0秒)で指定した位置に動くよう指示しています。
40行目のqumcomm_motor_start()関数でモーターを動かします。

43行目のqumcomm_motor_pos_all()関数ではすべてのモーターの位置を90度にします。
46行目にあるqumcomm_motor_start()関数でモーターを動かします。

そして、49行目のqumcomm_motor_power_off()関数でモーターの電源をOFFにします。引数はハンドルです。

ちなみに、43行目の引数でモーター1(右手)を0度、モーター7(左手)を180度に指定すると

err = dll.qumcomm_motor_pos_all(h, 0, 90, 90, 90, 90, 90, 180);

「気をつけ」の状態で動作を終わらせることができます。

Pythonプログラムからqumcum.pyを経由して呼び出す

サンプルのコード全体はこのようになります。

※ここで、QumcCommLib.dllとqumcum.pyはこれから作成し、実行するPythonプログラムのコードと同じフォルダに置いていることを前提としています。

import qumcum

# Qumcumと接続
qumcum.connect("COM5")

#
# モーター動作
#

# モーター電源ON
err = qumcum.motor_power_on(500);

# モーター座標指定
err = qumcum.motor_pos_all(90, 90, 90, 90, 90, 90, 90);

# モーター動作開始
err = qumcum.motor_start();


# モーター座標および動作時間指定
err = qumcum.motor_angle_multi_time(180, 110, 110, 180, 80, 80, 180, 300);

# モーター動作開始
err = qumcum.motor_start();

#
# モーター座標および動作時間指定
err = qumcum.motor_angle_multi_time(0, 80, 80, 0, 110, 110, 0, 1000);

# モーター動作開始
err = qumcum.motor_start();

#
# モーター座標および動作時間指定
err = qumcum.motor_pos_all(90, 90, 90, 90, 90, 90, 90);

# モーター動作開始
err = qumcum.motor_start();

# モーター電源OFF
err = qumcum.motor_power_off();

# Qumcumから切断
qumcum.end()

 

モーターを動かす方法はいくつかありますが、ここでは全軸を同時に動かす関数(qumcum.motor_pos_all())と全軸の位置と動作時間を指定して動かす関数(qumcum.motor_angle_multi_time())を使います。

11行目のqumcum.motor_power_on()関数でモーターの電源をONにします。引数はデフォルトの動作時間です。

14行目の最初のqumcomm.motor_pos_all()関数ではすべてのモーターの位置を90度にします。すべてのモーターの位置を90度にしたとき、クムクムは「気をつけ」ではなく「前にならえ」をします。
そして、17行目のqumcum.motor_start()関数でモーターを動かします。(←実際にはこの関数呼び出しによりモーターが動き始めます)

21行目のqumcum.motor_angle_multi_time()関数でモーターの角度を行い、動作時間を指定しています。ここでは300msec(0.3秒)で指定した位置に動くよう指示しています。
24行目にあるqumcum.motor_start()関数でモーターを動かします。

28行目のqumcum.motor_angle_multi_time()関数でモーターの角度を行い、動作時間を指定しています。ここでは1000msec(1.0秒)で指定した位置に動くよう指示しています。
31行目のqumcum.motor_start()関数でモーターを動かします。

35行目にあるqumcum.motor_pos_all()関数ではすべてのモーターの位置を90度にします。
38行目のqumcum.motor_start()関数でモーターを動かします。

41行目のqumcum.motor_power_off()関数でモーターの電源をOFFにします。

ちなみに、35行目の引数でモーター1(右手)を0度、モーター7(左手)を180度に指定すると

err = qumcum.motor_pos_all(0, 90, 90, 90, 90, 90, 180);

「気をつけ」の状態で動作を終わらせることができます。