ブログ - 最新エントリー

Edison

カテゴリ : 
雑記
2014-10-28 17:31
巷ではEdisonがちらほらと見受けられるように。


WiFiもBluetoothもメモリも装備されてOS入り。こんなサイズに収まってくれるとやること無いですな。
懐かしいx86互換のV25ボードを引っ張り出して並べてみました。Turbo Cが使えるのかな?んなわきゃないか。



初回ロットはコンソールの取りこぼしやら諸々イラッとするので、さらっとアップデートしましょう。

800mm光センサ復刻?

カテゴリ : 
新商品
2014-10-20 13:00
使用パーツの製造終了に伴い廃盤になってしまった800mm光センサ
この類のセンサの民生用途が少なくなった事が終了の主因ですが、ちょっとだけ長距離にあるモノを簡易的に検出したいといったニーズはまだあるわけでして、廃盤は我々としても残念でなりませんでした。

なんとかして代替品をと計画しておりましたが、ようやく同等レベルの代物が用意できそうな段階になってきました。ロボット相撲の時期からはかなりズレてしまいましたが、近々代替品として紹介できると思います。
なお、旧来のシャッターによる感度調整機能は無し、コネクタではなくケーブルを装備というスタイルになるかと思います。



技術

Status Return Levelの復帰

カテゴリ : 
Dynamixel
2014-8-26 10:30
Dynamixelはシリアル通信でホストとコミュニケーションを行いますが、そのコミュニケーションを設定によって容易に阻害する事ができてしまいます。そのアイテムはStatus Return Levelでして、デフォルトは2なのですが、0にすると通常のコミュニケーションは一切できない様に見せかけられてしまいます(唯一Pingパケットには応答します)。
この設定は不揮発領域に配置されており、電源を入れ直しても自動的に元に戻る事はありません

ということで、アクチュエータ系のDynamixel前提ですが、Status Returl Levelのリカバリ用プログラムを作ってみました。
ツクリは単純でして、ボーレートを順次変えながらPingで検索し、見つかったidに対してReadが失敗したらStatus Return Levelが0になっていると仮定し、強制的に2で上書きするといったものです。

#include <stdio.h>
#include <conio.h>
#include "dxlib.h"

#define OFFSETTIME  (50)  // タイムアウトオフセット[ms]

void main (void) {
  TDeviceID   dev;
  char        inputcomport[10], mycomport[20]="\\\\.\\";
  int         bdiv=-1, baud, i, yn;
  uint16_t    val16;
  uint8_t     val8;

 printf ("input com name=");
  gets (inputcomport);
  printf ("use [%s]\n",inputcomport);
  strcat (mycomport, inputcomport);

  if ((dev = DX_OpenPort (mycomport, 3000000))) {
    DX_SetTimeOutOffset (dev, OFFSETTIME);
    printf ("Open success\n");
    for (bdiv=-1;bdiv<250;bdiv++) {
      // ボーレートの変更
      if (bdiv >= 0) DX_SetBaudrate (dev, (baud=2000000 / (bdiv + 1)));
      else           DX_SetBaudrate (dev, (baud=3000000));
      printf("\rbaud=%7d ",baud);

      uint32_t num = 253;
      TDxAlarmStatus stat[255];
      // Ping2で検索
      if (DX_Ping2 (dev, &num, stat, NULL)) {
        printf ("%d device found\n", num);
        // 検索で見つかったデバイスを列挙
        for (i = 0; i < num; i++) {
          // アドレス16(Status Return Level)を読み出し
          if (DX_ReadWordData (dev, stat[i].id, 0, &val16, NULL)) {
            printf ("Found ID=%d stat:$%04X modelno:$%04X\n", stat[i].id, stat[i].Status, val16);
          } else {
            // 読み出しに失敗したらおそらくStatus Return Levelが0だろう
            printf ("Found ID=%d stat:$%04X modelno:???? \n", stat[i].id, stat[i].Status);
            printf ("Do you want to reset Status Return Level ? (y/n)->");
            yn = getch ();
            putch( yn);
            if (yn == 'y' || yn == 'Y') {
              printf ("\nupdate....");
              DX_WriteByteData (dev, stat[i].id, 16, 2, NULL);
              Sleep (800);
              if (DX_ReadByteData (dev, stat[i].id, 16, &val8, NULL)) {
                if (val8 == 2) printf ("success\n"); else printf("fail\n");
              } else printf ("fail\n");
            } printf ("\n");
          }
        }
      }
    }
    DX_ClosePort (dev);
  } else {
    printf ("Open error\n");
  }
}
DXLIBを使っていますので、コンパイルにはGCC Developer Liteを使用したコンパイルの方法を参考にしてください。

また、コンパイルが面倒といった場合は、ちょっとイリガルな方法ですがDXCONFを使って書き換える事もできます。
Status Return Levelが0でもPingには応答するため、スキャンすると以下の様に???(不明なデバイス)として列挙されます。


通常であれば、該当デバイスをクリックする事で右半分に表示されるコントロールテーブルがそのデバイスに応じて切り替わるのですが、不明なデバイスの場合はこの画面キャプチャの様に5個のアイテムのみの表示になってしまい、値自体も不定となります。
ではこのコントロールテーブル上にマウスカーソルを置き、右クリックしてください。ポップアップメニューが表示されますので、もしデバイスの型式がわかっているのであれば、この中から該当するデバイスを選択します。


選択したデバイスに応じた コントロールテーブルの表示に切り替わりますので、その後強制的にNo.16 Status Return Levelを2に変更します。処置後は全ての通信ができるようになる筈です。


お試しください。

技術

Digitus STM32F3用ブートローダ

カテゴリ : 
新商品
2014-8-20 13:34
Digitus STM32F3用ブートローダの情報が不完全でしたので本日補完しました。
STM32F3 Bootloader
ST社のDfuSeというツールを使えばUSB経由でチップのフラッシュへ書き込む事ができますが、その前にBOOT0端子(CN2-38)を3.3V端子(CN1-2)につないでからUSBケーブルを接続してください。

技術

DXLIB V3.0公開

カテゴリ : 
Dynamixel
2014-6-11 15:06
Dynamixel Library Version 3.0を公開しました。

既にいくつかのソフトウェアには導入済みですが、DXLIB2(XLやProシリーズの新プロトコル用API)の機能拡張に伴い、パラメータの互換性を保つためDXLIBも修正を施しました。
主な変更点は以下の通りです。
  • アドレス指定を8bitから16bitに変更
  • 不明瞭だったTDxAlarmStatus構造体のアライメントを1バイト境界に固定
  • 似非ReadSync APIを追加
  • 不定なDevice IDを指定された際のクラッシュを簡易的にブロック
  • dllのソースをC++に
  • API引数の変更に伴い各サンプルを修正
  • LabVIEWのサンプルを大幅に拡充
  • EXCELのVBAを64bitに対応
特にLabVIEWから制御する際の使い勝手を向上させたのと、サンプルプログラムを増やしました。特定のアイテムへのアクセスを対象としたviは、ループ中に適用しても不用意にトラフィックを上げない様な仕掛けや、LabVIEWのイベントストラクチャを多用したり、ダイナミックなポートの開閉等、そこそこがんばってみました。

PCから直接制御する際の参考にして下さい。

技術

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にはうってつけのでかさだが、テキストエディタは表示方法考えないともったいなくていかん。