RubyでDXLIB2を動かすことができたので、更なるお試しとしてPythonでDXLIB2を動かすサンプルを作成してみた。
検証環境は以下の通り。
準備はRubyと同様、パスを通してHWの接続を確認。
- Pythonソース
サンプルとして0~253のIDにPingを発行して結果をプロンプトに表示する。
<SMPL1.py>
from ctypes import *
import sys
# load library
dxlib2 = cdll.LoadLibrary("dxlib2.dll")
dxopen = dxlib2.DX_OpenPort
dxclose = dxlib2.DX_ClosePort
dxping = dxlib2.DX_Ping
# set types for return and parameter of API
dxopen.argtypes = [c_char_p, c_long]
dxopen.restype = c_void_p
dxclose.argtypes = [c_void_p]
dxping.argtypes = [c_void_p, c_ubyte, c_int, c_void_p]
# initialize
terr = c_ushort()
comport = "\\.\COM3"
baudrate = 1000000
timeout = 100
procsw = 0
OK = 1
NG = 0
cr = "\n"
lf = "\r"
# call API
devid = dxopen( comport, baudrate )
for idx in range(254):
result = dxping( devid, idx, timeout, byref(terr) )
if result == OK:
sys.stdout.write( "\n%d alive" % idx )
procsw = 0
else:
if procsw == 0:
sys.stdout.write( cr )
else:
sys.stdout.write( lf )
sys.stdout.write( "%d dead(%x)" % (idx,terr.value) )
procsw = 1
sys.stdout.flush()
dxclose( devid )
- 実行
a).以下のファイルが同一フォルダ内に存在していることを確認。
b).コマンドプロンプトで実行。
結果はこんな感じ。
雑感、Rubyと同様、簡単にDynamixelの制御が可能となった。
ただ、Rubyよりもコーディングに若干のクセがあるようだ。