ラズパイ日記 ロボットクリエイターとデザイナー
ラズベリーパイでロボットを作り始めてから自分の中である変化が置きました。
実は僕は絵と字が大の苦手で、生まれてこの方、美術からは距離を置いてきましたのですが、ここにきて猛烈にデザイン(造形)なる領域への興味が湧いてきたのです。
以前、EVOLTA、ロビ、RoBoHoNで有名なロボットクリエイターの高橋智隆さんの講演をたまたま聴く機会があったのですが、高橋さんは自らををロボットの開発者というよりはロボットデザイナーに近いとおっしゃっていました。
パーツの材質や整合性や色合い、人間味と親近感を覚えるロボットとしての外観を徹底的にお一人で追求していると。
当時は失礼ながら変わった方だなーと思ってきいていましたが、今になってすごく気持ちがわかる気がします。
ロボットに苦労して想定していた機能を実装し終わってみると、なんだか無機物に魂を込めたら動き出したような気になります。
しかし見た目の方は配線だらけでパーツや基盤も剥き出し。
これはこれで良さはあるのですが、デバイス配置や外装を最適化してもっとスタリッシュにしたい欲が湧いてきます。
で、色々考えるわけです。
配線をユニバーサル基板に貼り付けたらこれだけ小さくなるとか、ラズパイを縦にしてみるかとか。キャタピラにカバーをつけたら。デバイスを内包させて、人形ロボットにする場合、カメラ部分はジオン系モビルスーツが参考になりそうとか。
そんなことを考えながら、ロビやRoBoHoNを見てみると、なんて美しいデザインなんだろうと驚愕します。
まずこのコンパクトさ!かつスリムな胴体なのに10軸以上のサーボモーターを搭載してるなんて。とんでもなく緻密なデザインです。
かのMHマイスター、レディオス・ソープさんも、おっしゃっています。
「可動ラインが見えない。物凄い耐久性の証だ」
究極のデザインには機能美も宿るのです。
それはさておき、いざ頭に描いたデザインを実現するためには、外装をつくらなければなりません。
まずはじめに浮かんだのはプラモデルでしたが最適なサイズや、形状の組み合わせを市販キットから探し求めるのは現実的ではありません。
じゃあ型取りからか。これも1から着手するには果てしないです。
そこで閃きました!
ピコーン!無双三段!
ではなく、「3Dプリンター」だ!
そう、世の中を賑わせ早数年経ちますが、まるで僕が造形に目覚めるのを待っていたかのように3Dプリンターが一般人でも実用レベルになってきているではありませんか。
キタコレ!ということ我が探索くんの2号化プロジェクトは3Dプリンターを使ってスタイリッシュなトランスフォームを目指していきたいと思います。
ラズパイ日記 外部からのWebIOPi
今回は外部LTE接続におけるWebIOPiとmjpeg-streamerの設定チェーンアップです。
まずはカメラから
フレームレート:15から5に
解像度:640*480を320*240に
jpeg画質:50のまま変更せず
結果かなりコマ落ちは改善されフリーズもしなくなりました。
それでも5fpsに対し1秒に1回程度の画像更新なのでまだたくさんコマ落ちしている模様。2fpsぐらいでいいかも
解像度は5.5inchのスマホ画面でぎりぎりかなといった画質なのでこの辺で良さそうです。
割りと改善したのでゆるドメしていたカメラとカメラ台を本格設置することにしました。
カメラ台は2軸サーボモーターで左右上下に旋回てきるよう設計、
この結果カメラモジュールが上下逆さまになったので設定に以下を追加します。
垂直反転と水平反転をTrue
ところがこれをやったところ処理が遅くなってしまった。反転のせいか、サーボが2つ追加接続された影響かは不明だがサーボのプログラムはまだインプリ前の事象でした。
さてそのサーボプログラムですが、
軽くはまりました。
サーボ操作プログラムをWebiopiのconfigに設定したところWebiopiが起動しなくなったのです。
原因はWiringpiのインポートエラーによるものでした。
原因にたどり着くために苦戦しましたが以下の方のブログで救われました。ありがとうございます。
http://takashin10mura.blogspot.jp/2016/06/wiringpipython.html?m=1
webiopiにはデバッグモードがあったんてすね。便利。これによってエラーを特定できたわけです。
Wiringpiの再インストールも一癖あり、Unicodeエラーをシュートしないといけませんでしたがなんとかなりました。
無事ブラウザから探索くんのカメラ台を上下左右に操作できました。
次回はいよいよ探索くん1号最終章。
自走プログラムとカメラ台プログラムを合体させます。
ラズパイ日記 探索くん1号 外部からのWebIOPi
ようやく外部からインターネット経由で探索くん1号を操作することに成功。
カメラによるストリーミング撮影も同時に起動できている。
前回の予定手順から少し変更してここまでたどり着きました。
1. ラズパイのipアドレスをDHCPから固定ipに変更する(ルーターにて固定DHCPを設定)
2. ルーターでポート開放する
8000: WebIOPi
9000: jmpeg-streamer
3. ルーターにてポートマッピングを設定しルーター宛ポート番号8000/9000のアクセスを上記ラズパイのローカルip8000/9000にマッピング設定
4. 外部からグローバルipにアクセスする
振り返ってみると大したことをやっていないのですが苦労しました。原因は大きく3つ。
・作業前の自宅ネットワーク設定が全然把握できていなかった
・ポートマッピングの仕様と設定方法の習得に時間がかかった
と色々ありましたが動いたので苦労も報われました。
というのも束の間、新たな課題です。
外部からのLTE経由だと操作もカメラも反応がかなり遅い。
コントローラ
LANのときは上下左右ボタンは押している間だけ探索くんが動きたのですが、外部からのLTEだと 押したら2秒遅れで動き出ししかも時々止まらなくなる。
カメラ
コマ落ち、遅延、しまいには更新されない
というわけで、通信スループットに適した各種設定のチューンアップが必要となりました。
ラズパイ日記 探索くん1号外部インターネットからWebIOPi
引続き課題対応中
Weavedに払った$24分は足掻いたものの結局jmpeg-streamerとWebIOPiの同時起動はできなかった。
代替案として、Weavedを使わずに外部からのアクセスを試みることに
ステップは以下の通り
1. ラズパイのipアドレスをDHCPから固定ipに変更する
2. ルーターにてポート開放する
8000: WebIOPi
9000: jmpeg-streamer
3. 外部からグローバルipにアクセスする
1で早速躓く。ネットワークはいつやってもすんなり行かないのが常。
ip固定したらインターネット接続できなくなる
眠かったので終了
通勤中調べてみると
固定する前にルーター側でDHCPのipアドレス範囲を確認し、その範囲外になるようにしなければならないようだ。
今夜やってみよう。
ラズパイ日記 探索くん1号 外部インターネットからWebIOPi操作
探索くん1号の完成からはや一ヶ月半たってしまいました。
1月は忙しくてラズパイにほとんど触れられず、2月に入ってようやく再開できました。
探索くん1号にカメラをつけて、Webコントローラ上にストリーミング動画も見せるところまでは、書籍の演習通りに実施して成功しました。
さらにそれを外部インターネットからできるようにして、会社から自宅の探索くんを操作してやろうというのが今回の目標です。
さてここでお約束のトラブル発生です。
■事象
外部インターネットからアクセスすると、
WebIOPiとjmpeg-streamerを同時に有効化することができない。ブラウザ上でWebIOPiコントロールすることはできるし、streamer設定サイトでラズパイカメラの映像配信もできるが、WebIOPiサイトでstreamer配信ができない。
■原因
恐らくはWebIOPiがポート番号8000でjmeg-streamerがポート番号9000となっていることが関係していそうだが、不明
■対応
WebIOPiを外部インターネットから操作するために使用しているWeaved.comというサービスのフリーアカウントでは同時起動できるサービスが一つまでとなっていたのでBuilders Planを購入(年間$24)。
しかし事象に変化なし。
悔しいので$24分は足掻いてみようと思います。
乞うご期待。
ラズパイ日記 探索くん1号
2016年12月11日(日)
書籍の演習に沿ってラズパイ工作を続けてはや一ヶ月。ついに最終10章にたどり着きました。
最終章ではこれまでのすべての演習要素を取り入れた仕組みになっており、キャタピラロボットをWebから操作するという大作でした。
そして着手から約10時間という過去の演習より遥かに大きい工数でしたがなんとか完成しました!
演習の装置には名前をつけていませんでしたがこれは紛れもなくロボットですので特別につけました。
名付けて、「探索くん1号」です。
なんといっても特徴は、自走型、かつWebから操作できるところです。前進、後退、旋回が可能で補助アームキャタピラがあるので小さな段差も乗り越えられます。
次回はこの探索くんにカメラをつけてみようと思います 。
ラズパイ日記.タッチくん1号
ラズパイ日記 12月5日月曜日
ラズベリーパイを入手してはや一ヶ月。そろそろ書籍に載っている演習以外にも、自分なりにガジェットを作ってみたい。ということで作ってみました記念すべき処女作!
私が遊んでいる某スマホゲームには毎分一回タッチを何十時間も継続することで貴重なアイテムが手に入るのですが、課金すれば手に入るといった仕様にはなっていない為、極めて忍耐と根気が問われる苦行です。それ故にプレイヤー達からはマラソンと呼ばれています。
そこでラズベリーパイのロボット作りの第一弾としてこのマラソンを自動化してやろうと考えました。
そしてできたのがコチラ。
名付けて「タッチくん1号」
(メカとかロボに、1号とかつけたくなるのは私だけですかねw)
用意したもの
・Raspberry Pi 3 model B+
・サーボモーターSG90
・タミヤユニバーサルアーム
・木材
・マット
・ブレッドボード
・ジャンパーワイヤ
・電池ボックス(単3×4本)
・文鎮(重り)
まずは仮組みとして無理やりモーターとタッチペンをくっつけてスマホをタッチさせてみました。ここで課題発生。反応しない。
事象:
手でタッチペンを使うと反応するのに、モーターだと反応しない。
原因:
最近のスマホのタッチパネルは静電式というやつで、常に静電気を帯びている人体の性質を利用している。タッチペンも電気を通しやすい素材でできているため、静電気を帯びていない機械にもたせてもスマホは反応しない。
対応:
アース線をロボットアームに繋いたところ無事反応するようになった。
解説:
つまってから色々ググり、他の人が作ったロボットの動画を参考にしたところ、どの方もアース線を繋いでいることに気がつきました。
最初は人体静電気の代わりに何かで静電気を起こしてアース線でロボットまで流しているのかと思って頭を悩ませましたが、はたと逆であることに気がつきました。
アース線の片方をタッチペンに繋ぎ、もう片方は宙ぶらりんで、どこにも繋がない状態にすることで、静電気の通り道を作り、スマホからの静電気を空気中に逃がしてやるのです。
こうすることであら不思議、スマホがバッチリ反応するではありませんか。
最大の課題が解決したところで工作が始まりました。
工作:
DOITで買ってきた杉の棒を20cmくらいに切り落とします。
サーボモーターの固定位置を決め、
タミヤユニバーサルアームをポキっと折ってネジでモーターを固定します 。
アームの残りを再度折って、タッチペンのペン先を、アームとアームで挟み込んでネジで締めます。これがロボットアームになります。
あとはサーボモーター付属のペラをモーターに装着し、ペラとアー厶の残りをねじドメしてロボット本体完成です。
:配線
ラズパイとブレッドボードを配線し、ブレッドボードに電池ボックスとサーボモーターを配線します。
写真ではADコンバーターや半固定抵抗(ツマミ)も搭載している為線もゴチャゴチャしてますがタッチくん1号にはこれらは使ってません。
モーター系を扱う場合、ラズパイからの電源供給ではなく、別途電池などの電源を用意するといいそうです。ノイズが出てしまうので。よって電池ボックスが出てくるわけです。
プログラミング:
最後にロボットを制御するプログラムを書きます。言語はpython。
書籍の演習で半固定抵抗のツマミでサーボモーターを動かすプログラムを作っていましたので、サーボモーターの入力値(デューティ比)を半固定抵抗ではなくプログラムロジックでセットするように変えるだけです。
特徴としては、WiringPiというライブラリをインポートして使うことで精度の高い制御を可能としているところです。ラズパイはLinuxでマルチタスク制御できる反面、単機能での高精度な動きが苦手です。それを解決するのがWiringPiというわけです。
さてあとはロジックでサーボに角度(デューティ比)を指定していくだけですがここは実際に動かしながら値を微調整していきます。
設置:
動かしてみると、アームに振られて本体が動いてしまいます。そこでマットと文鎮の登場です。さらにタッチする度に、少しづつ回ってしまうのを止めるストッパーとしてネジをマットにテープどめしました。
稼働:
ミスタッチが時々出るものの、30分間自動でゲームをすすめることに成功!
ロボットにゲームをさせることは果たして楽しいのか?なんの意味があるのか?などと哲学してしまいますが、結論としては、「すげー楽しい」です。
今後はこのタッチくんを進化させつつ別のロボットにも挑戦していこうと思います。