tasogarex’s blog

ITガジェットやライフハックとしてのゲームについて書いています。ITコンサルティング会社勤務シニアマネージャー。一児の父です。

ラズパイ日記 外部からの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つ。

・作業前の自宅ネットワーク設定が全然把握できていなかった

・ポートマッピングの仕様と設定方法の習得に時間がかかった

DDNSと固定グローバルIPの必要有無が判断できなかった

 

と色々ありましたが動いたので苦労も報われました。

というのも束の間、新たな課題です。

 

外部からの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固定したらインターネット接続できなくなる

眠かったので終了

通勤中調べてみると

固定する前にルーター側でDHCPipアドレス範囲を確認し、その範囲外になるようにしなければならないようだ。

今夜やってみよう。

 

ラズパイ日記 探索くん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号」です。


f:id:tasogarex:20161212082739j:image

 

なんといっても特徴は、自走型、かつWebから操作できるところです。前進、後退、旋回が可能で補助アームキャタピラがあるので小さな段差も乗り越えられます。

次回はこの探索くんにカメラをつけてみようと思います 。

 

ラズパイ日記.タッチくん1号

ラズパイ日記 12月5日月曜日

ラズベリーパイを入手してはや一ヶ月。そろそろ書籍に載っている演習以外にも、自分なりにガジェットを作ってみたい。ということで作ってみました記念すべき処女作!

 

私が遊んでいる某スマホゲームには毎分一回タッチを何十時間も継続することで貴重なアイテムが手に入るのですが、課金すれば手に入るといった仕様にはなっていない為、極めて忍耐と根気が問われる苦行です。それ故にプレイヤー達からはマラソンと呼ばれています。

そこでラズベリーパイのロボット作りの第一弾としてこのマラソンを自動化してやろうと考えました。

 

そしてできたのがコチラ。


f:id:tasogarex:20161206221534j:image

名付けて「タッチくん1号」

(メカとかロボに、1号とかつけたくなるのは私だけですかねw) 

 

用意したもの

Raspberry Pi 3 model B+

サーボモーターSG90

スマホタッチペン(静電式)

 ・タミヤユニバーサルアーム

・木材

・マット

・ブレッドボード

・ジャンパーワイヤ

・電池ボックス(単3×4本)

・文鎮(重り)

 

まずは仮組みとして無理やりモーターとタッチペンをくっつけてスマホをタッチさせてみました。ここで課題発生。反応しない。

事象:

手でタッチペンを使うと反応するのに、モーターだと反応しない。

 

原因:

最近のスマホのタッチパネルは静電式というやつで、常に静電気を帯びている人体の性質を利用している。タッチペンも電気を通しやすい素材でできているため、静電気を帯びていない機械にもたせてもスマホは反応しない。

 

対応:

アース線をロボットアームに繋いたところ無事反応するようになった。

 

 解説:

つまってから色々ググり、他の人が作ったロボットの動画を参考にしたところ、どの方もアース線を繋いでいることに気がつきました。

最初は人体静電気の代わりに何かで静電気を起こしてアース線でロボットまで流しているのかと思って頭を悩ませましたが、はたと逆であることに気がつきました。

アース線の片方をタッチペンに繋ぎ、もう片方は宙ぶらりんで、どこにも繋がない状態にすることで、静電気の通り道を作り、スマホからの静電気を空気中に逃がしてやるのです。

こうすることであら不思議、スマホがバッチリ反応するではありませんか。

 

最大の課題が解決したところで工作が始まりました。

 

工作:

DOITで買ってきた杉の棒を20cmくらいに切り落とします。

サーボモーターの固定位置を決め、

タミヤユニバーサルアームをポキっと折ってネジでモーターを固定します 。

アームの残りを再度折って、タッチペンのペン先を、アームとアームで挟み込んでネジで締めます。これがロボットアームになります。

あとはサーボモーター付属のペラをモーターに装着し、ペラとアー厶の残りをねじドメしてロボット本体完成です。

 

:配線

ラズパイとブレッドボードを配線し、ブレッドボードに電池ボックスとサーボモーターを配線します。


f:id:tasogarex:20161206221913j:image

写真ではADコンバーターや半固定抵抗(ツマミ)も搭載している為線もゴチャゴチャしてますがタッチくん1号にはこれらは使ってません。

モーター系を扱う場合、ラズパイからの電源供給ではなく、別途電池などの電源を用意するといいそうです。ノイズが出てしまうので。よって電池ボックスが出てくるわけです。

 

プログラミング:

最後にロボットを制御するプログラムを書きます。言語はpython

書籍の演習で半固定抵抗のツマミでサーボモーターを動かすプログラムを作っていましたので、サーボモーターの入力値(デューティ比)を半固定抵抗ではなくプログラムロジックでセットするように変えるだけです。

特徴としては、WiringPiというライブラリをインポートして使うことで精度の高い制御を可能としているところです。ラズパイはLinuxマルチタスク制御できる反面、単機能での高精度な動きが苦手です。それを解決するのがWiringPiというわけです。

さてあとはロジックでサーボに角度(デューティ比)を指定していくだけですがここは実際に動かしながら値を微調整していきます。

 

設置:

動かしてみると、アームに振られて本体が動いてしまいます。そこでマットと文鎮の登場です。さらにタッチする度に、少しづつ回ってしまうのを止めるストッパーとしてネジをマットにテープどめしました。

 

稼働:

ミスタッチが時々出るものの、30分間自動でゲームをすすめることに成功!

ロボットにゲームをさせることは果たして楽しいのか?なんの意味があるのか?などと哲学してしまいますが、結論としては、「すげー楽しい」です。

今後はこのタッチくんを進化させつつ別のロボットにも挑戦していこうと思います。 

 

ラズパイ日記 演習

2016年11月23日(祝)

半固定抵抗をもちいたAD変換の演習にとりかかるも、苦戦。

事象:

半固定抵抗のつまみを回しても、0のまま表示されてしまった。

 

原因:

本では12Bit ADコンバーターだったが購入していたセンサーキット付属は、8BitADコンバーターだったことで、配線は調整して動いたものの、ビット操作のロジックが解読できず数値がとれなかった。

 

対策:

8Bit用ビット操作ロジックへの書換えを検討しつつ、解決できなかったときのことを想定し、12BitADコンバーター秋月電子で追加発注。

 

概況:

2歳の娘がお昼寝の間だけラズパイを弄る。

昼寝前は遊園地に連れて行き、昼寝後はゴルフ打ちっぱなしに行ったら、夜疲れ果ててダウンしてしまいました。私の身体では意識高い生活は耐えられないようです。