Nov11’s diary(自宅での開発環境作り )

3Dプリンタと切削加工機で工作した事をアップして行きます

自作したロボットアームを制御する(仮想現実での制御)(その2)パーツを連動させる

エドの制御を行うために、エドの駆動9パーツを仮想空間に配置し、連動できる様にしてみた
が!、下図の様になってしまい想像通りには、全くさっぱりイメージ通りに表示してくれない!

[失敗イメージ]

f:id:Nov11:20160902141749j:plain

              (手首部分が正しく回転していない)

イメージ通りにいかない原因を調査した結果、OpenGLが予想と違う動きをしている事が分かった
予想と違っていたのは、OpenGLの回転指示関数(glRotatef)でモデルを回転させると、回転軸も追従して回転してくれていると思い込んでいたのだが、回転軸が追従してくれないので下図のように不思議な結果となってしまった

[予想していた回転]

f:id:Nov11:20160902141945j:plain

              (クリックすると拡大表示されます)

[現実の回転結果]

f:id:Nov11:20160902142011j:plain

              (クリックすると拡大表示されます)


んで、この問題を解決する方法をググったら「Quaternion:クォータニオン(四元数)」って単語が出てきたので、クォータニオンが記載されているページを開いた瞬間、ブラウザを閉じてしまった
思わず閉じてしまったホームページには、数式と文字が羅列され、図画工作系の筆者には、あまりにも敷居が高く、その領域に踏み込む事を危険と判断して、勝手にブラウザを閉じてしまったようだ
しかし、ここで諦めるわけにはいけないので、ブラウザを起動し、クォータニオン(四元数)を改めて、ググり恐るおそるクリックすると、やはり数式と文字が羅列されていて、取り付く島もない
何とか、図画工作系の筆者にも分かる様なサイトを見つけて、読み進むが、あっ!と言う間に頭の中を「?」マークが埋め尽くしてしまう…
んで、「ページを開く→「?」マークが頭を埋め尽くす→ブラウザを閉じる→落ち着く」を繰り返すこと3日!何とか取り付く島が出来たので、改めて纏めてみた
結果、OpenGLには、クォータニオンは含まれていないので、OpenGLの回転指示関数(glRotatef)に渡す回転軸を、クォータニオンで求める必要がある事が分かったので、クォータニオンをしてくれる行列演算ライブラリ(Eigen)を使用してプログラムを作成することにした
幸いC++でプログラムを作成していたので、行列演算ライブラリ(Eigen)を組み込む事は簡単だったが、ロボットアームの管理情報を階層化したのでプログラムが再帰構造になり、コンパクトにまとまりはしたが、第三者には解りづらいものになってしまった

しかし、DesignSpark mechanicalでデザインを行い、このプログラムで動作確認を行い、アニメーション形式でのプレゼンテーションでクライアントとのすり合わせを十分取った上で作成する事が出来る環境が整ったことになる
また、このプログラムに簡単な物理法則を組み込めば、デザイン時に警告を出す事も可能になりそうだけど、時間が掛かりそうなので、追々作成する事にして、後は、目的解釈部分を作成すれば完成となる!
もう一息だぁ~!
しかし、物理法則を組み込めば、仮想空間でピタゴラスイッチも可能になりそうって誘惑が筆者を襲ってくるので、この誘惑に負けないように頑張らなければです

[ロボットアームの動作]

youtu.be(操作に慣れていないので、カクカク動いてます)


なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい