KO-Link2Sについて(OpenCM用PS2 Shieldライブラリ公開)
※ 本記事内でOpenCM 9.0.4用のCytron PS2 Shield用ライブラリを公開しています。
第30回ROBO-ONEに出場したKO-Link2Sのロボットの今回改良したポイントの紹介と、次回の課題を考えます。
動作すると、こんな感じです。
ROBO-ONEの競技では、1つめの段差で持っていかれました。
自分の感覚では結構歩けた”気”がしてたのですが、後からニコニコ動画を見直すと全然ダメダメですね。
そもそも傾きの制御をしていないので、運任せなシステムではダメです。
今回は間に合いませんでしたが、外乱を受けても再現性のあるシステム作らないといけません。
電子回路
今回、一番大きく変更したのが回路です。
今までは、bioloidのCM-5をそのまま用いていたのですが、新たにOpenCM9.0.4を採用して、オリジナルの基板を作りました。
このボードはCPUにSTM32F103CBを採用し、ROBOTIS純正のRoboPlusとモーションエディタと、Arduinoライクな統合開発環境が備わっています。
OpenCM9.0.4(STM32F103CB)のスペック
- ARM Cortex-M3 MCU
- 128Kbytes Flash
- 72MHz CPU
今回はやりたいことがいろいろあったので、RoboPlusの環境は使わず、Arduino(というか主にC++)の環境で地道にコーディングする道を選びました。
とはいえDynamixelのライブラリはそろっているので、だいぶん楽できます。
今回考えたシステムはこんな感じです。
シームレスな歩行をさせたかったのでアナログ値が扱えるPS2コントローラーを使えるようにしました。
時間がなかったので、PS2コントローラーはArduino用のCytron PS2 Shieldを経由する方法を採用しました。
以前作った、G-ROBOTSのRPU Walkerに近い感じのシステムです。
また、ほぼ ありものの部品を順番に繋ぐだけですが、なるべく小さく実装してみたかったので、ユニバーサル基板用のCADを用いました。(PasSというフリーウェアです。)
今まで手を動かしながら基板上で試行錯誤することが多かったので、画面上で引き回しを試行錯誤して、あとは印刷した画像を見ながら実装していく作業だけ、というのは不思議なものがあります。
出来上がったボードはこんな感じです。
頭部に組み込むとこんな感じです。
Cytron PS2 ShieldのOpenCM9.0.4用ライブラリを下に置いておきます。
Cytron PS2 ShieldのOpenCM9.0.4用ライブラリ ( CytronPS2Shieldmaster4OpenCM.zip )
※ 「マイドキュメント > ROBOTIS > libraries」の中にフォルダごとコピーすれば使えます。
※ OpenCM9.0.4 ハードウェアシリアル 3にて動作する仕様です。
※ 3.3V-5Vの変換が必要です。ロジックレベル双方向変換モジュールを使っています。※ PS2 ShieldのHWリセットは実装していません。
※ちなみにCytron PS2 ShieldとVコントローラーの組み合わせで、時々255(0xff)埋めの変なデータを返してくることがあるので、KO-Link2Sでは、2回データを読んで同じ値を返してこないときはもう一度読むような感じで実装しています。
歩容生成
ハードが出来たら、歩行のプログラム実装です。
ニコニコでは、「モーションのつなぎ目がおかしいのでしょうか」と実況されてしまったのですが、モーションではなくプログラムで歩行してます。
歩容生成は、吉村さんのスライドにあった五角形を使っています。
歩幅の部分をPS2コントローラーの値を採用しています。
このグラフは昔の資料ですが、以前はCPUのスピードがへっぽこで、五角形を書いても赤色の線の軌道を通っていました。
今回は、CPUの速度が格段に上がったため、五角形の中を180分解できるようになりました。
ひし形とひし形の間を30分割していますので、ほぼ青色の線の軌道で歩行出来ていたのではないかなと思います。
(転んだら元も子もないですが(^^;A
とりあえず、ARMの速さを知ってしまったら、AVRには戻れませんね!
3D プリンタ
今回、新しく強力なツールとして、ロボット製作のツールに3Dプリンタが加わりました。
基板を組み込んで、ぴったりな頭部を設計できました。
目の部分はリフレクターも作って、フルカラーLEDで光らせるという遊び心も、3Dプリンタで簡単に実現できました。
使っているのはAfinia H480です。
バッテリケースの蓋も、大会前々日にプリント。
デスクトップCNCと共に、とても強力なツールとして手放せない感じです。
モーションエディタ
OpenCM9.0.4を使って、システムと呼べるものが出来上がったのが前々日だったため、まずはモーションを再生するための関数を作成。
とにかく、以前CM-5で作ったRobo Plusモーションのモーションデータを移植できるようにしました。
と言っても、ファイルコンバートではなく、目コンバートです(汗
値をひたすらコピペしていきます。
(RoboPlus モーションのエディタを見ながら、ソースコードにコピペ)
あと、即席のティーチングプレイバックのシステムを作りました。
任意のサーボを脱力させた状態で、モーションを再生する関数の形式で、全サーボのポジション値をUSBシリアルで取得します。
これをソースコードにコピペすれば、モーションデータをソースコードに埋め込めるという代物です。
これもなんとか前日に出来上がって、とりあえず前後の起き上がりモーションだけ作り切りました。
トラブル
これだけいろいろ直前に組み上げたシステムのため、綻びが起こって当然な状況ですね(^^;A
例にも漏れず、今回は主に競技前と競技中に2つのトラブルがありました。
トラブル1
前々日に”オカシイ”と感じたのは、動作中に左足の足首のサーボだけエラーLEDが点灯して脱力してしまう現象。
(奥側の脚のサーボのLED(エラー)が動作中に点灯しています)
杉浦さんから、Dynamixelのコネクタはかなりシビアで、インピーダンスがおかしいとパケットロストが発生しやすいという話があり、たまたま持ち合わせた予備のケーブルで配線し直したところ、改善しました。
一時はサーボ自体の故障も疑って、韓国チームに予備サーボまで貸していただきました。
(柴田さん、監督さん、本当にありがとうございます。)
ただ、出来心で平行線の3線をよじってみたのですが、これはあまり良くないと言われました。(杉浦さん談)
トラブル2
次に競技中に発生した問題。
これは致命的なのですが、右足首のピッチ軸のサーボ(ID:7)が、急にID:1に書き換わる(もしくはファクトリーリセットが発生した?)、という問題が発生してしまいました。
正直、これではもう歩けません。
競技後にサーボのROM値を読んで愕然としましたorz
これは今後改善しないといけない問題です。
とりあえずの回避方法としては、サーボのデータテーブルの中で、書き換えてはいけないデータ領域を事前にロックできる機能があるということ…。
言われて思い出しました!
確かにオリジナルのDinamixelライブラリを作った時にlock関数を作った記憶があります!(10年前に!)
あとは、AX-12、AX-12A、AX-18A混在のため、「一番古いAX-12が何か変なパケットを返してしまって、衝突しているのではないか」という話もあり、今後解析する余地がありそうです。
今後の課題
今後改善したいKO-Linkの課題は以下の通り
- 足首へのピッチ軸の追加
- 脚ヨー軸の追加
- 今回間に合わなかったジャイロの補正適用
- サーボの通信見直し(何故、サーボの通信エラーが起こるのか解明)
- サーボの配線の最適化
- PS2シールドなしで直にPS2コントローラーを制御するライブラリ作製
- オリジナルのOpenCM 9.0.4用の下駄基板を作製(外注でプリント)
KO-Linkも長く使っているロボットなのですが、途中でKUMACOを作り直したり、G-ROBOTSで実験したりと、開発中断期間が長かったのですが、今後この子に注力したいと思います。
コメントを残す