自作したロボットアームを制御する(仮想現実での制御)(その1)OpenGLで描画する
ロボットアームのエドが完成した(2016年06月13日)ので、制御用プログラムを作成する事にした
最初は、演算を行い簡単なワイヤーフレームで動作確認して行こうと考えていたのだが、DesignSpark mechanicalのCadデータを採寸し、別途ワイヤーフレームを構築すると修正対応などの管理が大変になりそうだし、他にも色々な事を想定すると、Cadデータを使用して動作確認をする事にした
んで、ネットでググったら、DirectXとOpenGLが良い感じで、結果OpenGLを使用する事にした
OpenGLにした理由は、Windows、Linux、スマートフォンでも動作出来るし、OpenCVとの連携も可能みたいなので、この後に必要となる画像認識につなげて行けるので、OpenGLに決めた
次に、開発言語だが、C/C++、C#のどちらするか考えたが、C#は、C/C++のラッパーで供給されていて制限もあるみたいなので、C/C++でプログラムを作成する事にした
んが、この後が、いばらの道となってしまった...
まず、普通にラインなどで描画して、視点移動でグルグル回している物などや、関数の説明はあるのだが、複数のCadデータを読込み、それらを連動させている物を見つけることが出来ない!
その上で、VisualStudioのWindowsフォームアプリケーションベースの物も見つからなく、C#ラッパー版を使用しようかと悩んだが、後々もっと困りそうなので、C/C++版で進める事を決意し、冷静に検索した内容を整理して行くと少しづつ理解できてきたので、簡単にまとめてみた
↓↓↓(以下の内容に変更が有ったので、9月7日のブログで修正しました)↓↓↓
[OpenGLの制御手順]
1)OpenGLのダウンロードする
「OpenGL ダウンロード」でググると出てくるので、サイトの記述に従いダウンロードする
2)Windowsフォームアプリケーションを作成する
VisualStudioの新しいプロジェクトで、VisualStudio C++のWindowsフォームアプリケーションを作成する
3)OpenGLを配置する
ヘッダー、ライブラリー、DLLファイルを新規作成したフォルダーに配置する
4)OpenGLの設定を行う
Form1.hのコンストラクタで、描画するコントロールのデバイスコンテキストを取得し、
OpenGLの初期設定を行う
wglDeleteContext,ReleaseDCなどを設定する
5)Cadデータを読込む
DesignSpark mechanicalで、OBJファイルを出力しておく
OBJファイル構成は、ネットに沢山あるので、そちらを参照する
6)パーツ表示を行う
カメラ設定を行う
パーツ単位をglPushMatrixとglPopMatrixで挟み込み以下を繰り返す
a)パーツの移動位置と回転をglTranslatedとglRotatefで指定する
b)パーツのマテリアルをglMaterialfvで指定する
c)パーツを構成するポリゴンをglVertex3fvで指定する
各パーツは、glBeginとglEndで挟み込む
全て設定した後に、SwapBuffersを行う
んで、悪戦苦闘の結果作成した物が以下の感じになった
[OpenGLで表示したCadデータ]
(クリックすると拡大表示されます)
上記の画面には、ロボットアームとロボットアーム移動範囲プレートの2つを表示しています
後は、各パーツを連動させる部分と、目的解釈部分を作成すれば、きっと良い感じでエドをVR(仮想現実)で動かす事が出来そうだ
なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい