ツール開発中(経過報告)


すみません、開発中のアプリの記事なので日付を未来にしてブログの先頭にするようにしたのですが、
ホビロボアンテナでも上位に上がってしまいます。
明日までには下げますすみません。(2013.03.16記)
対応していただきました。ありがとうございました!




ちょっと長くてごちゃごちゃした記事ですが、ロボゼロユーザーの方はぜひ読んでいただけると幸いです。




Uteroさんにお願いしている「ロボ用なんちゃら計算ツール」(仮題) を試してみました。
タイトルからおわかりの通り、Uteroさん本人はロボゼロも他のロボも全くノータッチな人です。
クロスプラットフォームという私のわがままに応えて、守備範囲外のJavaScriptで作ってくれています。
当ブログであけっぴろげに開発のやり取り をさせてもらっています。
このアプリケーションが必要な人は、ロボゼロのユーザーの中でもヘビーユーザーということになるので、使ってくれるのは全宇宙で10人もいればいい方だと思いますが、
私にとっては今一番欲しいプログラムなので本当に助かります。ありがとうございます。




このツールは、ロボゼロのモーションの2つの動作の必要最小所要時間を割り出します。
将来的には、そのモーションを均等分割したり、加速度的に分割できるようにします。(というかしてもらいます。)
標準のRS304と上位サーボのRS303を混在できるようにもなっています。
また、RXコントローラーやXcontrollerのモーションコピーのタブ区切りフォーマットも読み込める予定です。

このツールにどんなメリットがあるかといいますと、

・無駄な動きをしている箇所(モーションのボトムネック)を診断できる。

・モーションのスペック最速時間が分かるので、モーション最適化の目安になる

・一連のモーションを分割することで、動作キャンセルをはさめる。
 (...かもしれない。実際にはカクカクするかも。)

・二次曲線的な分割をすることで、衝撃吸収など、なめらかな動きが実現できる。
 (...かもしれない。たぶんカクカクしそうですが。)


ロボゼロは全体的にカクカクしがちなので、このツールで通常モーションに少しでも生命感と運動効率をもたせられたらと思います。




「つうこんのいちげき」を例に、実際に使用感を見てみます。

;┌──< 【F_STRAIGHT_RP】つうこんのいちげき(右手トンファー突き) >──────┐
:F_STRAIGHT_RP
;[1] 足を開いて構える
Move(136,62,638,-815,0,-3,-171,401,404,-408,-168,-404,404,165,408,-404,-403,172,0,0,830,-742,34,-18,120)
;[2] 突き出し
Move(151,2,735,-825,0,-53,-147,473,578,-610,-50,-578,409,350,460,-409,-298,246,-831,0,-83,-449,-398,-560,120)
;[3] 突き出し後止め
Move(151,2,735,-825,0,-53,-147,473,578,-610,-50,-578,409,350,460,-409,-298,246,-831,0,-83,-449,-398,-560,480)
;[4] 構え戻る
Move(136,62,638,-815,0,-3,-171,401,404,-408,-168,-404,404,165,408,-404,-403,172,0,0,830,-742,34,-18,120)
;[5] ファイティングホームに戻る
Move(-450,-226,931,-946,0,-120,-80,383,331,-329,-90,-331,331,70,329,-331,-383,80,0,0,978,-928,180,450,240)
JUMP(KEYCHECK)
;└───────────────────────────────────┘

※開発(してもらっている)中のため、少々問題があります。
※元のファイルでは拳の値は0ではなくx(設定しない)です。
※元のファイルではMoveはMOVEで大文字です。(2013年03月13日現在、Moveのみ読み込み可。)



1_2small.jpg


まず、[1]の下の行の Move(136,62...をコピーし、ボックスの「動作開始前」にペーストします。
同様に[2]の Move(51,2... を「動作終了時」にコピペします。
上位サーボのRS303を使用している場合には、使用サーボ番号にチェックを入れます。
次に「読み込み」ボタンを押します。

すると、下の表に数値がズラリと入力されます。
それぞれのサーボの移動角所要時間も表示されます。




1_2hidari.jpg

1_2migi.jpg

スピード的にボトムネックであるサーボのボックスが水色になります。
その数値を基に、左下のボックスには、スペック上の最速数値が入ります。

元のプログラムでは「120」で動いてくれと命令しておりますが、
実際には「583(0.243秒)」必要とする動作だということが分かります。
限界値より短い時間を指定しているので、サーボは可能な最高速度で動いていることになります。

腕を伸ばすパンチということもあり、肘の21番サーボが一番多く運動していることが一目瞭然です。




[2]から[3]は止めのモーションでサーボの移動がゼロなので割愛。




3_4_20130313130118.jpg

[3]から[4]は、[2]から[3]の単純な逆回転なので、移動量的には上の表と同じ結果です。




4_5_20130313130127.jpg

[4]から[5]は、パンチモーションからファイティングポーズへ戻るモーションです。
肩ピッチを戻すのに時間がかかっており、[374(0.156秒)]の時間を要します。
仮にここで肩のサーボをRS303にバージョンアップすると、[256(0.107秒)]となり、
約40%ほどスピードが改善できるということがシミュレーションできます。
(実際には、サーボを置き換えるより、モーション量を効率化する方がよいと思います。)




0_1.jpg

最後に、[1]の動作に必要な時間を計測します。
[1]の動作の前は、該当箇所以外のプログラムで[5]の動作になるよう設定してある(つまり、パンチ動作の前は所定のファイティンポーズになるようにしてある)ので、
[5]から[1]への移動量を見ます。

あ、[4]から[5]の単なる逆回転なので、先ほどと同じ結果でした。




このブログをお読みでロボゼロユーザーの方、ここがオカシイとか、これ全部もうすでに既存のアプリでできるよ!とか、こういう機能はないの?などツッコミがございましたらコメント欄にてお願いします。
ただし、ソースは仮組み中でエレガントに整理する前のものなので、その点はご容赦ください。

現状予定している以上の機能は初版には盛り込まない予定&そこで開発中止するので、
追加機能はたぶん私が勉強しながらやる予定です。
オープンソースにする予定なので、お手元での機能拡張も可能になると思います。
スポンサーサイト

テーマ : 自然科学
ジャンル : 学問・文化・芸術

コメントの投稿

非公開コメント

No title

動悸とは・・・お大事に!!!
こちら、3年前に喘息の症状が出てアレルギーテストしたらスコア3000とかいうのが出てしまったのですが(普通は100ぐらいらしい)、震災後にマスク生活をしていたら調子がよくなったので、そのままアレルギー避けとしてマスクを続けてます。
総合的な免疫力が低下した結果アレルギーが治ったというおそろしい説もありますが・・・
人付き合いに影響のない単独移動などではマスクおすすめですん。

No title

今週末は体調崩してダウンしてます。色々と聞きたいこともあったんですが何もできませんでした。
また回復したら質問します><
花粉症で初めて医者にかかって処方してもらった薬で動悸が・・・こんなことあるんですね

No title

人形つかいさん

すみません!
ブログの日付を数年あげて未来にすると、表紙がわりになる、というよくあるブログテクを使っています。
もし対応いただけるのでしたら、「未来だったら反映しない」とすれば今回の記事はキャンセルされると思います。
(そのままでも明日には下げます。)

日付のこと

こちらで対応してみます。

No title

ゆてろさま

ちょっとややこしくてすみません。
認識正しいです。完全に合ってます!
ご指摘の通りで、
分割と加速は似ていますが使用目的が異なります。

あと、ぱぱっちさん方式にも賛成です。

<ふつうの移動角分割について>
1から5まで移動するとき、分割なしを1→5、分割ありを12345とすると、
まず1→5に関して、★「新たなテキストボックで移動時間を入力」したいです。
そのとき、最初のツールであらかじめ出した最小時間を入力しておけば、すれば、
自然と12345の分割も最小時間で移動する感じになると思います。
最速ではなく、ゆっくりと移動させたい時でも、移動角分割を使いたいのです。

<加速的な移動角分割について>
パーセンテージで分割してもらうのは移動角の方で、そこにはまる時間は、
上記★のボックスで指定された時間の均等分割になると思います。
この時、運動の目的は最速を目指すのではなく、なめらかさを目指すものになります。
その加速(減速)的な移動を最速にしたい時には、ゆてろさんの言う通り、一番移動パーセンテージの大きいところを、
最初のツールに入れて最小時間を求め、その時間を各行に張り直していく感じになると思います。

また、移動の分割は、パーセンテージにする必要はないなと気づきました。
たとえば5分割で加速する場合、
移動量を1:2:4:8と指定し、全体の時間を2400(1秒)と指定すると、
移動角は、n1が移動前、n2が移動完了の位置とすると、
[1] n1
[2] n1+(n2-n1)*1/(1+2+4+8)
[3] n1+(n2-n1)*2/(1+2+4+8)
[4] n1+(n2-n1)*4/(1+2+4+8)
[5] n1+(n2-n1)*8/(1+2+4+8)
という風に移動角が入っていく感じになると思います。
その時、時間は2400/(5-1)で600が[2]〜[5]に入力され、[1]には2400が常にデフォルトで入りたいです。
(モーションをその部分だけ適当に実行すると、適当なポーズから[1]の位置に動こうとするので、
 1秒ぐらいかかるようにしておいた方が安全なので。)

欲を言えば、
1)移動分割の配分を、プリセットで選べるようにしておきたい。
2)配分中、最大移動角の最小時間を、分割の各行に反映する「最速」ボタンがほしい。
のですが、どうでしょう。

だんだん複雑になってきましたが、
この分割のところは、けっこうヘビーに使う(実際のロボットを動かしながら何度も試行錯誤する)ので、
細かな設定と、使いやすさが両立できていると嬉しいのです!
でも、最後の1)2)のお願いは、手動でも対応できるところなので、出来る範囲でよいです。
うそです。プリセットのプログラムは難しそうなのでお願いしたいです。。。
「移動量配分」プルダウンで手入力すべきテキストボックスにパッと入力されるイメージです。
どうでしょう?
ちゃんと伝わっていない感じもあるので、なんでも問いただしてください!

No title

ぱぱっちさんはじめましてUteroです、ぱぱっちさんの方式は実装が楽ですね
分割には2種類機能を持たせて、機能1の場合は入力された分割数で均等に、機能2の場合は合計が100になるカンマ区切りの値をテキストボックスに貼ってもらえれば何分割でも可能です
例 50,25,15,10 と入力してもらえれば5分割で(50,25,25など分割数は可変)行けます

ただ根本的なことで悩んでいるんですが、このツールはソースで書かれている作動終了時間が実際に掛かる時間以下の場合を見つけたりする事が最初の目的で、もしそういう場合はこのツールで弾きだした最小時間に置き換えて分割表示だったと思います。しかし、等分割以外の場合で例えば
「50%20%20%10%」 だとすると、最初の動作はツールで弾きだした作業終了最小時間の1/4で全移動の1/2を行うという事になると思いますが単純に考えると最初の動作の場合はツールで求めた時間の半分かかってしまいます、これは分割した場合に与えられる移動終了時間の倍になってしまうのでは?

この場合の動きがロボゼロではどのように扱うのかわかりませんが、指定された移動終了前に次の行動に移る?それとも指定した時間を超過して動作終了?かのどちらかになるのかと思います。

そうなると分割された動作命令を再度このツールにほり込んで最小時間を求めるような事になる気がします。まあ、分割時に最も時間がかかる動作の時間を求めて全ての行動時間をそれに合わせるという方法で回避出来ますが、その場合は最初に求めた値と分割の場合の合計時間に剥離が出るなと。

ここいら辺はどうすればいいですかね?

それとも時間も分割のパーセンテージに比例させるって事をUteroが勘違いしてるかな?
でもそれだと加速にも減速にもならないから考え方は間違ってないかと思っとります

No title

二名川さん、Uteroさん
これ、すごいです。全宇宙で2人目に立候補します。
実はこれとは少し違う視点で似たようなことを「Excel」でやってます。(まだ実機のロボゼロではテストしてませんが。)
そちらについてはいずれ自分のブログに書きますが、分割は実現できていないのでぜひ欲しいです。

計算式も良いのですが、難しくなりそうなので、例えば最大5分割までと決めてしまって、分割の割合を%で入力するのはどうでしょうか?そうすれば加速の計算と減速の計算の2つを作らなくてもひとつで済むと思います。

二名川さんの例では、
加速の時は、12.5%、12.5%、25%、50%と入力
減速の時は、50%、25%、12.5%、12.5%と入力
すると、左下の最速数値を入力の合計値で割った値をもとに時間を按分して、サーボの位置を計算する、というような感じです。
この入力方式なら、33%、33%、33%みたいにして、均等に3分割もできると思います。

No title

プログラム、すごくいい感じです。ズラッと数字が入る上に、ボックスの中でも調整でますよね。
再計算ボタンで、結果的にすごく操作しやすい感じになりました。ありがとうございまする。

二次曲線すみません。実は言ってる私もあんまり分かってないです。。。
だれか助け船くるといいんですけど・・・

やってほしいのは、2種類ありまして、「加速」版と「減速」版です。
どちらも時間は一定間隔で、移動量をいじってほしいです。
たとえば、0から100の移動を「減速」で5分割すると、
0→50→75→88(87.5)→100です。
最初に半分移動して、次にまた残りの半分、最後の1回だけ、同じ距離を2分割。という感じです。

加速はその逆で、
0→12(12.5)→25→50→100
という風に5分割したいです。
このとき、時間必要時間は入力値の均等割になります。

式に出来ますでしょうか?

No title

あ、MOVE大文字には対応しときました。

No title

おお、moveの大文字小文字以外は一応うまく動いてますか。では引き続き作成進めますね。世の中で10人程が必要としているかもしれないツール!!なんだか甘美な響きでうっとりします、作成意欲がビンビン来てます。
もしみなさんの要望があれば喜んで実装したいです、何だか嬉しくなってきます!!
あと、分割の二次曲線云々のところですがUteroは数学が苦手なので良く意味が理解出来ません><多分分割時に均等に分割するのではないというところまではわかるのですが数式が・・・数式さえわかればソースにも組み込めるかと思います。あとこのツールはしょーもない出来なので完全にフリーにしてください、改造も二次配布も罵りも全てOKです。さて週末には全ての機能を片付けたいと思います。
プロフィール

二名川(ニナガワ)

Author:二名川(ニナガワ)
ホビーロボットをレトロゲームが発展したものと捉えて楽しく遊び倒します。
子供が夢を見ている時間帯に稼働します。

宣伝:電子出版しました。
「コンソロイド ガイドブック」
46107_CONSOLOID_GUID_FACE_200.jpg





■作成中の機体
汎用ヒト型決戦遊具 ~RX計画~
RX-7.5 ゼロタンク
RRf-0.6 ゼニィ
RXM-7.9 ゼムネス
RX-7.5R 量産型ゼロタンク
RX-7.5Fp ファミタンク仮設1号
RX-7.7 ゼロキャノン
RX-7.8 ゼログレイ
SMS-0.1 ゼロライナー
以下続く

ブログ内検索
最近の記事
最近のコメント
カテゴリ
月別アーカイブ
リンク