ブログ - 最新エントリー

ユニバーサルドライバ3出荷準備中

カテゴリ : 
その他
2011-3-25 20:10
こんな時こそ助けにならなければならないロボットはいまだ何の役もかけない。とても辛い・・・。さらに計画停電が続く中、 四苦八苦しながらUD3の在庫充填準備中。。

今回から適用されるリビジョンE093Cからは、モータ用電源の有無を回路内で判断しゲートを駆動するので、モータ用電源が印可されない状態で不用意に動かしてもゲート回路が過電流に陥る事は軽減される予定。

なお、大事なパーツの一部が東北で作られていたりするが、それにもかかわらずある程度まとまった数が準備できたので、必要な時にショップをのぞいていただければ在庫無しという事はないはず。


それと、ついでと言ってはなんだが、dxlib2dxconfuss3confもアップデート済み。

DXCONF改良ネタ2

カテゴリ : 
雑記
2011-3-7 20:59
今のままではシリアルエラーとなる時におかしげになるでしょう。
まだ腐ってるなぁ。という事で、もうちょっと見直します。
ってか端っから自分で作ればよかったか・・・。
Dynamixel Configurator等でも使用しているFTDI社製のUSBシリアル変換チップですが、デバイスドライバが古いためにアプリケーションからはマトモに通信できない様に見えてしまうケースが散見されます。
こちらには2種類の方法でデバイスドライバをインストールできると書いてありますが、現時点で最新版のデバイスドライバはZIPファイルでのみ提供されていますので、「必要に応じて都度デバイスドライバをインストールする場合」の手順に従ってください。
また、更新したつもりでも挙動がおかしい場合は、なぜかドライバファイルが古いままになっているといったことが原因だったりしますので、削除ツールで一旦ドライバを削除した後にPCを再起動してから再度新しいデバイスドライバをインストールし直す事を推奨します。

DXCONF改良ネタ

カテゴリ : 
雑記
2011-3-2 0:18
既に公開されているdxlib2にはいくつか既知のバグが残ってはいますが、このdllを使用したDynamixel Configuratorに改造中です。
ついでと言ってはなんですが、今までConfiguratorとして「どしてそうなっとらん?」「どしてできんの?」だった挙動を片っ端から漁って対処していく気分になってきたので、リリース版では行方不明になっていたDynamixelが見つかるなんて事になるやもしれません。

dxlib2の修正と合わせて公開しますので、もう数日待っててください。

SAM7S256

カテゴリ : 
新商品
2011-2-22 18:53
次の製造ロットよりBTC091 AT91SAM7S256マイコンボード(EVBも含む)・BTA022 ユニバーサルドライバBTA023 ユニバーサルドライバ3 Advanceに適用されるCPUが rev C に変更されます。このリビジョンでは従来からのエラッタが大幅に修正されている都合から、エラッタを回避する目的のコードが返って悪影響を及ぼす可能性が出てきます。

特にBTC091はCPUの評価等を目的として内蔵ペリフェラルを直接制御するプログラムをユーザ自ら作成するケースが大半となることから、メーカから提供されるデータシートの巻末に記載されたエラッタ情報をよく確認した上でソースコードへの影響が無いかを精査する必要があるでしょう。

ExcelでDXLIB2を動かす

カテゴリ : 
その他
2011-2-1 17:08
2011/2/2 dxlib2 Ver2.2公開にあたり

各開発環境毎でdllの扱いが違いすぎてごっつ使い辛いのがイラついたので、再度更新。
V2.0およびV2.1の使用を即刻中止し、V2.2に移行する事を強く推奨。

たびたびの修正ご容赦を。


これまで、Java,Ruby,Pythonよりdxlib2を使用したDynamixelの動作確認を行ってきた。

諸々試し始めている方は気付かれているかも知れないが、dxlib2はVBからの利用ができなくなっている。dxlib2の関数呼出規約がcdeclになっているが故に、VBから見えないという訳である。

そこで、VBないしVBAからの呼出しを可能にするため、dxlib2 Version2.1から呼出規約のデフォルトをstdcallに変更することとした。

それに伴う影響が以前紹介した言語にどこまで波及するか確認してみた。Javaはラッピング関数作成時のリンカオプションに-mrtdを付加することで解決。Pythonはcdllクラスからwindllクラスことで解決。Rubyに至っては影響なしという結果だった。
Ruby恐るべし。

肝心のVB(ここではExcelのVBA)での使用だが、通常のAPI呼出しと同様にdxlib2内の関数を適宜Declareするだけで使用することができる。
検証環境は以下の通り。
  1. OS: Windows 7(32bit)
  2. Microsoft Excel
  3. dxlib2 V2.1
準備はdxlib2.dllと同一フォルダに適当なExcelファイルを作成するだけ。
  1. VBAサンプル
    サンプルとして0~10のIDにPingを発行して結果をメッセージダイアログに表示する。
    宣言
    Declare Function DX_OpenPort Lib "dxlib2.dll" (ByVal pcom As String, ByVal br As Long) As Long
    Declare Function DX_ClosePort Lib "dxlib2.dll" (ByVal id As Long) As Boolean
    Declare Function DX_Ping Lib "dxlib2.dll" (ByVal devid As Long, ByVal uid As Byte, ByVal tout As Integer, ByRef terr As Integer) As Boolean
    本文抜粋
    Dim sMsg As String
    Dim devid As Long
    Dim i As Integer, terr As Integer
    Dim vRet As Variant
    ChDrive ActiveWorkbook.Path
    ChDir ActiveWorkbook.Path
    devid = DX_OpenPort("\\.\COM3", 1000000)
    If devid = 0 Then
    MsgBox "Port open failed!", vbCritical, "COMポートオープン失敗"
    Else
    For i = 0 To 10
    vRet = DX_Ping(devid, i, 50, terr)
    If vRet Then
    sMsg = sMsg & i & " Alive" & Chr(13) & Chr(10)
    Else
    sMsg = sMsg & i & " Dead : " & Hex(terr) & Chr(13) & Chr(10)
    End If
    Next
    DX_ClosePort devid
    End If
    MsgBox sMsg, , "DXLIB2 TEST"
  2. 実行結果

EXCELであればセルにデータを保持すればグラフなり何なりにする事も可能だが、既にdxlib2 V2.1のサンプルとして同梱されてるのでそちらをを参考に。

それと、dxlib2 V2.1をGCC Developer Liteで使う際は、コンパイルオプションに -mrtd を付けてビルドしないと自殺アプリになってしまうのでご注意を。

PythonでDXLIB2を動かす

カテゴリ : 
その他
2011-1-28 13:40
RubyでDXLIB2を動かすことができたので、更なるお試しとしてPythonでDXLIB2を動かすサンプルを作成してみた。
検証環境は以下の通り。
準備はRubyと同様、パスを通してHWの接続を確認。
  1. 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 )
  2. 実行
    a).以下のファイルが同一フォルダ内に存在していることを確認。
    SMPL1.py  dxlib2.dll
    b).コマンドプロンプトで実行。
    > python SMPL1.py
    結果はこんな感じ。

雑感、Rubyと同様、簡単にDynamixelの制御が可能となった。
ただ、Rubyよりもコーディングに若干のクセがあるようだ。

RubyでDXLIB2を動かす

カテゴリ : 
その他
2011-1-24 16:52
JavaからDXLIB2を動かすことができたので、引き続きお試しとしてRubyでDXLIB2を動かすサンプルを作成してみた。
検証した環境は以下の通り。
Rubyのパスを通し、HWを接続したら準備完了。
  1. Rubyソース
    サンプルとして0~253のIDにPingを発行して結果をプロンプトに表示する。
    <SMPL1.rb>
    require "dl/import"
    module DXLIB2
      extend DL::Importer
      dlload "./dxlib2.dll"
      extern "int DX_OpenPort( char *, long )"
      extern "int DX_Active( int )"
      extern "int DX_Ping( int, unsigned char, int, unsigned short * )"
      extern "int DX_ClosePort( int )"
    end
    comport = "\\\\.\\COM3"
    br = 1000000
    timeout = 50
    terr = ' ' * 2
    mark = "\n"
    devid = DXLIB2.DX_OpenPort( comport, br )
    if ( devid != 0  ) then
      ret = DXLIB2.DX_Active( devid )
      if ( ret == 1 ) then
        sleep 1
        i = 0
        while ( i <= 253 )
          ret = DXLIB2.DX_Ping( devid, i, timeout, terr )
          if ( ret == 1 ) then
            printf( "\n%d alive", i )
            mark = "\n"
          else
            printf( "%s%d dead(%x)", mark, i, terr.unpack('S')[0] )
            mark = "\r"
          end
          i += 1
        end
      end
      ret = DXLIB2.DX_ClosePort( devid )
      if ( ret == 0 ) then
        print "CLOSE ERROR\n"
      end
    end
    print("\nnormal end")
  2. 実行
    a). 以下のDLLとソースファイルが同じフォルダに存在していることを確認。
    SMPL1.rb  dxlib2.dll
    b). コマンドプロンプトで実行。
    > ruby SMPL1.rb
    結果はこんな感じ。
雑感、Javaよりは簡単だった。Ruby恐るべし。

New ZEAL

カテゴリ : 
新商品
2011-1-20 18:11
リリース中のBluetoothモジュール ZEAL-C01 は一部パーツの廃盤に伴い既に再生産は終了。在庫が終了次第おニュー版に移行する予定です。
外形やI/Fは互換性を有しますが、ソフト的な互換性が保てないのがつらいところ。

現在評価中ですが、量産等のまとまったご注文の際は ZEAL-C02 でのご提案になると思われ、先行して詳細な情報を入手されたいといった場合はこちらをご参照ください。

Javaついでに

カテゴリ : 
雑記
2011-1-18 15:50
猫も杓子もAndroid。寄らば大樹の陰といった所なのだろうか。


それはさておき、今のところAndroid端末は野良アプリのインストールを許容しているので、Javaついでという事で遊んでみた。

端末単体で動くアプリを作っても味気ないので、ちょっと欲張って大概の携帯についてるBluetoothを使ったRC-100Bモドキアプリにトライ。

RC-100BはBluetoothとしてマスターにしかならないが、今回のアプリではスレーブ構成でFDIII-HCへつなぎに行く事にした。基本的に公開されているチャットアプリのサンプルをちょっといじくっただけなので、ペアリング等のお膳立てがちゃんとしていないとうまくつながらなかったり、デザインなんぞ無視してたり、Android 2.2以上でないと動かないといったトコはご愛嬌。マルチタッチにまともに対応している端末であれば、ボタンの同時押しは一応再現できるといったところ。

動いてるとこの絵


後はGUIを凝ってみたり、一方通行の通信を双方向にてステータスをモニタしたりぶるぶるさせてみたり、勝手に死なないようにしてみたり、なんて事ぐらいだろうか。

怪しい野良アプリをインスコできる勇者はこちらからどうじょ。