ロボットアーム製作日誌(ソフト編:後編 IoT,Unity)
ロボットアーム製作日誌最終回です。
前回まででとりあえず動くところまで行きましたので、今回はスマートフォンアプリからロボットアームを動かす所を書きます。
4.Websocket
まず、アプリからの制御と言っても、インターネットを介して制御するため、そこの部分の実装がまず必要になります。
今回はリアルタイム性が必要なことを考え、Websocketを使用しました。
学祭で展示するため、大学のポートを開けられないことから、VPSを経由する実装にしました。
まず、スマートフォンからVPSにwsで接続し、VPSがechoするだけ(送られてきたのを返すだけ)のサーバーとして働き、ロボットアームのラズパイもVPSに接続しておくことで、そちらにも送られるという形を取っています。
ラズパイ上はPythonのwebsocketclientを使用し、VPSではnode.jsでechoサーバーを実装しました。
5.アプリ制御
上記でのwebsocket通信によって、角度をjson形式で送るとロボットの関節が動くようになりましたので、今度はアプリからwsを投げられるようにします。
アプリは直感的にどこの部分が動くのかがわかるようにするため3Dを使いたく、Unityを使用しました。
ロボットアームの3Dモデルは、Fusion360にて設計した際のCADデータを.objにコンバート、エクスポートして、Unityにインポートしました。
コンバートの手順は以下のリンク先を参考にしました。
http://home3ddo.blog.jp/fusion360-import-export
ただ、CADデータといえどもOBJにしてしまえば締結部分のデータなどは失われてしまいます。今回は回転部分が多くありましたが、ここの部分のデータが無くなってしまったので、Unity上で設定する必要があります。
Unity上でサーボモーターを再現するの方法として、transform.Rotateなどをいじる方法もありますが、今回の場合オブジェクトが大量に親子属性を持っており、それぞれがlocal座標を持っており、パラメータをいじるだけでこれを実現するのは困難です。
そこで、今回はHingejointコンポーネントを使用しました。これは本来ドアや、ドアノブなどのjoint部分に使用するようですが、motorクラスが用意されており、サーボモータとしても使用することができます。(後日Qiitaに記事を書くつもりです)
これを6つの関節全てに適用して完了です。
あとはスライドバーを用意してUIは完成です。
あとはUnityからWebsocketを使用する為、websocket-sharpを利用しました。
websocket-sharpは以下のリンクを参考にしました。
https://qiita.com/oishihiroaki/items/bb2977c72052f5dd5bd9
できたアプリはこんな感じです。
デザインにこだわる時間がなかったのでアレですが、下のスライドバーで角度を指定することで、
このように動かすことができます。
すべての関節が動かすことができるので、この様に動かせ、さらに、実際のアームもwebsocketを経由して動かすことができます。
6.まとめ
とりあえず、アプリから動くところまでは完成しましたが、課題が多くできました。
一番問題なのが、アルミの強度で、1mm厚だとなかなか自重やモーターのトルクに負けて曲がってしまったり振動してしまうことがありました。
これは全体を作り直す必要がありますので、またロボットアームを作りたくなったら挑戦したいと考えています。
ロボットアーム制作日誌(ソフト編 前編 制御)
ロボットアーム製作日誌3回目です。
前回はこちら
http:// http://saitetutan.hatenablog.jp/entry/2017/11/07/060400
3.制御
とりあえず、ラズパイから制御しますが、サーボモータドライバはこちらの既製品を使いました。
スイッチサイエンスから発売されてる、Raspberry Pi HATのPCA9685
https://www.switch-science.com/catalog/2181/
2400円程と、そこそこかかってしまいましたが、自作でやる時間がなく、エッチングするにしろ委託するにしろ、そんなには変わらない(むしろ安い?)気がします。
また、HATなのでスッキリして良かったです。
また、内部の制御はPythonで書きましたが、Adafruit社から提供されているPCA9685用のライブラリがとても便利に使えました。
サーボ用の電源ですが、たまたま拾った ACアダプターが5.1V3Aのいい感じの値だったのでそのまま流用します。大きめの3端子レギュレーターが載ってたので、電圧もそのままで入れました。
本来ならば、逆運動学を解いて指定した場所に掴みに行くという制御が理想ですが、如何せん本体の寸法精度など、全く信用できないので、とりあえず角度制御でいきます。(後日、逆運動学はやるかもしれません)
とりあえず、キー入力に従って動くようにしました。
次回はIoT的な要素を入れるため、インターネットからの制御ができるようにした所を次回書きます。
ロボットアーム製作日誌(ハード編:後半 加工、組立)
ロボットアーム製作日誌第2回目です。
第1回設計編はこちら
saitetutan.hatenablog.jp
2.加工
本体にはホームセンターで購入した1mm厚のアルミ板を使用しました。
前回Fusionで設計した図面を、実寸大に印刷したものを、以下のようにアルミ板に貼り付けていきます。
この時、100均で購入したスプレーのりを使用しましたが、正直ダマになりやすいので、あまりオススメできません。
で、貼り付けたアルミ板に穴あけを行っていきます。
このときに気をつけたいのが、必ず先に穴を開けること。
ついつい先に切断したくなりますが、先に切ってしまうと、穴を開ける際にアルミ板が曲がってしまい、失敗してしまいます。
で、穴をあけた後は切断です。
手元にある切断工具が下図の電動糸鋸しかなかったので、これの刃を金属用に替えて、ゴリゴリ切っていきます。
コンターマシンなんかがあれば、もっと厚くて強い素材でも簡単に切断できて良かったのですが、この工具だと大体このぐらいの厚さが限界でした。
なお、カッターナイフで切れる、という記事を発見し、これも試してみましたが、大きいものから小さい範囲をカッターで切り目をつけて折っていこうとすると、材料自体が大きく曲がってしまい、あまり適していませんでした。
切り取り後、折り曲げ機を使って以下の通り成型していきます。
この後、これらできた部位同士を組み立てていき、
このように、ロボットアーム本体の完成です。
このままだと、掴み保持部分が金属で、物体保持に適していませんので、
のように、おゆまるをお湯で柔らかくしてから、丸めて取り付けて、完成です。
次回はこのロボットアームの制御部分について書きます。
ロボットアーム製作日誌(ハード編:前編 設計)
大学の学祭に向けて、自作ロボットアームを製作しました。
今回より全4回に分けて、備忘録を兼ねて書いていこうと思います。
0.準備編
ロボットアームといえば、一番重要と言っても過言でないものが、サーボモーターです。
今回、Aliexpressでmg995というメタルギアサーボが1つ300円程度で販売されている事を発見し、このサーボを使うことにしました。(むしろ、サーボを見つけた事でロボットアームを作ることに決めました。)
本体の素材としては1mm厚のアルミ板を使用し、制御はRaspberry PI3で行うことにしました。
せっかくですので、IoT的なものにしようと、ネット経由で動かせるように、というのも付け加えました。
1.設計編
設計にはFusion360という3DCADソフトを使用しました。
このソフトは、学生や非営利目的なら無料で使うことができます。
サーボモーターを取り付けるマウントの設計にはFusionのシートメタル機能を使用しました。
このシートメタル機能は板金加工(金属板を折り曲げて行う加工)の設計を行う際に非常に便利な機能です。
サーボのモデルの周りを覆うように以下の通り設計後、
2D図面に展開することで、
このように折り曲げ前の展開図を生成してくれます。
これの何が便利かというと、これを実寸大で印刷し、糊でアルミ板に貼り付けるだけで、ケガキすることなく、切断と穴あけ、折り曲げが行えてしまいます!
ロボットアームの掴む部分に関しては、下図の通り、サーボモータにワイヤーを巻きつけて、引っ張ると指が閉じる形にしました。
この機構で、人間の指と同じようにつかむ物体に合わせて、形状が変化することを狙いました。
これら、ロボットアームを構成する部位の設計が終わった後は、CAD内での組み立てを行います。
マウントやサーボ同士などをFusionのアセンブリ機能のjointで結合していくことで、下図のように組み立てられ、かつ稼働する様子を確かめることが出来ます。
あとは、各部位の平面上に展開した設計図をそれぞれ用意することで、設計は終わりです。
第二回ハード後半編はこちら
Aliexとかgeekとかwishとか
電子部品やモジュールなんかは、Amazonでの買い物よりもAliexpressとかgeekとかwishといった中国通販で買うことが多くなってきました。(ebayも使うことには使いますが。。)
で、その中で見つけた良かったものをここに羅列していこうと思います。
(どんどん追記していきます)
- モジュール37個セット
- 37で1センサーキット用のarduinoスターターキーズブランドhttp://s.aliexpress.com/nMJzQF7r
- とにかくいろんなモジュールを試してみたい人におすすめです。1000円強で37個なので一つ30円程ととてもお得です。
- ただ、結構ぐちゃっと詰められてきますので、壊れてる可能性もあります。
- はんだ
- Hot 50g 0.3mm-0.6mm Tin Rosin Lead Core Roll Solder Soldering Wire
http://geek.wish.com/c/55a872a5c1f77e57d142b9d8
- 安い(送料込みで200円程)&使い易いハンダです。
- 50gと書いてありますのでどれくらいか分かりにくいですが、写真通りの巻で来ます。
- 使い易いですが、鉛40%と普通に鉛はんだなのでそこは注意です。
SPAJAM大阪予選参加しました
最近更新が滞ってしまっていて。。
この間、色々とあったのですが(MBSハッカソン優勝とかタッチデバイス製作とか。。)また今度記事にしようと思います。
今回は先週行われたSPAJAM大阪予選についてです。
今回はチーム『でん&つー』としてパクパクトレインというアプリ(ゲーム)を作りました。
このゲームは踏切などで電車に向かってカメラをかざすと画面端に現れるパックマンが走っている電車を食べていくという単純ゲームです。
OpenCVで差分画像を取り、輪郭線を摘出、塗りつぶしを行うことで電車のみを割り出し、その部分の面積量をスコアに反映するという感じで処理を行っています。
また、差分なのでカメラを動かすと誤認識してしまうので、角速度を取って、しきい値以下でないとパクパクモードに入らないようにしてます(これを発表の際に言い忘れて、質問してもらえなかったらヤバかった。。というか発表の時疲れすぎて記憶があやふや。。)
このゲームの開発経緯としては、テーマが電車であったことから、踏切での待ち時間に暇を潰せる(踏切で待つことを楽しみにできる)ゲームはないかとの意見から生まれました。
ただ、開発にとても難航し、完成度が自分の中での考えていたものの30%ぐらいのものになってしまったのがとても残念でした。。
具体的な難航した所ですが、まずUnityで作ろうとしていたところにOpenCVが無料の範囲だと環境構築が大変そうなことからAndroidStudioに急遽変更(今から思えばこのまま環境構築していても対して変わらなかったかも)し、その後パックマンのアニメーションのせいでカメラ映像がアニメーションに同期しだしたり、最終ビルド直前(終了まであと5分程)にタイトルからの遷移でヌルポしたりなど、とにかく大変でした。。。
(徹夜もめっちゃ疲れた(-_-;))
ただ、結果的には優秀賞をいただけました。
正直、何故もらえたのか不明なくらいですが、単純に嬉しかったです。
あと今後の予定ですが、色々と作ったものがとっ散らかっていて自分でも整理しきれてないので、ポートフォリオを作ろうと思っています。
HackDay2017
遅くなりましたが、HackDay2017に参加してきました。
HackUではソフトを作ったので、今回はハード的なのを作りたいということで、ホワイトボードイレーサーロボットを作りました。
機能としては自動で文字を消してくれて、尚且つ書かれた文字を撮って保存してくれるようになってます。
中の仕様としては、Arduinoでサーボを制御し、esp8266でgroveのカメラモジュールから写真を撮ってwifiでサーバーに送信、そこで合成という形になってます。
外見的にはプロトタイプそのものでしたが、一応ホワイトボードを立てている状態でもきちんと動いてくれました。
賞にはなんにも引っかかりませんでしたが、貫徹でなんとかできたので悔いはないです。。。←