ブログ - 最新エントリー

DynamixelをPCから直接コントロール

カテゴリ : 
Dynamixel
2014-6-2 15:00
■Dynamixelをコントロールするにあたり

DynamixelシリーズをPCから制御ためのAPIとしてDXLIBを公開していますが、Dynamixelが持っているコントロールテーブルへアクセスする事に特化しているため、Dynamixelの素性に応じた違いや行いたい制御方法によっては無限とも言える組み合わせでユーザ自ら試行錯誤してプログラミングしなくてはなりません
一応1台のDynamixelの動作を確認したり設定を変更するのであればDXCONFというツールである程度対応できますが、こちらもまたコントロールテーブルの中身を可視化させて書き換えがしやすくなっている意外には特別な機能は持っていません。
さらに、マイコンから制御するとなると、これまたPCとは違う知識が要求される面が多々あって、「ひとまず動かしてみる」といった用途には向きません。

結局のところ、プログラミングスキルを身につけないと、要求仕様のレベルが少し上がるだけでハードルがうんと高くなってしまうのが実情です

■とりあえずでもある程度動かす

Dynamixelを使用する台数が多いアプリケーションは用途が複雑なケースが大半でしょうから、双方向で通信できる事に期待した機能も盛り込みたくなるのが心情です。しかしながら構成が変わる度にゼロからプログラミングするのはかなり酷ですし、複雑であるがゆえに初期の段階で試運転したくなります。

ということで、少しでもそれらのニーズの一助となればと思い、PCとDynamixel間をDXHUBUSB-3WAY等で接続した環境において、予め設定しておいた様々な動きを再現させるだけのツールを準備する事としました。
予め各々異なるIDを振りボーレートを同じにしたDynamixelを、みんなつないで一斉に面倒を見てくれるといった感じです。
実は、これと同様な環境がROBO-ONEというイベントで頒布したツールにも含まれていましたが、イベントという事もあり解る方にしかわからない環境を要求されてしまうのと複数メーカをサポートしているため、二次的に頒布するには使い勝手が悪いのは否めませんでした。

今回は用途を「ひとまず複数台を連動してスムーズに動かす」に限定し、全てNI社LabVIEWを使って作り直したものを提供することにします。

■大まかな構成

プログラムは2つ提供します。

<ホスト>
Dynamixelとの通信を高い頻度で行い続けるホスト役で、ウィンドウの外観からは動いている事をうかがい知ることがほとんどできませんが、Dynamixelならではの処理ルーチンが集約されています。
基本的に、後述する他のプログラム等から角度と角速度程度の情報をこのホストに投げかけると、目的の角度まで自動的にスムーズに動かしてくれます。
また、アラームやエラー・温度・トルク・現在角度をリアルタイムに取得し続けていますので、これらの情報を他のプログラムからモニタする事もできます。
なお、DynamixelのID・Baudrate・Return Delay Timeの3つの設定に限り本ツールより直接変更する機能も盛り込んでいますので、よほどのことが無い限りDXCONFいらずです。

基本的な操作は、IDやDynamixelの種類、Goal Position等の位置と角度(deg)の変換係数、ホームポジションといった情報を登録するだけですが、接続されたDynamixelを自動的に検索して登録させる事もできます。



<エディタ>
DynamixelのネイティブなIDや位置の概念は無く、ホストに登録された順に軸を扱い、各軸のホームポジションからの角度(deg)の偏差と時間を扱うポーズエディタです。
アニメーションの様にある時点の角度を記憶させ、それを複数用意し、最終的に連続して再生するといった手法を採用しています。本当のアニメーションの様にたくさんのポーズを作る必要はなく、今のポーズから次のポーズへ移行する時間を設定する事で、その間は自動的に直線的に補完します。ようするに道のりを問わないのであれば、A地点からB地点移動する場合はA地点とB地点の2つのポーズだけ登録し、その間を移動する時間を設定すれば良い訳です。なお、FDIII-HCのライブラリとほぼ考え方は一緒です。
ポーズはファイルとして保存できますので、二次利用も容易なはずです。

なお、本ツールではポーズの編集と再生以外の機能は持たせるつもりは無く、さらなる利便性やニーズに応える機能は別の機会に提供しようと考えています。
一応ホストはそのままで、エディタをIKを使った6軸アームロボット制御プログラムに入れ替えたものや、もっと実機に近いイメージでポーズをデザインできるエディタ等は既に一部に提供済だったりしますが、他に何か楽しげなネタがあればリクエストいただければと思います。



■制約等

<PC>
最近のマルチコアCPUを搭載したPCがあると良いです。必須というわけではありませんが、ある程のリアルタイム性を確保するためには、ここ数年来のPCがあると良いです。

<レイテンシ>
DXHUBやUSB-3WAYはPCのUSBポートに接続して使用しますが、これらに適用されるデバイスドライバをデフォルトのまま使用すると通信の応答性が極端に悪くなり、スムーズな動作ができなくなります。
各I/Fのドキュメントに記載されている応答の待ち時間を1にしなくてはなりません。

<ボーレート>
先のレイテンシと似ていますが、通信速度が遅いと情報の伝達速度も遅くなります。できるだけ高速な通信が望まれるため、ボーレートは1Mbpsを推奨します。

<Dynamixel I/F>
よく見受けられる散発的だったり一方通行のDynamixelとの通信プログラムとは異なり、ホストではかなり込み入ったトランザクションを処理します。そのため、正常に通信が行えないDynamixelがI/F上に1台でも存在していてはなりません。

<ネットワーク環境>
LabVIEWの機能をふんだんに使っているため、オンライン・オフラインにかかわらずファイアウォールの影響を受けます。アンチウィルス等でポート開放の動作が阻害されないようにしなくてはなりません。

<LabVIEWのランタイムエンジン>
提供するプログラムはexeファイルではありますが、LabVIEW 2011SP1にて開発されているため、ランタイムエンジンを予めインストールしておく必要があります。

<制限>
フリー版と有償版を準備する予定ですが、どの程度の機能制限をするかは検討中でして、今のところ軸数や動作時間を予定しています。



といったところで、今月中には試食版を提供できる予定です。

技術

Dynamixel Configurator 2.2公開

カテゴリ : 
新商品
2014-4-28 21:00
Dynamixel Configuratorの最新版を公開しました。
今回の更新は新しい通信プロトコルへの対応が主で、従来からの機能の変更はありません。



主な変更点
  • 最新DXLIB適用 (未公開)
  • 最新DXLIB2適用 (未公開)
  • Dynamixe MX-12W対応
  • Dynamixe XL-320対応

note pcのタッチパッド

カテゴリ : 
その他
2014-4-16 17:46
一昔のPCはタッチパッドと合わせて左右のボタンがあったのだが、今やあからさまなボタンは無くなり、パット直下に1つのボタンがあるといった状況。

カー ソルの移動とクリックといった挙動の判定はパッドの静電容量やら抵抗の変化を元に行っているのだろうが、これがまたサクサク使いたいのにヌルヌル使うのを 強要される。外付けマウスなんぞに頼らずにガシガシやれてたのは、「ボタン」の存在が大きかったんだと今更ながら感じている今日この頃。

それでも何とかつかってやろうと設定をいじくっているが、それがまた感情を逆撫でてくれる程のおばかな挙動を強いてくる事に気づいたので、当面の備忘録として書いてみた

それは、ある程度の時間使い続けるとタッチ感度のオフセットみたいなものが狂い、カーソルの移動すらままならなくなり、PCの再起動かタッチパネルの再起動でしか復活しないという現象に見舞われた事に端を発する。
どういう訳かSynapticsのドライバが入ったPCが多いのだが、星の数ほどのPC全て筆者が使うと再現性100%で逝ってくれる。

ついこの前まで自分の電気的特性がこやつらに合ってないのでは?なんて疑ってもいた。

その症状とは別にパームチェックが操作性を大きく阻害しているという事で、その不感帯を見定めをするために全ての設定をデフォルトにしてしばらく使う機会を設けた。
するとどうだろう。ここ数日不要不急の再起動はしてない事に気づいた。例の逆撫現象が発現しないのである。

結論から言うと、長距離のカーソル移動を横着するためのモーメンタムなる機能が原因だった。これを活性化していると、どこかの時点でモーメンタム以外の基本的な機能に影響を及ぼすというお話。


Synapticsのタッチパッドが入っているPCで、いつのまにか感度がおかしくなると感じている方は、モーメンタムが活性化してません?

とりあえずレポートだけは上げておいたが、いつ反映されるかな。

技術

Digitusシリーズ(予定)

カテゴリ : 
新商品
2014-4-4 15:39
昨年より一部に頒布していたブレッドボードでも使用できる1列のヘッダを装備したDigitusシリーズのうち、要望が多かったSTMicroelectronics製のSTM32F3を搭載したものを標準ラインナップに加える予定です。


Digitusシリーズは40ピンのDIPパッケージと同サイズのマイコンボードでして、動作する上で最低限必要な機能とUSB端子を備えています。このサイズに余裕を持って搭載できる程度のチップしか採用しませんので、I/O数はそれなりで収まるアプリケーション向けといった位置付けになります。

DigitusシリーズもATmegaマイコンボードシリーズと同様にPCのUSBポートからの電源供給で動作し、ブートローダを介してプログラムの書き換えができます。

開発

4Kディスプレイ

カテゴリ : 
雑記
2014-3-24 18:09
マルチディスプレイから4Kへ変更。
遅い・・・。ビデオカード買い換え必要。


入れ替えたとたんに勝手にサイズをでかくしてくれるが、100%に戻すと文字サイズがサブノート級。
LabVEIWにはうってつけのでかさだが、テキストエディタは表示方法考えないともったいなくていかん。
KRSLIBについて、早速お問い合わせいただきました。
そのついでと言っては申し訳ありませんが、本日付けでファイルにNI社のLabVIEWのサンプルを追加しておきました。

LabVIEWは外部のdllを呼び出す機能が備わっています。それを利用してKRSLIBの主要APIをアイコン化して貼り付けるだけで利用できる様にしました。LabVIEWでDLLを扱う際の参考になると思います。


あわせて、それらのviを組み合わせたtest.viも同梱しました。スピード・ストレッチ・位置の指令と現在位置のモニタが一緒にできます。


ブロックダイアグラムはたったこれだけです(緑色のアイコンがAPI)。


是非活用してください。
昨日に引き続き、ROBO-ONE標準化APIとして双葉電子工業殿 RSシリーズ向けのライブラリを公開します。
FUTABA RS Library 1.1
Dynamixelと似たパケット構成となっているため、概ね同一の操作感で使用可能。
なお、リターンパケットに含まれるFlagは、直前の要求パケットが処理された時点の状態ではなく、一つ前の要求パケット時点の状態を返すので注意が必要。

KO ICS3.0/3.5向け標準化ライブラリ

カテゴリ : 
ROBO-ONE
2014-3-13 13:51
昨年ROBO-ONE標準化APIとして各メーカのアクチュエータをPCから利用する際の規格を作りました。
先行して公開しているDynamixel向けのライブラリ以外に、近藤科学殿KRSシリーズ(ICS3.0/3.5)及び双葉電子工業殿 RSシリーズ向けのライブラリを作成し、ROBO剣にて概ね目的を達成しました。

イベントも終了しましたので、ひとまずKONDO ICSに対応したライブラリを先行して以下に公開します。
KONDO KRS Library 1.1
ICSでは採用していないアドレスとデータの概念を仮想メモリマップを利用することで標準化。アドレスに対してデータを読み書きを行う数個の関数を用意。
なお、使用するI/Fによって若干の違いがあるため、それを吸収する関数を用意。
高級言語で簡単に制御したいといった場合にご利用ください。

後日FUTABA RSシリーズ向けのライブラリも公開します。
AVRマイコンボードシリーズを改版した事もあり、次回のGCC Developer Liteの更新時にシリアル通信ライブラリの仕様を変更します。
ARMコアのマイコンボード用シリアル通信ライブラリと記述を合わせる事で、基本的にコード互換向上を考えた上での措置となります。

主な変更は以下を予定しています。
  • システムクロックの引用
    ボーレートの決定にシステムクロックを指定し、標準的に適用している周波数と異なるクロックに対応。
  • ボーレートの指定
    ボーレートジェネレータの分周値の指定から、直接ボーレートの指定に変更。
  • 割り込み版とポーリング版の両対応
    割り込みを使用しないアプリケーションや割り込み処理内に記述できる様に送受信割り込みを使用しないバージョンを追加。
  • 送信割り込み処理変更
    送信データが多くて割り込みが連続する場合の負荷軽減。
  • 送信バッファの返値変更
    ~tx_buff関数の返値は送信バッファにたまっているデータのバイト数を返す様に変更。
  • 関数名の変更
    ポーリング版はus_~/us0_~/us1_~、割り込み版はus_int_~/us0_int_~/us1_int_~のプレフィクスに変更。
残念ながらソース互換ではなくなるため、リリースに合わせてサンプルプログラムも修正します。

技術

Dynamixel通信環境チェックツール

カテゴリ : 
その他
2013-12-10 18:01
通信環境が生命線であるDynamixel。無線ではないので断線なんぞはもってのほかですし、瞬断も許容できません。おまけに軸数が増えると電線の距離も長くなり、電気屋でも考えたくない現象まで意識せざるを得なくなってきます。

一応プログラマー向けのツールはDXCONFDXLIBといった感じでそこそこ用意はしていますが、オールOKの前提でプログラミングされてしまうといざというときにシステム全体が瓦解しかねません。

また、各APIからはアラームステータスを返す事になっていますが、全ての事象がそのステータスで把握できないため、それだけでシステムとしての故障状態が軽度なのか重度なのかは簡単には判断がつきません。
正常に取得できたアラームステータスを使ってできる事は、人間で例えると微熱だけどもうちょっとがんばるか・はりきりすぎて筋肉痛ぅといったそこそこ動ける「軽度」な状況の時だけで、足がしびれて立ち上がったとたんに足の甲が地面・走ってたらアキレス腱がプチッ・ヘルニアで突然脱力!(例えが痛々しくてごめんなさい)といった「重度」な状況での動作を考えるのは至難の業です。
ましてやアテにしている通信の応答すら断線等で得られないとなると、神経が切れてしまったの如くどうのしようもありません。

それらを全て解消するという訳ではありませんが、少なくともネットワークの健全性ぐらいは簡単に確認できても良いだろうということで、今回簡単なツールを用意しました。
全然仰々しい物ではなく、IDを書き連ねてスタートかけると各IDのデバイス名を取得して延々と通信し続けてその状況をレポートするだけです。


元はと言えばDXLIBを使う際のタイムアウトオフセット値をいくつにするべきかを判断するために作った代物ですが、DXLIBを使用したユーザアプリとはさほど乖離していないだろうと考えて公開します。
Dynamixel I/F Checker
ちなみに、本ツールは通信環境の健全性を見定めるためにRead Instructionのみを使用し、アクチュエータへの位置指令等は一切行いません。