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

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

自作したロボットアームを制御する(仮想現実での制御)(その1)OpenGLで描画する

ロボットアームのエドが完成した(2016年06月13日)ので、制御用プログラムを作成する事にした
最初は、演算を行い簡単なワイヤーフレームで動作確認して行こうと考えていたのだが、DesignSpark mechanicalのCadデータを採寸し、別途ワイヤーフレームを構築すると修正対応などの管理が大変になりそうだし、他にも色々な事を想定すると、Cadデータを使用して動作確認をする事にした
んで、ネットでググったら、DirectXOpenGLが良い感じで、結果OpenGLを使用する事にした
OpenGLにした理由は、WindowsLinuxスマートフォンでも動作出来るし、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データ]

f:id:Nov11:20160625152940j:plain

              (クリックすると拡大表示されます)
上記の画面には、ロボットアームとロボットアーム移動範囲プレートの2つを表示しています

後は、各パーツを連動させる部分と、目的解釈部分を作成すれば、きっと良い感じでエドをVR(仮想現実)で動かす事が出来そうだ

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

 

ロボットアームを3Dプリンタと切削加工機で自作する(パーツ作成)(その5)全部完成!

ロボットアーム完成しましたぁ~!!!
まだまだ調整や改良の余地はあるけど、何とか出来上がったです
これから、ロボットアーム専用のドライバーと、制御用アプリケーションを作らねばですね
オセロや将棋の相手をしてもらう為には、画像認識や音声認識も必要となってくるので、まだまだ先は長そうだけど、なんとなぁ~く最後まで出来そうな予感がしてきました

ちなみに、自作したロボットアームの愛称を『エド』にしてみました
名前の由来は、『鋼の錬金術師』の主人公の『エドワード・エルリック』で、とても難しいけど、『エドワード・エルリック』の右手の義手の様に、このロボットアームをベースに改良改善を加えて、筆者の少し動きの悪くなった左腕の補助が出来る様になってくれれば良いなぁ~って思いを込めて、『エド』にしてみました
さぁ~、名前の由来に少しでも近づける様に頑張るぞぉ~!

[ロボットアームの写真]

f:id:Nov11:20160613015815j:plain

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

 

ロボットアームを3Dプリンタと切削加工機で自作する(パーツ作成)(その4)肩部分完成!

ロボットアームの台座の垂直回転まで出来ました!
知識不足のせいで、ずいぶんと回り道をしてしまったけど、やっとここまで出来たぁ~!

んで、いつも通り自作したサーボコントローラ(2016年04月25日のブログ)に接続し、ドキドキしながらスイッチをいれ、サーボモータの回転角を指定すると、おぉ~!420gのアームが持ち上がりました
が!、色々と回転角を変化させると、サーボモータからブーンと嫌な音が...
色々と調べると、アームを少ない角度で上方に移動させた場合に異音が発生する事が分かった
どうも、アームの重量により指定角度手前で停止し、小刻みに震えている様なので、一度指定位置より少し上を指定した後に、再度位置指定すると異音が無くなった
ん~、ロボットアームドライバーには、それぞれのサーボモータに意味合いを持たせた上で移動方向に対しての2段階補正を行えるように変更しなければならないようだ
だが取りあえず上手く行ったので、明日から台座の水平回転部分を作成して行こう!
もう少しで完成だぁ~!!

[ロボットアームの写真]

f:id:Nov11:20160609033408j:plain

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

 

ロボットアームを3Dプリンタと切削加工機で自作する(パーツ作成)(その3)肘部分完成!

ロボットアームの肘まで悪戦苦闘の末に出来ました!
悪戦苦闘の理由は、3Dプリンタの収縮によるもので、以前ケース作成(2016年01月20日~のブログ)を行った時は横に対しての収縮で四方が反っていたが、今回は縦方向の収縮によりデザインした高さにならないと言う現象が起こり対処方法を見つける事に苦戦してしまったからだ
どうも、厚みと高さにより収縮率が異なっているようで詳しく調べていないが、厚みがある範囲内では急激に縦方向の収縮率が大きくなるようだ
ロボットアーム作成が一息ついたら改めて調査する事にしよう

んで、自作したサーボコントローラ(2016年04月25日のブログ)に接続し、ドキドキしながら肘を移動させると、おぉ~!手首が持ち上がりましたぁ~!

以前作成した物(2016年03月07日のブログ)はビクとも動かなかったのが嘘のように動いてくれました
(事前調査は大切!やっぱり急がば回れって事ですね。昔の人は良い事言ってます)
ここまで、サーボモータは6個で、全長25cmで、重量は予定より重たくなって420gとなりました
後は、ロボットアームの肩にあたる台座の水平垂直回転部分を自作すればロボットアームが完成する
もう一息だぁ~!
[ロボットアームの写真]

f:id:Nov11:20160605142859j:plain

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

 

ロボットアームを3Dプリンタと切削加工機で自作する(パーツ作成)(その2)手首部分完成!

前回作成した手首垂直回転部分(2016年05月30日のブログ)に水平回転と上下回転部を追加して、ロボットアームの手部分が完成しました!
ここまで、使用したサーボモータは5個で、全長15センチで、重量は220グラムってところですね
補強やらネジの重量を計算に入れてなかったので、予定よりやや重たくなった事が不安だけど、ロボットアームぽくなってきたのは嬉しい!
肘までのトルク計算を行った結果、大丈夫そうなので、このまま肘部部の作成を行う事にしよう

[ロボットアームの手首写真]

f:id:Nov11:20160602091100j:plain

[ロボットアームの手首イメージ図]

f:id:Nov11:20160602091133j:plain

 

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

 

ロボットアームを3Dプリンタと切削加工機で自作する(パーツ作成)(その1)掴み部分完成!

DesignSpark mechanicalでロボットアームのデザイン(2016年05月26日のブログ)を作成したので、それぞれのパーツをダヴィンチさん(3Dプリンタ)に手首垂直回転部分を印刷してもらい、挟み部分(2016年05月10日のブログ)にボルト留めしてみました
ベアリングプレートのおかげで、ガタつきも無く良い感じで挟み部分がクルクル回ってくれました
これなら、電源などのボリュームも回してくれそうなので、色々な実験のサポートもしてくれそうです

ただ、180度しか回転しないので、将棋やオセロの駒をひっくり返す事が出来ない...
ゲームの相手をしてもらう為には、ロボットアームを2台作成するか、駒ひっくり返し機を作らないといけないなぁ~

[ロボットアームの手首(垂直回転部)写真]

f:id:Nov11:20160530144441j:plain

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

 

ロボットアームを3Dプリンタと切削加工機で自作する(トルク不足対策)(その2)全体イメージ完成!

ロボットアームの3Dデザインが完成しました!
以前のデザイン(2016年03月08日)に実寸のサーボモータを配置し、トルク計算から腕の長さなどを修正した上で、組み立て手順を考慮した物だ
また挟み部分(2016年05月10日)を組み立てた際にサーボモータと駆動部品が垂直水平にならない(3Dプリンタで作成した部品の表面の凹凸のせい)問題が見つかったので、この点も考慮してデザインしてみた
しかし、それらの改善点をデザインに取り込むのに2週間も掛かってしまったが、これでロボットアーム実現に少し近づけたのは嬉しい
明日からは、自作したロボットアーム相手に将棋やオセロをしているところを夢見がちに妄想しながら作成して行こう!

最終的に、3Dプリンタで出来た部品をロボットアームが組み立ててくれる様になったら最高なのだけど、かなり先の話になりそうです...

[ロボットアームの3Dイメージデザイン]

f:id:Nov11:20160526035437j:plain

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