忍者ブログ

nyaruratoの製作記録

フィギュアやプラモデルについてもそもそと語っていきます。 最近は電子工作・ゲーム製作に興味アリ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Androidゲー量産計画 1本目

タイトル通りAndroidのゲームをアイデアが浮かぶ限り作ってみることにしました。
週1,2本くらい作れたらなぁ・・・とは思っているのですが実際はどうなるんでしょう。

とりあえず1本目。
原点回帰してコインプッシャーゲームの亜種?ゲー。
スタープッシャーゲーム。


タップして星を落として星をゲットする無限ループなゲーム。
作った本人が言うのもなんですがクソゲー

容量と時間に余裕があったら遊んでください。


拍手[0回]

PR

RPGツクールでゲーム作った

RPGツクール買いました。
ツクール買った記念にゲームを一本作ると宣言し、5,6時間かけてクソゲーを一本完成させました。


ラーメンファンタジー
http://nyarurato.net/archive/games/noodles_fantasy.zip
(RPGツクールのRTP(ランタイムパッケージ)を含むためサイズはでかいです。[223MB])

ラーメンのファンタジーです。多分。
10分ほどでゲームは終わると思います。
デバッグをかなり手を抜いたのでバランス悪いです。

テーマとしてはいろいろと話が膨らませそうなのでしょぼい形でゲームを完成させてしまったのが残念です。

スクリプトを一切かかずに簡単にゲームができてしまうなんてツクールはすごいなぁと思いました。

拍手[0回]

ロボットアームを作ってみる。ソフト編

まだロボットアームのソフトは完成していないのですが現時点でわかっていることをまとめておきます。


今回は
Kinect等の入力機器 → Unity → ラズベリーパイ → サーボ
といった感じにします。
Unity、ラズベリーパイ間はUDP通信を使います。
計算はできるだけUnity側で行い、角度、(もしくはパルス長)をラズパイ側に渡すこととします。


・ラズベリーパイ側

サーボの操作ですが、ハード編にてでてきたサーボドライバを使います。

このサーボドライバのチュートリアル(ラズベリーパイ用)とライブラリをサーボドライバの販売会社?が公開しています。
ラズベリーパイ用のライブラリはPythonです。
http://junkroom2cyberrobotics.blogspot.jp/2013/06/raspberry-pi-adafruit-i2c-16-channel.html
こちらをみるとArduinoのライブラリを使えばC++でも扱えるようです。

チュートリアルにそってサンプルプログラムを動かし動作確認をしていくのですが、画像の通りにやっていくと僕の場合うまく行かず焦りました。
画像では15番とサーボをつないでいるのですが、サンプルプログラムを見ると0番を動かすことになっています。
0番にサーボを繋いでサンプルプログラムを動かすとうまくいきました。


・そもそもサーボの信号ってどうなってるのか?と疑問
>PWM方式とは、パルスの周期を一定にしてパルス幅を変える事で目的に合った制御を行うものです。
>サーボモータでは、パルスの幅が回転角に対応するようになっており、パルス幅が狭ければ0°,中位なら90°,広ければ180°と言うような動作をします。


・周期はどうすればいいのだろう
調べてみると、どうやらラジコン用のサーボは60Hzが普通らしい。
ということは周期は16.7msということになる


・サーボの仕様はどうなってるの
http://www.gws.com.tw/english/product/servo/servo%20form.htm
http://www.gws.com.tw/english/product/servo/sat%20form.htm
GWSのホームページのサーボのところを探すと2つ見つけた。
今回どっちを使えばいいかは不明。

サーボの特性がいまいち分からないので一つ一つ少しずつパルス長を変えて動きを確認することにしました。


・Unity側

滑らかに動かすには逆運動学を知らなければならないらしい。
逆運動学とはinverse kinematicsつまりIK。
UnityにIKの機能があったはずなのでそれを利用すれば面倒な計算を使わなくてもできそう。
IKでKinectなどで取った手の位置だけ与えてその時の関節の角度を取り、それをサーボに入力しようと考えた。

IKってどうやってセットアップするのだろう?
ここで挫折中。

今回のロボットアームは3関節のものと見れるので調べれば逆運動学の解が載っている。
http://ameblo.jp/sichi-i/entry-11290091765.html
しかし思ったような動作をしない・・・。



現在ここで停止中。
ラズパイ側のプログラムはできており、後はUnity側の関節の角度を計算する部分が出来上がれば一応は完成となります。

拍手[2回]

ロボットアームを作ってみる。ハード編

NASAがこのような動画をあげています


OculusとKinectをつかってロボットアームを操作している動画です。
このロボットアーム、調べてみると$48,400(500万くらい)もしてひええ~となるわけですが・・・

この動画を見てて思ったのが自分も同じようなことをしてみたいなということでした。
しかし500万もお金があるはずない!他のロボットアーム買おうにも地味に高い!
自作しよう!!

こうしてロボットアーム製作が決定しました。

~~作業前に書いたメモから引用~~
金属加工できたらできたらいいなぁ
できたらいいなぁと言うぐらいならやろう
精度は仕方ない。やることが大切なのでは?
サーボブラケットがいいらしい
どうやら組み合わせるだけでロボットアームが完成しちゃうかも?
アルミの金属加工が必要
厚さは? 1mmでいいのでは
流れは? 設計、紙に印刷、スプレーのりで接着、穴あけ、切断、折り曲げ
切断はどうする? 1mmならカッターでも出来るっぽい。
折り曲げは? 折り曲げ機は自作できるみたい。
穴あけは? ドリルがある。
ネジきりは? するならタップを買わなきゃいけない。
設計は? 一応cadあるしなんとかなるのでは
サーボは何使う?
小さくて軽くて高トルク
しかし高い
考えて要所要所に必要なものを置かなきゃいけない
肩に当たる部分には高トルク(一番負荷かかる
手首はそこまでいらない

~~作業前に書いたメモから引用終わり~~

頭の中のことをそのまま文字に起こしているので自問自答な文章ですが、作る前に考えたのはこんな感じです。

長期間にわたっダラダラと作業するのはモチベーションが保てず自分には向かないので短期間で終わらせるのを目標としました。

・注文
まず最初にサーボを注文しました。
秋月電子で注文。
ネットを見ているとGWSのS03Tの情報が多かったのでS03Tを中心にして作ろうと考えました。
今回使ったのは
S125-1T/2BB 1個(全体の回転用)
S03T/2BBMG 2個(肩、肘用)
S03N/2BBMG 1個(手首用)
MICRO/2BBMG 1個(手の開閉用)



S03Nですが元々持っていたものなので、もし持っていなかったらS03Tを3つ購入にしていたかもしれません。(S03Nよりちょっと長くなっただけでそれなりにトルクがでるから)

サーボの制御ですが、いつも使っているラズベリーパイで行うこととしました。
スイッチサイエンスのサーボドライバを購入。
http://www.switch-science.com/catalog/961/
I2C接続なのでラズベリーパイでも簡単に扱えます。

・設計
設計に入る前にサーボブラケットを作るにしてもサーボの動く軸の反対側(反対軸?逆軸?)はどうしようかという問題があります。さすがに片側だけで支持するというわけにはいきません。
ホームセンターにいっていいものはないかと見ていると組みネジというものを見つけました。

これを軸として使うことにしました。





頭の中の3Dモデルをぐるぐる動かしていてもどうしようもないので3D CADでモデルを作って設計図を作ります。
CADはInventorを使いました。
学生なら無料で使えます。
http://www.autodesk.com/education/student-software

ノギスでサーボのサイズを測りながらサーボの3Dモデルを作っていきます。
後から知りましたがS03TとMicroに関しては浅草ギ研さんが寸法図を公開してます。
http://www.robotsfx.com/robot/RCServo.html

こんな感じで。かなり簡略化したモデルでいろいろと省略して作ってます。

そしてこれに合うようにサーボブラケットとアームを作っていきます。

こんな感じ。
サーボブラケットとアームですが、新規作成の時にシートメタルを選択しています。


とりあえず簡単に組み合わせてみる。
本来はここでボルトやねじなどを差し込んで干渉しないかなどチェックするのですが、今回は大丈夫だろうと飛ばしました・・・。そのため後から実際に組み立てた時にネジ同士の干渉を起こしてしまいました。


手の部分、ものをつかむ機構の部分ですがかなり悩みました。
リンク機構を使ってマジックハンドのようなものを作るのもいいなと思ったのですが、サイズが大きくなりそうということで不採用。
ギアが作れるとかなり選択肢が広がるのですが、作る技術がないため今回はhttp://robozak.jugem.jp/?eid=1053846 こちらの画像のような片側固定の手にすることにしました。


こんな感じで使うサーボのブラケットとアームのモデルを作っていきました。(S125-1Tは土台に固定するつもりだったのでブラケットは設計していない)

アームの完成予想図。(曲がっていますが・・・)

モデルを作ったのでそれを2Dの設計図にします。
ブラケットとアームはシートメタルで作ったので、フラットパターン(折りたたむ前の段階)にできてかなり楽です。


こうなります。製図のルールを無視したものになってしまいましたが、印刷して貼るのが目的なので気にしません。
シートメタルの設定が厚さ0.5mmとなっていたため深さ0.5の穴になってしまっていますが実際は貫通です。
印刷する用紙のサイズに合わせシートのサイズを変更し、尺度を1:1で印刷すれば実際のサイズで出てきます。


・準備
サーボブラケットを作る前にアルミの折曲げ器をつくります。
なくても曲げることは可能ですが、あるときれいに折れるような気がします

http://minkara.carview.co.jp/userid/424653/car/337248/649180/note.aspx
このページを参考に作りました。ほぼパクリです。

用意したのは厚さ2.0mm、長さ1mのアルミアングル。

とりあえず半分に切って蝶番をつけて


持ち手を付けて完成。


精度は微妙ですが2000かかったかどうかくらいで出来たので良かったです。
1mmのアルミなら余裕で曲げられましたが、2mmはきついかもしれません。
また押さえる部分や曲げる部分が短い場合、これでは曲げることが出来ませんでした。(アルミアングルと全く干渉しない。短い部分を木の板とクランプで挟んで曲げました)

アルミ曲げ器を作りましたが木の板の間にアルミを挟んでクランプで締めて曲げても大して変わらなかったのではないかと思います。


・製作

実際に作っていきます。まずサーボブラケットを印刷した紙を切ってアルミ板に貼っていきます。紙をアルミに貼るのにはスプレーのりを使いました。




1番最初にやって失敗したことなのですが下のように1枚のアルミに何枚も貼るのはすごく作業がしにくかったです。(何度も曲げることで金属を切断する方法を取ったため。
余裕をもって紙が貼れるようなサイズに切っておき紙を貼るのがいいと思いました。


切断ですが、http://making.ti-da.net/e2405903.html ここに載ってるようにカッターで切り込みを入れて何回も曲げることで金属疲労で折るという方法を取りました。


切り込みを入れて、(穴を開ける位置と曲げる部分が分かればいいのでぼろぼろなのは気にしない)


板と板の間に挟んでクランプで締めて、余った部分をプライヤーで掴みグニャグニャする


亀裂が成長し切断完了!
後は切断面にヤスリをかけたりして終わりです。


次は穴あけですが、穴を開ける前にポンチを打ちます。ポンチを打たないと穴がきれいに空かないと思います。
ポンチがズレて結果、穴がズレることが結構ありました。ポンチを打つ位置がわかりやすくなるように印刷する図面の穴部分は十字中心線を入れておくのが重要だなと思いました。



その次は曲げです。
折り曲げ器を作ったのでそれを使います。
曲げたい線アルミアングルの角が合うようにセットし固定して曲げます。


結果こんな感じになります


曲げる部分をすべて曲げるとこうなります。(写真はブレブレですが・・・

CADで作ったモデルとほぼ同じ。

この後アルミに張り付いている紙はもう使わないのでシール剥がしなどで剥がしました。

試しにサーボと組み合わせてみました。


(撮影後、別のサーボ用(S03NなのにS03T)のアームを取り付けていたことが判明。10mmも長く出来上がってしまっておかしいなと思いつつ取った写真です。なので実際はもうちょっと短いアームです。この時はわざわざ10mm長い組ネジを買いに行きました・・・)


サーボのケーブルは短くこのままだとサーボドライバまで届かなかったりするので延長ケーブルを作りました。

線とソケットを何セットか買ってきてハンダ付けしました。この線はサーボのフタバ配列と同じ色だったので作った後もわかりやすかったです。
http://kenkitami.tonosama.jp/others/connector.html
このページを参考に作りました。コネクタのメスを作るときにはんだを載せ過ぎたりケーブルを入れすぎたりしたために挿しづらいコネクタとなってしまいました。
このページではサーボ用コネクタオスメスセットっとなっていますが、マルツでは2.54mmピッチコネクター 3ピンとしておいてありました。





このようなアルミ加工をするにあたってかなり参考にしたページ。
http://www.geocities.jp/mimiin/tips/kakou/kakou.html
http://0n0.fc2web.com/kakou/bracket/bracket_02.htm

・組み立て
出来たサーボとサーボブラケット、アームを組み合わせアーム状にしていきます。


こんなかんじで組み合わせていきます。

一番下は木の板と棒を組み合わせて作った土台に穴を空け、360度回転可能なS125-1Tを入れています。

この組立て段階でいくつか問題がありました。
ほとんどがネジが締まらない!という問題です。
ブラケット曲がってる部分に干渉して締り切らない(サーボとブラケットを固定する部分)、ボルトに干渉し入らない(アームとブラケットの接続部分)、穴がずれててネジが通らない

問題にぶつかってCAD上で実際にネジを差し込んで確認するべきだったと思いました。

現状としては締り切らない部分は締められるとこまで締め、干渉し入らない部分はいれるのを諦め大きいボルト一個だけで支持しています。(強度上は全く問題ないのですが、自由度を制限?してないためブラケットが回転可能になってしまっている。結束バンドのようなものでアームとブラケットを固定することで解消可能なはず。)
穴がずれててネジが通らなかった部分に関しては穴を少し大きくすれば通ったので大丈夫でした。



最終的にこうなりました。

適当に何枚か写真取ったので上げます。


アームとブラケットのネジが干渉してしまう部分。


ハード編はとりあえず以上です。

ソフト編

拍手[13回]

ラズベリーパイで温度センサ(ADT7410)を触った

アキバに行ったので秋月電子で温度センサ買ってきました。
I2Cモジュールがラズパイでは使いやすいらしいということで、ADT7410が載った温度センサモジュールを購入。500円。

とりあえずラズベリーパイと温度センサモジュールとをつなぎます。
基板にVDD、SCL、SDA、GNDと小さく書いてあるのでその順につなげました。


次にI2Cを使えるようにしました。
その辺は他のブログが詳しいです。http://nanicananica.blog.fc2.com/blog-entry-21.html

シェルで動作確認ですが、
$ sudo i2cdetect -y 1
でいけました。
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --     
こういう風に出てきます。このモジュールのバスアドレスは0x48なので一致します。

ここから温度のデータを取っていきます。
シェル上では
i2cget 1 -y [I2Cバス] [センサの内部アドレス]  w
でデータが取れるようです。

I2Cバスは0x48でいいのですが、センサの内部アドレスがどうしたらいいかわかりませんでした。
そこでデータシート(http://www.analog.com/static/imported-files/data_sheets/ADT7410.pdf)の13ページあたりを見るとTemperature value most significant byteと書かれたものがあったのでこれを使いました。よってセンサの内部アドレスは0x00です。

$ sudo i2cget -y 1 0x48 0x00 w
こうなります。
打つと0xc80bみたいな値が出てくると思います。

このままだと温度はわからないので分かる値へと変えていきます。
まずエンディアンを逆にしなきゃならないそうです。

こんな感じっぽいです。詳しくはググってください。間違ってたら教えてください。
とりあえず0x0bc8という数字を使います。

下位3ビットを捨てるらしいので8で割ります。
なんで8で割るのかなと思って調べたらこのサイト(http://www.geocities.jp/zaqzaqpa/2sinsuu10.htm)の右シフトの部分を見てなるほど~となりました。

あとはこのサイト(http://atelier-orchard.blogspot.jp/2013/12/raspberry-pi.html)の温度の取得のところを参考に0x0bc8を8で割った後、0.0625をかけるとそれっぽい値が出てきました。



今度はスクリプトから温度を取得してみました。
http://nanicananica.blog.fc2.com/blog-entry-17.html
http://nanicananica.blog.fc2.com/blog-entry-22.html
https://projects.drogon.net/raspberry-pi/wiringpi/i2c-library/
これらのページを参考にC言語で書きました。
ページを見るとわかると思いますが、wiringPiを使ってます。

ハマってしまったのは
gccでコンパイルした時に
test.c:(.text+0x18): undefined reference to `wiringPiI2CSetup'
test.c:(.text+0x48): undefined reference to `wiringPiI2CReadReg16'
collect2: ld returned 1 exit status
といったエラーがでたことです。
これは
gcc test.c -lwiringPi
といったように -lwiringPiをつけてやるのを忘れたために起きていました。

とても汚いですがソースを公開します。


#include <stdio.h>
#include <wiringpii2c.h>
#include <stdlib.h>
#include <string.h>

int main(){
int ID = 0x48,reg = 0x00;//regは内部アドレス
int fd,temp,this_is_temp;//tempは仮の温度入れ、this_is_tempは最終的な温度入れ
char buf[5],temp_buf[5];


fd = wiringPiI2CSetup(ID);
temp = wiringPiI2CReadReg16(fd,reg);
printf("original temp data : %d\n",temp);

//エンディアンが逆に出ているのを直すために16進数の文字列にする
sprintf(buf,"%x",temp);

printf("now : %s \n" , buf);

//エンディアンが逆なのを直すところ
temp_buf[0] = buf[2];
temp_buf[1] = buf[3];
temp_buf[2] = buf[0];
temp_buf[3] = buf[1];
temp_buf[4] = buf[4];
printf("next : %s \n" ,temp_buf);

//文字列をintに
sscanf(temp_buf,"%x",&this_is_temp);

printf("convert temp: %x , %d \n",this_is_temp,this_is_temp);
//温度を出すための計算
this_is_temp = this_is_temp / 8 * 0.0625;
printf("This is temperature : %d\n" , this_is_temp);

//ツイート用
char temp_texts[3],texts[140]="tw テスト 今の部屋の温度は";
sprintf(temp_texts,"%d",this_is_temp);

strcat(texts,temp_texts);
strcat(texts,"度なう");

system(texts);

return 0;
}







出力結果はこんなかんじ
original temp data : 30731
now : 780b 
next : 0b78 
convert temp: b78 , 2936 
This is temperature : 22
tweet "テスト 今の部屋の温度は22度なう"?  (17 chars)
[Y/n]

こんな感じでツイートされます

ちなみにtwitterへの投稿にはtwを使っています。

拍手[0回]

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

リンク

最新CM

[07/16 listener]
[07/15 nyarurato]
[07/12 listener]
[12/19 satotaku]

最新TB

プロフィール

HN:
にゃるらと
性別:
男性
自己紹介:
こんにちは。
プラモやフィギュアなどについて書いていくつもりのブログです。
Twitter
https://twitter.com/sakura_metal

バーコード

ブログ内検索

Copyright © nyaruratoの製作記録 : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]