趣味のプログラミング(3)
「趣味のプログラミング(2)」の続きです。
2024年3月1日
先月に引き続き、テーマ『ロボットアームを動かしている3D動画の描画』で、追加した要素②を45度回転して、要素①とのサイズ感のチェックです。
2024年3月2日
2月26日のスケッチの③の部分を追加。
全体を180度ほど回転して確認。
2月26日のスケッチの④の部分を追加。
全体を180度ほど回転して確認。
2024年3月3日
2月26日のスケッチの要素⑤、⑥、⑦を追加。要素⑦は、要素⑥と同じモデルを180度回転して追加しています。
先端部分が分かりやすいように、手前に傾けて確認。
ここまでで、ロボットアームを構成する要素①から⑦までの準備を完了しました。ここまでは作成した各要素を単純に貼り付けただけで、本題の『ロボットアームを動かしている3D動画の描画』の『動かす処理』の実装は、これからです。
『動かす処理』の実装の進め方については、ゴールまでのはっきりしたイメージができていませんが、土台に近い方から先端に向けて、可動部を一つ一つ実装していきたいと思います。
まずは、すべての可動部を基本位置にした状態のポーズを決めます。今回のロボットアームのモデルの場合、縦に伸びた状態を想定します。
ビュー上のモデルを回転させるスライダーの他に、スライダー M2, M3 を追加し要素②と要素③を操作できるようにしました。
2024年3月4日
要素④を操作できるようにスライダー M4 を追加して、試行錯誤の末、何とか要素④まで操作が行えるようになりました。ちょっとだけ、メカニカルな雰囲気が出てきた感じです。😣
2024年3月5日
要素⑤を操作できるようにスライダー M5 を追加して、先端の要素⑥、⑦の開閉操作が行えるようにスライダー M6 を追加しました。これで、すべての可動軸とマジックハンドの開閉操作が、スライダーを使って行えるようになりました。
今回のテーマが、『ロボットアームを動かしている3D動画の描画』だったので、自動で動作するための実装を行いたいと思います。
2024年3月6日
すべての可動軸とマジックハンドの開閉を、無秩序に動かしてみました。
急遽、新しいYoutubeアカウントを作り、久しぶりに動画をアップしてみましたが、解像度が指定できず、低い解像度となっています。
このままでは、暴走しているみたいなので、もう少し秩序ある動作を考えてみたいと思います。😅
2024年3月7日
秩序ある動きについて、あれこれイメージしつつ、色付けのリファクタリングだけ行いました。😣
あと、2024年2月19日の記録に、模型飛行機6機の旋回飛行の3D動画のリンクを追加しました。
2024年3月8日
秩序ある動きについて、色々とイメージして(紙ベースでスケッチして)みましたが、とりあえず大人しい(基本的な)動きを実装してみました。😅
2024年3月9日
一応、秩序ある動きについて、イメージをスケッチした範囲で実装してみました。無秩序な動きに比べて、面白味がないかもしれませんね。😣
何か物を掴んで移動させるとかは、考えていませんでしたが、もう少し、動かし方について工夫してみたいと思います。
2024年3月10日
3Dマーカーを追加して3Dトレースを実装しました。ロボットアーム自体の動きは最初にアップした無秩序版で、赤い3Dマーカーの立方体を掴んで動きます。
上の動画ではサンプリングが 1,000 座標まででしたが、 9,000 座標まで採ってみました。フレームのレートが、50 fpsまで落ちていました。
2024年3月11日
引き続きロボットアームの3Dトレースの応用を検討中。
2024年3月12日
引き続きロボットアームの3Dトレースの応用を検討中。
単調な動きでも興味深い3Dトレースが描けるかも知れません。
細かい3Dトレースを描こうとすると、ロボットアームを動かすためのデータを用意するのが大変です。また、いつか具体的なイメージが湧いてきたら、リトライしてみたいと思います。
と言うことで、明日からは、新たなテーマ『2足歩行ロボットの3D描画』に挑戦してみたいと思います。🙂
2024年3月13日
2足歩行ロボットといえば、真っ先に思い浮かぶのが、HONDAのASIMOです。HONDAのディーラーさんに頂いたASIMOのフィギュアを参考のため観察してみました。
股関節に当たる部分には、これまで意識していませんでしたが、2つの可動軸があり、思っていた以上に精巧な作りになっていました。
2024年3月14日
いかに単純化するか、いかにロボットアームのパーツを再利用出来るか、頭の中でイメージ検討中。😕
2024年3月15日
ASIMOのように人型で、頭、腕、手までモデルをコーディングするのは、とても気が長い感じがしています。とりあえず、2足歩行だけにフォーカスしてみようかとも考えています。
2速歩行だけだとしても、立体的なパーツでモデルを作るか、単純な線分的なモデルにするか…
そもそも、今回の2足歩行の描画で試したいことは何か?
前回のロボットアームは、動く要素の起点が定点だったのに対して、2速歩行ロボットの動く要素の起点は胴の部分の付け根になり、胴自体も移動することになります。
実装に着手する前に、もう少しイメージを整理してみようと思います。
2024年3月16日
明確なイメージの整理がつかないまま、胴体と脚のモデルの一部まで実装。各要素のサイズは調整しながら進めることにしました。今のところ、短足。😣
2024年3月17日
胴体に脚の部分のモデルまで実装しました。ロボットアームの実装コードをベースに、ここまでは、割とスムーズに進んできました。
昨日より、胴体をスリムにして、脚の長さも調整しています。
やはり先日スケッチしたイメージに近づいている感があります。😖
2024年3月18日
肩関節と腕のサイズ感を確認するために、ダミーの腕を使ってプレビュー。
胴体と腕の間に2軸の肩関節が入る予定。肩幅が広すぎになりそうなので、胴体の幅を細くした方がいいかも。手首や頭部がつくと、またバランスが変わりそう...見た目は、気にしないように割り切っていかないと、キリがなさそう。
今更ですが、頭部から実装した方が、全体をイメージしやすかったかも😖
2024年3月19日
ダミーの腕をつけるなら、ダミーの頭部も、ダミーの手首も付けられますよね。
ダミーの腕、頭部、手首を付けてのプレビューです。
顔については、何にもイメージしていませんでしたが、いざ頭を付けるとなると顔も何とかしないといけないですよね。一旦、ダミーでは、ASIMO 風です。
やっぱり、胴体をもう少しスリムにしたいです。
2024年3月20日
ダミーの腕、頭部、手首を付けてのプレビューをもとに、両脚の間隔、股関節部分のサイズ、胴体の幅、腕の長さ、手首の大きさを調整しました。
そして、首、肩関節を実装して、腕の実装に着手中。
また、頭部、腕を動かすためのスライダーを追加したので、配置を変更。
2024年3月21日
腕の実装は思いのほか手間取り、結局、左右の肩関節のモデルを共用から左右別々に整備して、腕の一部まで実装。脚のモデルは股関節を含めて左右共用してますが、肩関節の場合は、同じように共有するのは面倒のようです。おそらく、私の実装方法の問題だと思いますが…😣
2024年3月22日
手首部分を残して、腕の部分まで実装。
手首については、現段階で指まで動かすつもりは無いので、ざっくりとした手首で実装予定です。
2024年3月23日
ボディから離したところで、ざっくりとした手首のモデルを実装中。
2024年3月24日
ざっくりとした手首のモデルを腕への接続するところまで実装できました。
スライダーの値を表示させていましたが、そのためにスライダー操作がぶれてしまうため、数値の表示を行わないようにしました。
ここまでで、ようやく、2足歩行するロボットの準備ができました。
あと、色々なポーズをとらせていて気づいた点として、ASIMO 風の顔は、目鼻口のパーツが無く直接的な表情が分かりませんが、とらせているポーズで、何となく表情が連想できることが分かってきました。
やはり、スライダーの値は確認したいため、スライダーの値を別の行に表示。
そして、これから、2足歩行する動作の実装に移ります。
2024年3月25日
2足歩行動作の最初のトライは、単純に腕脚を前後に動かすパターンです。現在の各要素の回転角度のパラメータは8つに抑えていて腕も脚も左右共通のパラメータとしているため、残念ながら、細かく左右の腕や脚の動きを変えられません。そのため、動画で分かるように足先の動きが歩いているように表現できません。😣
次のトライのためには、(少なくとも)脚の各要素の回転角度のパラメータを左右独立したパラメータとする修正が必要です。今後の応用に備えて、腕と脚のすべての要素の回転角度を独立したパラメータで持つように修正を行います。
2024年3月26日
頭、腕の各要素3×2、脚の各要素4×2で、全部で15要素の角度を独立したパラメータで与えられるように修正しました。
画像内のVX,VYは、モデル全体の回転用で、H1は頭部、AnXは腕の各要素、LnXは脚の各要素、H0はダミーのスライダーです。XnLは左側要素、XnRは右側要素を示しています。気が付けば、ロボット自身としては逆になってますね。😅
気づいた以上、今後のこともあるので、リファクタリングで左右を入れ替えます。モデルの実装ロジック全般に渡って修正です。
L を一旦 M に変えて、R を一旦 H に変えて、M を R に変えて、H を L に変えて、左右を入れ替える地味なリファクタリングを終了。😖
2足歩行動作の第2トライの実装に着手します。😆
2024年3月27日
2足歩行動作の第2トライの実装を行い、腕と脚の動作の調整中です。
もう少し調整してから、旋回歩行させたいと思います。😔
2024年3月28日
2足歩行動作の第2トライの脚の動作の調整は、なかなか地味で手間がかかりそうなので、ざっくりとしたところで、旋回歩行の実装に移してしまいました。
単体では寂しいので、思い切ってクローン5体としてみましたが、なかなか不気味な出来となりました。40FPSまで落ちてしまいました。😆
この2速歩行ロボットの動作精度向上は今後の課題として再検討したいと思います。このあとは、ここまでの実装についての課題とリファクタリングについて検討したいと考えています。
2024年3月29日
FPSが落ちるのを覚悟で、クローン36体の旋回歩行させてみました。
静止画と動画をアップしましたが、動画の方はかなりのスローです。😞
動きは無視して、大量に描いてみました。
2024年3月30日
振り返り、リファクタリングの方針は…
2速歩行ロボットの応用は… 次のテーマは…
2023年3月31日
ここまで『ロボットアームを動かしている3D動画の描画』と『2足歩行ロボットの3D描画』では、とりあえず見た目がそれらしく見えるレベルまでの実装を行ってきました。その内容を振り返ると、(通常、リファクタリング前の段階では、やむを得ない範疇ですが)それらの実装は、今回作成した描画モデルの内容に依存した実装となっており、『ロボットアーム』の実装パターンを参考にして『2足歩行ロボット』の実装を行なってはいても、モデル要素の追加・変更を行う際、コード修正の影響範囲が複数箇所に渡り保守性がよろしくない状態でした。実装そのものもベタ書きな冗長なコードが多く抽象化していない箇所が多く存在しています。
今後、新しい3DCGへの応用を進めていくために、次の段階として、これまでの実装に対しての下記のリファクタリングを行いたいと思います。
・リファクタリングの目的
基本モデルの要素の追加・変更を局所的に行えるよう実装をさらに単純化する。
・リファクタリングの方針
(1) 基本となるモデル要素を階層化し、関節要素のサイズや回転角度の変更を、繋がるモデルの実装に影響を与えないようにする。
(2) 各関節の回転角度をパラメタとして、モデル構造に依存しない単一のロジックで基本モデルの構築が行えるようにしたい。(基本モデル構築後の再配置を除く)
なお、『モデル要素の編集が地味で、生産性が悪い』という根本的な課題は、一旦置いておきます。😣
今更ながら、そもそも『ロボットアーム(多関節ロボット)』について、次のサイトにて多少勉強させていただきました。
また、『2足歩行ロボット』については、Wikiぺディアに詳しく書かれていました。
『ヒトはなぜ二本脚で歩くの?』の疑問については、次のサイトに優しい解説が書かれているのを読みました。(チャールズ・ダーウィンの進化論は、調べていません😑)
2速歩行ロボットの大行進(20X11列)まで試して、1FPSの描画速度でした。トルーパーではないですが、スターウォーズの『クローンの攻撃』のようなイメージで…😆
続きは、次のNote に掲載します。