多関節アルゴリズム ~その2~
お久しぶりです(汗)
ちゃんと生きていますよ~。
だいぶ苦労しましたが、かなり当初の理想に近い動きをするアルゴリズムになってきました。

鞭のようにしなりながら動きます。
簡単に解説しときますね。
今回僕が思いついたのは上昇方向のエネルギーを関節から関節へ伝えてゆく方法です。
まず、各関節は上昇方向のエネルギーを変数として持っています。
で、その値が0より大きければ上昇方向に関節を曲げます。
また、その値が0で、かつ地面のラインより高い位置に座標があれば落下方向に関節を曲げます。
これが基本となるアルゴリズムです。
プログラムがスタートすると、一番付け根側の関節にエネルギー値が与えられます。
アルゴリズムに従って、一番付け根側の関節は上昇方向に曲がり始めます。
このとき1回上昇させる毎にエネルギーは減少します。
で、あらかじめ設定した限界角度まで曲がると、ひとつ末端側の関節にエネルギーを渡します。
すると、今度は隣の関節が上昇を始め、エネルギーの無くなった付け根側の関節は落下し始めます。
これをエネルギーがなくなるまで繰り返すわけです。
これで、波のように関節をエネルギーが伝わり、うねる様な動きが実現できます。
あとは、いくつかの値を変えて理想に近づくように調整します。
ポイントになる値は、上昇・下降の速度、上昇・下降それぞれの限界角度、最初に与えるエネルギーの大きさの5つです。
文章にすると簡単ですが、この方法を思いつくのと、実際に動くプログラムにするのに予想以上に時間がかかってしまいました。
まだまだヒヨッコですなあ・・・。
多関節プログラムを作っている初心者の人には参考になるかも知れないので、実行ファイルをソーステキスト同梱でアップしておきます。
http://multip.net/view/G1IMbae9VU
プログラムを終了するにはESCキーを押して、その後何かキーを押してください。
とりあえず骨組みを作って、テスト中に発生する問題をそのつど場当たり的に解決するコードを追加して行ったので、ソースはかなり汚いと思うし非効率かと思います。
まず、動くものを目指したので勘弁してください。
これから最適化と動きの微調整をして、本編に移植します。
前の方の記事で三角関数のむやみな使用を否定しまくっておいてアレですが、三角関数使いまくっているので、お世辞にも軽いアルゴリズムとは言えないでしょう(笑)
まあ、多関節は各関節間の距離を半径とする円運動ですから、その座標を得るために三角関数は必須だったってことで・・・。
お久しぶりです(汗)
ちゃんと生きていますよ~。
だいぶ苦労しましたが、かなり当初の理想に近い動きをするアルゴリズムになってきました。
鞭のようにしなりながら動きます。
簡単に解説しときますね。
今回僕が思いついたのは上昇方向のエネルギーを関節から関節へ伝えてゆく方法です。
まず、各関節は上昇方向のエネルギーを変数として持っています。
で、その値が0より大きければ上昇方向に関節を曲げます。
また、その値が0で、かつ地面のラインより高い位置に座標があれば落下方向に関節を曲げます。
これが基本となるアルゴリズムです。
プログラムがスタートすると、一番付け根側の関節にエネルギー値が与えられます。
アルゴリズムに従って、一番付け根側の関節は上昇方向に曲がり始めます。
このとき1回上昇させる毎にエネルギーは減少します。
で、あらかじめ設定した限界角度まで曲がると、ひとつ末端側の関節にエネルギーを渡します。
すると、今度は隣の関節が上昇を始め、エネルギーの無くなった付け根側の関節は落下し始めます。
これをエネルギーがなくなるまで繰り返すわけです。
これで、波のように関節をエネルギーが伝わり、うねる様な動きが実現できます。
あとは、いくつかの値を変えて理想に近づくように調整します。
ポイントになる値は、上昇・下降の速度、上昇・下降それぞれの限界角度、最初に与えるエネルギーの大きさの5つです。
文章にすると簡単ですが、この方法を思いつくのと、実際に動くプログラムにするのに予想以上に時間がかかってしまいました。
まだまだヒヨッコですなあ・・・。
多関節プログラムを作っている初心者の人には参考になるかも知れないので、実行ファイルをソーステキスト同梱でアップしておきます。
http://multip.net/view/G1IMbae9VU
プログラムを終了するにはESCキーを押して、その後何かキーを押してください。
とりあえず骨組みを作って、テスト中に発生する問題をそのつど場当たり的に解決するコードを追加して行ったので、ソースはかなり汚いと思うし非効率かと思います。
まず、動くものを目指したので勘弁してください。
これから最適化と動きの微調整をして、本編に移植します。
前の方の記事で三角関数のむやみな使用を否定しまくっておいてアレですが、三角関数使いまくっているので、お世辞にも軽いアルゴリズムとは言えないでしょう(笑)
まあ、多関節は各関節間の距離を半径とする円運動ですから、その座標を得るために三角関数は必須だったってことで・・・。
PR
この記事にコメントする
- ABOUT
やってやれないことはないっ!たぶん・・・
- カレンダー
04 | 2025/05 | 06 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 最新コメント
[11/09 CALL MY NAME]
[11/09 erin]
[08/18 うずランド]
[07/11 うずランド]
[06/23 うずランド]
- プロフィール
HN:
Call my name
年齢:
50
性別:
男性
誕生日:
1974/05/22
職業:
スロ屋店員
趣味:
いろいろ
自己紹介:
やる気だけはあるつもりです。
はい。
はい。
- ブログ内検索
- カウンター
- アクセス解析