ニュース

    年末年始休業のお知らせ (2015/12/10)

    2015年12月29日(火)~2016年1月4日(月)の間は、年末年始休業とさせていただきます。
    • 電話・FAXによるお問い合わせはお休みいたします。
    • 電子メールによるお問い合わせ及び、オンラインショップからのご注文は、2016年1月5日以降から順次対応させていただきます。
    • 緊急の際はご案内いたしております担当の直通電話にてお受けいたします。
    何卒ご了承くださいますようお願い申し上げます。

    DXCONF更新 (2015/11/19)

    DXCONFに同梱されるdllにおいて、Ping2関数の引数にアライメントの不具合が見つかりました。
    これは複数台のDynamixelが接続された環境において、DXCONFのScan機能を使用する際に「Adv. Ping」にチェックを入れて検索すると、間違ったデバイスがリストに列挙される問題の原因となっていました。

    Dynamixel Libraryの修正版と合わせて、DXCONFの更新版を以下に公開いたします。
    Dynamixel Library 3.1
    DXCONF V2.3.4.0
    技術

    ATmeag128Aマイコンボード再販のお知らせ (2015/10/30)

    諸般の事情にて販売を中止しておりましたATmega128Aマイコンボードですが、本日より再販致します。
    合わせて、ウェブショップの在庫数を補充致しました。



    ご愛顧頂いておりますお客様におかれましては、大変長らくお待たせいたしまして誠に申し訳ございませんでした。

    管理部

ニュースのトップへ

ブログ

    Palmiがやってきた ~アプリ使ってみるの巻3~ (2015/11/10)

    今回は最終で、「Palmi ちょっとCommander」を紹介します。



    「Palmiにちょっと何かをやらせてみよう」というアプリケーションだそうです。

    画面を一瞬見た時に、「ん? もしかしてむずかしい?」と思うかもしれませんが、
    いえいえ、むずかしいことはなく、Palmiにやって欲しい動作を選んで組合わせていくだけなんです。

    どこをどう設定したらよいのか、まず迷うと思うので、最初にここを覗いておくとよいですよ。




    「ちょっとコマンダー」でPalmiに設定した動作を、Palmi Fwapparの「やくそくごと」で確認できます。



    それでは試しに、TVコマーシャルの「たけし、バカヤロー」をPalmiにやってもらいましょう! 

    ちょっとコマンダーには、CMモーションが用意されているんですよぉ。
    では、順番に設定してみますね。

    「ToDoのキッカケを設定する」の文字をクリックすると別画面が表示されるので、“いつ?”は“顔を見たら”にして、 “誰の?”は“誰でも”を選択してみました。



    次に、下記のように設定します。※1.2.3は順不同でOK。
    1.「動き」のリスト→“話す(モーション付き)”を選択。
    2.画面右下の「どのモーションをしますか?」→“CMモーション”をクリックして選択。
    3.「何を話しますか?」→“たけし、バカヤロー”の言葉を入力。
    4.「ToDoのプレビュー」ボタンを押す→Palmiが“たけし、バカヤロー”を動作する。

    では、この動作に名前を付けて保存をすることに。
    1.画面左上の「ToDoの名前を入力してください」をクリック→“たけし、バカヤロー”を入力。
    2.画面下の「ToDoの保存」ボタンを押して完了!



    Palmi Fwapparの「やくそくごと」に、しっかりと登録されています。



    そしてこの後、Palmiに実証してもらおうと私の顔をみてもらったのですが、
    残念ながら、“たけし、バカヤロー”のモーションをしてくれませんでした・・・・。
    何でだろうなぁ・・・・

    では、“誰でも顔をみたら”ではなく、時間で設定しなおしてみたら、
    設定した時間に、Palmiは、“たけし、バカヤロー”をやってくれました!

    本当は、時間ではなくて、“誰でも顔をみたら”で動作してほしいなぁ・・・・。

    Palmiがやってきた
    みっちゃん

    ArduinoでDynamixelを動かす (2015/11/09)

    結構な頻度でArduinoを使ってDynamixelを制御したいといった問い合わせをいただきます。

    ソフトを横着するかハードを横着するかで選択肢が分かれますが、AX-12AであればとりあえずArduinoのなにがしかの端子をSIGNAL端子に直結し電源を供給するだけで接続はおしまいだったりします。
    そこまで簡易的だと通信プロトコルの生成以外の部分でプログラムを頑張らないといけませんが、その覚悟があれば最短で接続は終わります。

    技術サポートではそういった無粋な回答で終わっているかも知れず、その場合はごめんなさい。

    片やソフトをとっても横着したい場合はとなると、そこそこ回路でフォローしないといけないかと思います。
    以前ブログにATmega128マイコンボードとAX-12を接続する方法を紹介しましたが、概ねこの様な回路があればソフト側で対処する部分は最小になる筈です。この回路では半二重通信であるが故のバッファのイネーブル信号をソフト的に生成しないといけない事になっていますが、送信に連動してイネーブル信号が切り替われば良いと割り切ればさらにソフトは簡単になります。
    といったところで、バッファICが1個、インバータ1個、抵抗数本で何とかする回路を描いてみました。それでも部品点数が多と思うかも知れませんが、ソフトをめいっぱい横着するにはこのぐらい無いといけないかと。

    TX/RXとあるラベルの信号線は、各々Arduinoのシリアル用送信/受信端子、それ以外は電源をつなぎます。IC類は回路図を描く際に手持ちのライブラリから引用しただけなので、互換のもので代替して構いません。また、保護やら何やら必要に応じて部品を付加するのはもちろんOKです。
    ちなみに、RS485 I/Fの場合はバッファICをRS485のトランシーバに変更するだけです。


    ここまで用意すれば、ソフトではDynamixelのプロトコルを生成するのと送受信に注力できます。

    Arduinoにも種類がありますが、ここではArduino UNOを前提に記述します。UNOにはプログラムの書き込みやデバッグに使用するUSBポートが備わっていますが、その機能につなっているTX/RX端子を本回路のTX/RXにつないでしまうと、唯一の通信ポートが占有されしまいます。ここではSoftwareSerialのライブラリを使用して他の端子に割り当て直す事としました。
    仮に8pinをRX、9pinをTXとしてSoftwareSerialの端子の割り当てた場合は以下の宣言をしておきます。
    #include <SoftwareSerial.h>

    SoftwareSerial dxif(8, 9); // pin8 is RX, pin9 is TX
    初期化部ではボーレートと後々受信処理を楽にするためのタイムアウトの設定をしておきます。SoftwareSerialは高いボーレートに対応しないため、今のうちにAX-12Aのボーレートを57143bpsに変更しておきましょう。
    void setup() {
    dxif.begin (57143);
    dxif.setTimeout (50);
    }
    これでSoftwareSerialで通信するための下処理は終わりです。

    では早速AX-12Aを動かしてみますが、簡単に1秒間隔で往復運動をさせてみましょう。
    まず位置指令を行うsendpos関数を作り、idと位置を引数としました。ここではGoalPositionへ2バイトの位置情報を書き込めば良いため、インストラクションパケットのidとpos、チェックサム以外は固定とし、直接固定値で配列内に記述しています。
    このパケットを受け取ったAX-12Aは6バイトのステータスパットを返送してきますので、6バイト受信した後にその内容を簡易的に確認した結果を返値にしています。もしAX-12Aからの返信が無かったとしても、初期化時に設定したタイムアウト時間を経過した後に抜けます。
    あとはloopの中でsendposを呼び出すだけです。
    bool sendpos(uint8_t id, uint16_t pos) {  
    uint8_t buf[9] = {
    0xff, 0xff, // header
    id, // id
    5, // inst
    3, // size
    30, // address
    (uint8_t)(pos & 0xff), (uint8_t)(pos >> 8),
    0
    };
    for (int i = 2; i < 8; i++) buf[8] += buf[i]; // calc sum
    buf[8] = ~buf[8];
    while (dxif.available ()) dxif.read (); // clear buffer
    dxif.write (buf, 9); // send inst packet
    if (dxif.readBytes (buf, 6) == 6) // read stat packet
    return (buf[2] == id) && (buf[3] == 2) &&(buf[4] == 0);
    return false;
    }

    void loop() {
    sendpos (1, 0); // Set Goal Position to 0
    delay (1000); // Delay 1 sec
    sendpos (1, 1023); // Set Goal Position to 1023
    delay (1000); // Delay 1 sec
    }
    ハードさえちょっと頑張れば、パケットの生成とその送受信以外に意識するところはありません。いかがだったでしょうか。
    ArduinoでDynamixelをコントロールするのを躊躇していたのでしたら、参考にしていただければと。あ、他にもFUTABA社KO社のシリアルI/Fを持ったサーボモータでも同様の回路で動かせます。

    P.S.
    Arduinoに乗っけてすぐに使えるDynamixel shieldの要望があれば作っても良いかなと。


    技術

    熱い暑いぃ~ (2015/11/05)

    試作中のLWIR Camの評価ついでに、「あついあつい」言ってた輩を観察。

    背中あたりがなかなかホット。
    どちらかと言えば末端冷え性。

    首筋には襟巻き禁物ですね。クリスマスデコレーションの際は気をつけないと

    Palmiがやってきた
    技術

    ロボット相撲 自立型に参加するに際して (2015/10/30)

    ユニバーサルドライバ3.5サンプルプログラムは、専用のライブラリの使い方やラジコン型や自立型といった用途別にいくつか用意されています。



    色々とアイデアを盛り込んで好みの動作に仕上げていただくつもりのサンプルプログラムなのですが、ほぼ無改造のまま利用されているケースも多いかと思います。

    そういった場合に苦慮するのが、ルールの改正かと思います。
    最近のルールでは自立型においてスタート・とストップをリモートで行うべしとあるので、非常停止のみを想定して作られているサンプルプログラムは、そのままではルールに従うことはできない筈でして。
    とは言っても、何かしらのリモコンからスタート・ストップを意味する単純なON/OFF信号が得られるのであれば、簡単な改造で対処でいると思っています。

    ところが、最近ラジコン用のプロポを使用してスタート・ストップを行わせたいというの問い合わせが多くなってきました。どうやらプロポを使っても良いらしく、実際にそうやってスタート・ストップを指示しているロボットがあるためだそうで。
    それを実現するサンプルプログラムは提供されていませんが、sample11(RC_STICK).c を動かして受信機からのパルスを計測した上で、その結果を元にON/OFF的な処理をにコーディングすれば、ある程度の事はできる筈です。

    しかし、弊社から一方的に提供しているこユニバーサルドライバのライブラリを使い込んでいないと難しい面が多々あるのと、受信機の信号は安定していない事もあって、そこそこ確実な判断をするのはそれなりの経験が必要なのも事実です。
    と言うことで、ラジコン用のプロポを使用し、そこそこ簡便な操作でスタート・ストップを行える自律型のサンプルを用意しました。いつもよりコメントをいっぱい書いておきましたので、参考にしてください。
    sample25(SUMOU_AUTO3).c
    大まかな仕様は、
    • sample16(SUMOU_AUTO1).c を雛形とする。
    • プッシュボタンによってスタートとストップを促していたものを、プロポの信号による励起で全て代替。
    • プロポのスティック1本(1ch)だけを使用。
      該当チャネルの受信機の信号はGPIOのJ9に入力。
    • 中立位置をOFFと見なす。
    • 中立以外の位置をONと見なす。
    • スタートはスティックの中立位置から倒された時。
    • ストップはスティックの中立位置から倒された時。
      なおスタートしてから5秒後にスティックの状態の判定を開始し、簡単な誤動作回避として一度ONと判断してから0.5秒後にもONであればストップ。
    • 戦っている最中はスティックを中立位置とする。
    といったところです。
    その他、不安定な受信機からのパルス信号をスタート待ちの時に毎回計測し直していますので、調整の類いを強いられる事無く使える様にしてみました。

    いずれにしても、受信機によってはプロポの電源が切れるとあらぬ信号を出力するものがありますので、堅牢な目的で使用するのは個人的にはお勧めできません。

    技術

ブログのトップへ