Dynamixel サーボの最近のブログ記事

Dynamixel AX-18Aの評価 #01

評価用にとりあえずひとつDynamixel AX-18Aを購入してみました。

じゃん!

IMG_1639.JPG

じゃん!

IMG_1640.JPG

AX-12と比較したいと思います。
(注:AX-12は現行のAX-12Aの2世代前のサーボです)

見た目はそんなに変わっていません。
各部のサイズに変更はないようで、そのまま置き換えが可能だそうです。

IMG_1642.JPG

背面は固定用の穴が増えています。
まだ、使い道が分かりませんが、結束方法が多いことに越したことはないので良いと思います。
あと、反対軸の軸受けが見るからに強化されています。

IMG_1645.JPG

ホーンは切り欠きとスリットの数が増えました。
以前は120度ごとに3つの切り欠きがあり、3通りに接続できることがウリだった気がするのですが、逆に間違いやすくて不評だったのかもしれません。
スリットが2つあるのは良いですね。対角が2本スリットなのですが、これってFUTABAのサーボと同じですねw

IMG_1650.JPG

大きな変更はこちら。
4番ギアがアルミに変更になっています。
(前回の日記でファイナルギアと記述してしまいましたが、すみません。4番ギアでした。)
確かに今までギア欠けは4番ギアばかりだったので、理にかなっているのかもしれません。
ただ、ファイナルギアもねじ切れることがありましたし、剛性の問題からも出来ればファイナルギアも金属化して欲しかった・・・残念。

IMG_1655.JPG

あと気が付いたのですがホーンの厚さが0.5mm増えているみたいです。
説明によればホーンも強化されているとのことです。

IMG_1658.JPG

まだ、火入れはしていません。
速度とパワーの評価は後日・・・。
KO-Link2の腰ヨー軸に入れてブン回してみたいと思います。

前回の日記でAIMotorのプログラムをDynamixelに移植する話をしてたのですが、先月27日にベステクから「Dynamixelシリーズ用Windowsサンプルプログラム」なるものが公開されてました。
比較的タイムリーなネタなのにすっかり忘れていたという…。
これを使わない手はないですね!(笑

で、さっそくいろいろ調べてみたのですが、ヘッダーファイルとか潜っていくとGDLの深い階層にたどり着いた。
一通り必要なファイルをそろえてVC++でコンパイルしてみるが、当然のごとくエラーの嵐。
もう、エラーを読む気にもなれないので、移植するのは5秒で諦める。

とりあえず、GDLの正規の方法でx86の設定でコンパイル出来ることは確認。
コンソールでDynamixelを制御するには十分ですね。
というか、ロボットの制御にGUIが必要なのかという話もありますが、趣味でやることに意味があるかどうかということは気にしません(笑
GDLの設定で気になったのはGDLの設定の「x86ウィンドウアプリ」
ただし、今回はあくまでもVC++で動かすことが目的なので無視。

で、僕の技量でMFCでDynamixelを動かすアプリを作るには…。
「WinSock」を使うしかないだろう!!!

方法
・制御用のアプリをMFCで作って、サーバーのスレッドを立てる。
・Dynamixel制御用のアプリをGDLで作成し、クライアントの機能を持たせる
・MFCアプリ起動時にDynamixel制御アプリを起動し、Dynamixel制御アプリはMFCアプリに接続。
・2つのアプリは「localhost」で接続されているので実質メモリ間コピーを行う。
・メモリ間なので高速なUDP接続がパケ落ちなしで使える(たぶん)

まぁ、強引ですね。

調べてみたら、アプリ間のデータの受け渡しで、簡易に行うときは結構使われてる手みたいです。
本当は完全にVC++側で制御したかったのですが、制御にPCのリソースを用いることが一番の目的なので制御がGDLのアプリ主導になるのはまぁ良しとします。

ここで、GCCは大学でUNIX上で使っているものの、いまいち普段マイコンのプログラムに使っているGDLでx86のプログラムを書くということになじめなかったのと、複雑なプログラムは全部VC++で書いていたので、まずGDLのx86プログラミングになじむためにも、ちょっと実験してみました。

とりあえず必要な要素は2つ


  • スレッドはちゃんと立てられるか(まず、無理ってことはないと思うけど)。

  • WinSockはちゃんと使えるか(VisualStudioのアプリと通信できるか)。

結論としては、どちらもYES。
簡単なプログラムですが、なんの問題もなくコンパイルして実行できました。

%96%B3%91%E8.PNG

奥にあるウィンドウがVC++で作ったサーバーアプリ、手前のがGDLで作ったクライアントアプリ。
単純にカウントアップした値と文字列を送るプログラムですが、ちゃんと動いてます。
(ちなみに接続はTCP使ってます。)
まぁ、技術的にはWinsockもスレッドもいちいち話題にするほどのことじゃないんだろうけど、ちゃんと動くってのがやっぱり楽しいですね。

とりあえず、このあとに実際にDynamixelが動いてますっていう動画でも付けられたらいいのですが、実は「AX用接続ケーブル」も「Dynamixelコンフィギュレータ」も持っていないので、これらを揃えたらまた実際に続いて実際にモーターを使いながらアプリを作りこんで行こうと思います。

ちなみに、フタバのサーボに関しては、HSPも守備範囲なので、UE村さんの30軸制御のプログラムにソケットを付けて利用させてもらおうかなと思います。
(まぁHSPなんでウィンドウもHSPで作ればMCF使う意味すらなくなりますが)

というわけで、こっちの方法でうまく行きそうなんで、Windows用のライブラリ作る話はナシでm(_ _)m

PS:
今回windowsで制御するために最新のGDLをダウンロードしたのですが、ターゲットに「RPU10」が入ってますね。
噂には聞いてましたが驚きです。あいかわらず関数にコメントがないのが辛いですがw(分かりやすいからOKなんですけどね)
KUMACOに使ってるSH2/7144もGDLのターゲットに入ってるし、なんともGDLとは切れない縁があるみたいな気がしますw

Dynamixel制御用プログラムVer.3を公開しました。

http://dream-drive.net/robot/ax12.htm

研究室で教えてもらった小技などなど用いて動作を軽くして、高速化しました。
ソースの関数名なども大幅に変わり、記事も大幅に書き換えています。

あと、今レスコンでSH2/7045を使ってRX-64を制御していることもあり、このソース1本でDynamixel DX-117・AX-12・RX-64をサポートします。

また、使用できるマイコンもSH2/7144・H8/3052・SH2/7045に対応しました。
それぞれレジスタが異なるのでプログラムは個別化しておりますが、ユーザーサイドでmain関数内での使用方法は揃えております。

SH2/7045は、秋月で販売されていたものと、ベステクで販売されていたもの(FREEDOM搭載)両方で動作確認しております。

Dynamixel RX-64

サークルでレスキューロボットコンテストに出るのですが、ロボットアームを作るため、高トルクなサーボが必要となり、ベステクから出ているROBOTISのDynamixel RX-64を使うことになった。

SN390015.JPG

プロトコルは、AX-12と同じなんで、問題はなく・・・
というか、公開しているAX-12用のプログラムでそのまま動きました。
RX64が動くなら、DynamixelシリーズはすべてOKですね。

むしろ問題があったのは、TTLからRS485への変換回路。
AX-12とは違ってTTLではなく485に変換するため専用のICがひとつ必要なのですが・・・
下の回路図にだまされました。 

%96%B3%91%E8.jpg

6と7の順番が入れ替わってるとか気づきませんて;;;
誤植とかじゃなくて、この通り作ったら動きましたが、一度は逆に接続してICが燃えました。

ちなみに実測ですが、18V/2Aで41kgf・cm出てました。
21Vで本当に64kg出るかどうかは謎ですが、KONDOの4000番より強いのは確かですね。(相応の電圧かけてるから当然ですが。)

実際大会用のマシンはこれを3:1で減速して180kgf・cmのサーボとして使用する予定です(ニヤリ

今日は、AX−12サーボ関係の関数を作りこんだ。
とりあえず、ポジションキャプチャを使ってアニメーションさせる関数を作った。
温度・トルクなどの内部情報を取り込んだり、現在の値でパワーオン・パワーオフさせる関数。
とりあえず、CM−5のマネージ機能にあるコマンドは全て作った。

「これで、なんでもできるぜ」と思った矢先のこと。

とつぜん、AX−12サーボが暴れだす。
どんな命令も受け付けない。
そこから悪夢は始まった。

単体で動作させてみるとなにやらIDやらビットレートやらがリセットされている模様。
なにが起こったのか分からなかったがどうやら、パケットが混雑していたのが、うまく作用したのだろうか・・・。
いろいろなデータが書き換わった模様。
こんなことも起こり得るんですね。


ここで、Lock命令の意味を理解する。

Lock命令 - Lock [47(0x2F)]

1で設定されればアドレス[0x18]〜[0x23]の値以外の書き込みが不能になる。
解除は電源を切る以外に方法はない。


そして、ここからファームウェアの話。
ここで、ファームウェアを更新してなかったのを思い出し、メンテナンスとIDの再設定のためにばらしたので、「ついでに」と思いファームウェアのアップデートを行うことに決定。
念のため1つずつファームウェアを書き換えていく。
とりあえず、順調に「Success」の文字が現れる・・・。

と思いきや、もうあと数台というところで、突然「CM-5 on off」とかそんな感じの表示が現れる。
不安になって、全てのサーボを更新し終わった後、もう一度確認すると。
「無限回転」「LED点灯しっぱなし」「回転角が60度」「無反応」など。十人十色の狂い様。
それも「Success」と表示の出たサーボまで・・・。
結局、23個のサーボのうち4つしか生き残らなかったという惨劇。

4つに関しては、問題なくファームウェアもアップデートされました。

とりあえず、今週末の大会は絶望的となりました。
4つサーボでシンプルファイターでも・・・・・・無理だろう。

で、結局ベステクさんのサポートにお願いしたところ、送ってくれとのことでした。

運ばれていくサーボの図。
20日の大会には間に合うことを祈ってます。


ここで、言えることはAX−12のファームウェアはベステクさんに任せた方がいいんじゃないかってこと、そして、Lock命令は重要ということ。

PS:
あと、標準のケーブル。モーションやってるとすぐに被服がめくれて導線が見えてきます。
これはちょっと危険。
それと、いろいろAX−12について分かったんですけど、結局コンプライアンスの設定はノーマルのまま使用してるんですが、やっぱ変えたほうが保持力とか変わるんだろうか・・・。
歩行モーションでどんどん腰の位置が低くなるもんで・・・。

学校で、安定化電源を借りました。
モーション作りに電池だとすぐなくなるんで・・・。
2A出るやつなんですが、待機時にすでに0.8A食ってます。
・・・ということは。

案の定。
モーションやるとすぐに2A突破して電圧が下がり始めました。

「屈伸」をやらそうとすると5V切ってマイコンリセットwww
ん〜、みなさんはAX−12は何Vで動作させているのでしょう。

うちは、バイオロイド純正のバッテリーを3つで使いまわしています。
やはり軽いリポなんかがいいんですかね。


そして、AX−12のモーションはどうやって作っているのでしょう。
というか、みなさんのロボットのモーションの作り方って気になりますね。
うちは、とりあえず全サーボに512を送って、ターミナルでサーボを1つずつ制御して、「いい!」と思ったところで、データを取っています。
これは、教示機能が使えないKONDOのサーボを使ってたときのプログラムを移植したものなんですが・・・。

バイオロイドはポジションキャプチャできますが、剛性がないのであんまり意味がないような・・・。
などと考えて実装していません。

実は、屈伸すら出来ない状態で・・・。
トルクが足りてない気がするんだけど!?

なんか、今週末が大会なんで、結構焦ってますね;;
その焦りぶりを日記で表現してみましたww

では!w

AX-12専用3割減

夏の大会用の基板を作った。

PWMの回路をとっぱらって、従来にくらべて面積3割減の70%サイズ。
AX-12ってホントにいい。
配線がキレイになる上に、基板上の配線も簡単で、省力化・軽量化できる。

もっと小さくするために・・・今度はマイコンボードじゃなくて、H8のIC単品で設計したいな。
とりあえず、今回はこのサイズ。

399さんの助言を得て、AX-12のビットレートを変え、通信しました。
・・・が、動かないので基板の配線を見つめ直し、あることに気が付きました。

使っているマイコンはH8/3052、このマイコンはSCIを2つ持ち、レベル変換によって2台のRS-232Cと通信できる。
そいつが、CN4ピンにTxD0、TxD1、RxD0、RxD1と用意されている。

レベル変換の回路を排除すれば、AX-12と通信できると考えていたのだが、結果は大きく違った。
CN4に出力されるSCIは既に処理されており、実際はPort9と兼用のTxD0、TxD1、RxD0、RxD1が、正解だった。

というわけで、せっかく作ったプリント基板を一部カットして、ジャンパで繋いだところ、なんとサーボが動くようになりました。
そして、74HC126の回路はちゃんと動いているようです。

ちなみに19200bpsで通信しています。ソースはこの前のヤツが、そのまま使えました。
決して、失敗したプログラムではないようです。

メインプログラム - AX12.c
SCI初期化 - SCI_INIT.c

ちなみにPort4が0で送信、1で受信になるように作りました。

また、パターンを修正して、「PWMサーボを24軸 と AXサーボを同時に制御出来る基板」として、まとめページをつくろうかなと思う。

先日、「完成した」と言った基板。
使ってみたのだが一向に動きません。

実はH8/3052のSCIは2ch用意されているのですが、チャンネル0を使ったのは今回が初めてでした。

PCの方にはちゃんと通信の状態が帰ってきます。
AX−12の方に送った命令は、こちらから見える形では確認できないのですが、一向に動いてくれません。

そういえば、マニュアルで「Direction_Port」がHighのとき、TxDでDataで出力になってますが、逆じゃないのかなと思うのは僕だけでしょうか・・・。

その辺が「パッ」としないままのプログラミングだったので、いっそ・・・ということで、PIN3にマイコンのTxDを直接繋いで、送信だけの実験をしてみました。

結果。

やっぱり動きませんでした。  orz

失敗したプログラムは以下のとおり

メインプログラム - AX12.c
SCI初期化 - SCI_INIT.c

何が、問題なのか・・・。
というか、パケットの送り方はこれでいいのだろうか・・・。

ロクに実験もせず、マニュアルの回路図だけで基板を作ったのはやっぱり無茶だったようでした。
AX-12、ピクリとでも動いてくれればよいのですが・・・。

そんで、ネットサーフィンしていたら、ONOさんのところで、「AX-12の通信速度は1Mbpsだったのか・・・」って記事を見つけました。
AX-12のサーボはバイオロイドのものなので、いったいいくつに設定されていたのか・・・。

答えはどうやら、「57142bps」
ということで、57600bpsに設定したら良いらしい。

AX-12のマニュアルで速度が「9600bps〜1Mbps」となっていたので、てっきり、なんでも良いんだと思って19200bpsに設定してましたww
そんな訳ないですよね!ww

とりあえず、マイコンを57600bpsに設定して、実機が学校にあるので、月曜にでも試してみたいと思います。
あー、なかなか思うようには行きませんね。
苦難の日々はしばらく続きそうです。

しかし、H8/3052も通信で1Mbpsは出せない模様。
追加でAX-12買ったらどないすりゃええねん;;

とりあえず、ひたすら問題点を列挙する日記なのでした。

ちょっと遅くなりましたが、やっとDynamixel AX-12 の制御基板が完成しました。
1年ぶり、KOKUTENボードのバージョンアップ版です。

内部の様子はこんな感じ。

2つ並んでるICが、3ステートバッファの74HC126とインバーターの74HC04です。
簡易版ではなく、マニュアル通りに作りました。

パターン面はこんな感じ(↓)

ただ、問題がココ(↓)のところ

汎用ポートがマイコンの電源の3端子レギュレーターに干渉してしまいました。
今回は、干渉はココだけのようですが、まぁ、失敗って言えば失敗ですね;;

あと、持った感じちょっとズッシリ感がある気がします。


そして、ついでと言っては何ですが、Interface 6月号の付録ようの基板も完成させました。


裏側はこんな感じ(↓)

Interfaceの方の基板はすでに新しいパターンを開発し始めているのですが、しばらくはこれで、AX-12、Interface共にソフトウェアの実験をしていこうと思います。

Dynamixel AX-12

| コメント(2)

今日はまじめにロボットのお話。バイオロイド搭載のDynamixel AX-12。

結局Merosで再度PWMサーボを使うことになって、ROBO−ONEがあり、スクエアがあり・・・で、カントリーが終わるまでは、触らないことにしてたんですが、最近K-PROJECTのかつさんからいただいていたマニュアルを印刷して読んでました。
もらったのが去年の12月なんでむしろ今更って感じなんですが;;(すみません。

で、いろんなセンサーの補正もかけたくてCM−5を使うのがどうも微妙なので、H8マイコンから動かす方法を考えていました。
でも結局、送信と受信の賢い方法が思い浮かばず、参考文献もいいのが見つからず、Broadcasting IDのみを使用していっそ受信を捨てることができないかとベステクさんにメールしてみた。

ちなみにBroadcasting IDというのは、全体への命令をあらわす。
普段、AX-12というモーターはIDが割り当てられており、サーボモーターひとつひとつに命令を送って動作する。
そして、その代わりに命令を送られたサーボモーターから、そのモーターの角度・スピード・内部温度などの値が戻ってくる・・・という使い方をする。
だが、全体を指定すると、それぞれのモーターからの情報は帰ってこないのだ。


そして、質問はこう。

  • DATA(PIN3)にマイコンのTXDのみ接続してHalf duplex UARTを作成しない。
  • 受信をせずにBroadcasting IDを使用する。
  • そして一定時間ごとにサーボのデータを更新する。

これが可能かどうか。


結論はYESだそうだ。

実行も、いきなり「0xFF 0xFF 0xFE〜」のデータを送ったのでいいらしい。
これだと、PWMサーボの現行のシステムをそのまま移植できる気がする。

もちろん、AX-12というモーターの利点をほとんど殺した使い方になってしまうが、

  • ソフトウェア割り込みのPWMによるジッターが発生しない
  • 分割回路を必要としない
  • スピードの指定が出来る

これだけでも、充分PWMサーボとの差別化は出来る。

あくまでも、現行のシステムと互換するための使い方であり、ゆくゆくはちゃんと処理したいと思う。
ていうか、モーターひとつひとつがアクチュエーターであり、センサーであるなんてすばらしすぎる。
モニターに各関節の温度が表示されれば、まるでガンダムじゃないかw
どっちかって言うと加工より制御の方が興味があるので、扱えるデータが多いのはかなり楽しい。

今回は本気でDynamixel AX-12でROBO−ONE目指そうと思います。

0050601-1.png

本日、K-PROJECTのかつさんより、AX-12の日本語化マニュアルを頂きました。

これで、AX-12をマイコンでいじれる・・・?のでしょうか。

バイオロイドのCM-5も結構いいマイコンだとは思うのですが、如何せんセンサーの増設ができない時点でいろいろと問題があります。

かつさん、ホントありがとうございます!!

モーター

二足歩行ロボットのアクチュエーターといえば、サーボモーター。

サーボモーターといえば、PWMで、マイコンのPWMを分割したり、またそのせいでジッターに苦しんだりします。

逆にPWMがなくても使えるのがコマンドサーボ。

これもいろいろ種類出てますが、最近搭乗したベステクの「BTX030 Dynamixel AX-12」がいいなーとか、思ってます。

というか、これもしかしたらBluetoothのシリアルにつないだら、自立のとき意外はモーションをパソコンにおいて、マイコン積む必要ないんじゃないかな??
どうなんだろ?

とりあえず、マイコンのSCIについて、もっと深く勉強してみたいと思う。

って、いうか、まあ今週末がROBO−ONEなんで、応援よろしくw

Profile

me.jpg
Name : みっちー
小学校で電子工作にハマり、高校時代はゲームプログラミング、大学時代にロボット製作へどっぷり浸かりました。
社会人になっても、なにかとものを作るのが大好きで、日々ネタと仲間を求めて活動中です。

Dream Drive!!

bana.png
http://dream-drive.net

趣味のロボットとプログラムを中心としたコンテンツのサイトです。

My Robots

kolink2.jpg
KO-LINK2
第2世代 並行リンク足ロボット

kolink.jpg
KO-LINK
並行リンク足ロボット

BusterGX.jpg
BusterGX (Ex Walker)
G-ROBOT + ROBO-XERO

kumaco.jpg
KUMACO
ぬいぐるみロボット

SARUBO.jpg
SARUBO
JX-SYSTEM搭載ぬいぐるみロボット

kokuten3.jpg
KOKUTEN 3
リアルタイム逆運動学制御ロボット

meros.jpg
MEROS
膝なしロボット
(胸部マトリックスLED搭載)
by Mechaniker

kokuten12.jpg
KOKUTEN 1&2
はじめてのロボット
by Mechaniker

協賛広告

最近のコメント

月別 アーカイブ

このアーカイブについて

このページには、過去に書かれたブログ記事のうちDynamixel サーボカテゴリに属しているものが含まれています。

前のカテゴリは100kgw・cmサーボ自作です。

次のカテゴリはPWM制御です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。