ブログ - 最新エントリー

ArduinoでDynamixelを動かす4

カテゴリ : 
Dynamixel
2017-6-26 12:00
Arduino UNOのI/Oやメモリでは不足する場合は、Arduino MEGAを使う方も多いかと思います。DXSHIELDはArduino UNOのみを想定したハード及びライブラリ構成となっていたため、Arduino MEGAの機能を活用できませんでした。

今回の製造ロットに合わせてライブラリに少し手を加え、任意のハードウェアシリアルオブジェクトを選択できるようにしました。これにより、Arduino MEGAではデフォルトのSerialの他にSerial1~Serial3のハードウェアシリアルを利用する事ができます。なお、Serial1~Serial3のTX/RX端子はDXSHIELDのヘッダでカバーできる範囲に無いため、別途ジャンパ線でつなぐ必要があります。詳細はこちらで。




技術

KONDO B3M用SHIELD

カテゴリ : 
その他
2017-5-18 11:00
DXSHIELDのコメントに「TTLやRS-485 I/Fを持ったパケット通信をサポートするDynamixel以外のサーボモータにも適用できます。」とあるものの、コネクタが違えば変換ケーブルなどで対応せざるを得ないし、そもそもつながるものかの判断がつかないとの要望があった事もあり、見直しをする事に。

ひとまずリクエストの大半を占めるKONDO B3MシリーズKRSシリーズで使える様にXHコネクタとピンヘッダが載る仕様に変更。



再リリースはしばしお待ち下さい。

技術

ArduinoでDynaixelを動かす3

カテゴリ : 
Dynamixel
2016-12-12 10:50
DXSHIELDにて公開しているライブラリですが、近々Dynamixel Protocol V2に対応したものを公開します。更新されたライブラリを用いる事でDynamixel XM/XH/XL/ProシリーズをDXSHIELDで簡便に活用できるようになります。

なお、ライブラリそのものがArduino UNOを想定していますので、ライブラリ自体がメモリを消費してしまうと自身のスケッチに使用するメモリを圧迫しかねません。今後は基本的な送受信ルーチン(TxPacket/RxPacket)を用意した上で、大半をそれを用いたラッパルーチンに変更します。

技術

I/F各種

カテゴリ : 
Dynamixel
2016-8-25 16:30
ちょとニッチな使い方もあるとの事で、いくつかシリアル系のI/Fを作ってみました。とは言え既製のものと大差は無いので、そちらで十分であればスルーしていただければと。

USBの絶縁
ベステクには過電圧で壊れたUSBポートを持ったPCが何台かあったりします・・・。小綺麗にPCを使っている方にはあまり遭遇する事は無い事ですが、USBポートは電気的にブチ壊れる事があります。
また、開発中のボードを活線状態ICEでつなごうとすると、ぱちっと静電気が飛んでPCがフリーズしたりICEが逝ってしまったり・・。
電位差がある所に電線をつなごうとすれば電流が流れようとしますので、そのときのショックを受け止め切れなければ何か起こるのは避けられず。
そういった場合にUSBポートそのものを絶縁してお茶を濁そうというのがこちらのUSBISOです。

USB 2.0 FSのみに対応してるので、残念ですがそれ以外の規格には使えません。
また、通常のバスパワーよりは目減りしますが、最大2Wまで絶縁型の電源を装備しています。
RS-485及び1ワイヤTTLシリアルドングル
USBケーブルなしでPC直結して使用するドングル型のがあればRaspberry Piにこぢんまりと収まるというリクエストでできたのがこちらのUSB2RS485 dongleUSB2TTL dongleです。

Dynamixelへの電源の供給方法はユーザにお任せと割り切り、USB-3WAYやDXHUBの各I/F部分だけを切り貼りしただけのものです。と言いたいところですが、いずれもそこそこの耐圧を持った絶縁措置を施しましたので、イザというときでもPCのUSBポートまで壊すことは無いかと。
マルチファンクションI/O
ディスコンから長らく代替品の用意ができず申し訳ありませんでした。CPUをAtmel社のATmega168からNXP社のLPX824に変更し、必要以上に小さくしたDXMIO(RS485)DXMIO(TTL)を用意しました。
 
小さくしすぎでアクセサリ用の電源容量が小さくなってしまいましたが、全端子が12bitのADコンバータ・汎用GPIOとして使用できます。
現時点ではDynamixelのプロトコルで動作するスレーブ用ファームウェア(若干貧弱ですが)を書き込んだ上で出荷します。
なお、今後GCC Developer Liteによるプログラミング環境を提供しますので、Dynamixelのホストとして機能させたり純粋なマイコンボードとして使用する事ができます。その際にはFreeRTOSをサポートしますので、小さいながらもマルチタスクの恩恵をあずかる事ができます。
技術

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の要望があれば作っても良いかなと。


技術