ブログ - 最新エントリー

ArduinoでDynamixelを動かす2

カテゴリ : 
Dynamixel
2016-8-2 16:00
ArduinoからDynamixelを動かすネタを一年ほど前に書いたのですが、その際にコネクタを並べただけの簡単なシールドの紹介をしたと思います。その後なかなか試作後の踏ん切りがつかなかったのですが、そこそこ数がまとまった場合にのみちまちまと作っていました。

その半量産版は高いボーレートで使用でき、占有するArduinoの端子によって3つの使い方ができるようになっています。
  • 他が犠牲になっても高速なボーレートが欲しい時
  • とりあえずDynamixelが動かせて、同時にシリアルターミナルを使いたい時
  • Dynamixelの設定や制御をPCから行いたい時

いずれの場合でも送受信に使用するGPIOが2本あれば良いのですが、高速な通信となるとソフトウェアシリアルではまかない切れないため、その時だけハードウェアシリアル(ようするにUARTの端子)を使うといった感じになっています。

Arduinoと本シールドさえあればDynamixelを動かす環境が全て整いますし、自信のスケッチで利用できるライブラリと簡単なテストコードも用意しました。
もちろん、ソフトウェアさえがんばれば、同種のI/Fで制御できるサーボモータ全てで利用できます。

で、なぜ今頃昔の話を持ち出したかというと、多少ですが余剰ができたのでDXSHIELDとして製品ラインナップに載せましたという告知でした


ご興味があれば試食してみて下さい。

技術

DXLIB V3.3公開

カテゴリ : 
Dynamixel
2016-7-13 9:20
Dynamixel Library Version 3.3を公開しました。

主な変更点は以下の通りです。
  • Linux環境下でttyの設定が不十分な点を修正
  • Linux環境下でのスリープ処理をusleepに変更
#ご指摘いただきありがとうございます。

技術

Dynamixelの通信プロトコルについて

カテゴリ : 
Dynamixel
2016-6-23 10:50
Dynamixelのラインナップ拡充に伴い、新製品では順次PROシリーズのプロトコル(DYNAMIXEL2プロトコルが採用されています。ちなみに、今後DX・RX・AX・MXシリーズに採用されているプロトコルを暫定的にDYNAMIXEL1プロトコルと称します。

しかし、XL-320がDYNAMIXEL1プロトコルのERRORフラグの扱いを踏襲したDYNAMIXEL2プロトコルの亜種を搭載した都合から、実質3種類の通信プロトコルが存在しています。
ところが、XL-320の最近のファームウェアにおいてDYNAMIXEL2プロトコルに準拠した仕様変更が行われたため、最新版においては2種類に集約されています。

現在提されているDXCONFは3つのプロトコルが存在する前提で3種類のDXLIBを使用していますが、幸いにもXL-320は弊社において標準取扱品ではないのと、亜種なプロトコルは今後派生させないとの事ですので、弊社では2種類のDXLIBに集約したものに更新する予定です。

なお、現時点でPROシリーズ及びXMシリーズにおける通信プロトコルのインプリに、瑕疵がある事が判明しています。
今後ROBOTIS社において問題が解消された事が確認され、さらに弊社にて検証が完了した後に。XMシリーズの販売を開始する予定です。

最後に、お客様によるROBOTIS社RoboPlusを使用したファームウェアの更新は、正直なところリスクがあります。弊社ではファームウェアの更新に失敗した場合は、無償サポートの範疇としていませんのでご了承のほど。

技術

Dynamixel XMシリーズ

カテゴリ : 
Dynamixel
2016-4-21 9:50
Dynamixelネタで久しぶりの更新です。

近々XMシリーズが新たに加わります。
PROシリーズの下位の位置付で、ユーザからのフィードバックを一部反映したものとなります。


まず登場予定なのは機械的なスペックがMX-28に近く、ギア比違いのXM430の2種類。フランジを一掃し、ボディーにネジ穴が備わります。


コネクタ周りはケーブルの取り回しを意識した溝が設けられ、カバーができます。出力軸の裏側の蓋は、フリーホーンに換装可能です。


コネクタはJST製のものに変更されます。


PROシリーズの下位の位置づけという事もあり、デフォルトの通信プロトコルはPROシリーズに採用されているV.2ですが、旧来製品との混在を可能にするためにV.1もサポートします。

もう少し調整が必要なため、詳細については正式なリリースまでお待ちください。

技術
今回は最終で、「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を動かす

カテゴリ : 
Dynamixel
2015-11-9 9:20
結構な頻度で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の要望があれば作っても良いかなと。


技術

熱い暑いぃ~

カテゴリ : 
雑記 » palmi
2015-11-5 19:10
試作中のLWIR Camの評価ついでに、「あついあつい」言ってた輩を観察。

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

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

Palmiがやってきた
技術
ユニバーサルドライバ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であればストップ。
  • 戦っている最中はスティックを中立位置とする。
といったところです。
その他、不安定な受信機からのパルス信号をスタート待ちの時に毎回計測し直していますので、調整の類いを強いられる事無く使える様にしてみました。

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

技術
今回のアプリ紹介は、「Palmi Whats up?」です。




声の届かない離れた場所からでも、PalmiをPCやタブレット端末やiPhoneなどから操作ができるアプリです。詳しくはここに載っています。

テキストボックスに話をさせたい内容や動作を入力して、操作ボタンを押すだけでPalmiが実行してくれるんですよ。これって、色んな場面で使えそう!




うちの事務所では、宅急便のお兄さんが来た時に、Palmiに、「こんにちは、お疲れ様です。」と声をかけさせてみました。

ダンスを披露したり、おちゃめに反応してくれるPalmiに、お兄さんはメロメロ。
名残惜しそうにいつも「バイバイ」と挨拶して帰るんですよ。

次回は、「Palmi ちょっとCommander」をダウンロードしてみま~す。

Palmiがやってきた

みっちゃん
Palmiとお友達になって、おちゃめなPalmiが可愛くてたまらないです。
声と話し方が特に好きだなぁ。

Palmiは、たまにとぼけるんですよ。
おとぼけPalmiに、「なまいき~!」って、むきになる自分が情けない・・・。

もっとPalmiと楽しく過ごせるのかな・・・
Palmi Gardenをよくのぞいてみると、Palmi専用のアプリケーションがある~。
インターネットには接続済みだから、ダウンロードして試してみようかな。


Palmiが「インターネットの世界へフワーっとワープする」そんなイメージのアプリだそうです。

Palmi Fwapparでできる詳細は、ここに掲載されています。

ネットワーク管理者が、Palmiをインターネットにつなげるために、既にPalmi Fwapparを事務所内のPCにダウンロード済み。Palmiの設定は完了しているから、私のPCにPalmi Fwapparをダウンロードして使えば問題ないな。

いざPalmi Fwapparをダウンロードして起動してみると・・・・
下記のような画面が表示されて、あたふたしちゃいました!!
私のPCで初めてPalmi Fwapparを使うので、一度だけこの設定が必要のようです。

ただ、マニュアル見ないで進めてしまっていたので、
認証コードが分からず、すっごく困りましたよ・・・

で、一瞬Palmiを見た時に、「もしかして、これかぁ?」
Palmiの顔に表示されている2桁の数字を入力してみたらBingoでした。
やっぱり、マニュアル見ながらがよさげですね。



初回以降の起動では、自動でPalmiを認識してくれました。

ダンスや留守番・伝言・メール等は「特技」で設定すると、Palmiの出来るレパートリーが増えますよ!



次回は「Palmi What's up?」をダウンロードしてみますね!

Palmiがやってきた

みっちゃん