今年の夏休みは最新技術で工作しよう! 〜Webブラウザから操作できる「SkyWayロボット」の作り方〜
こんにちは、ものづくり担当のうこ(@harmoniko)です。
連日猛暑が続きますが、暑さに負けず、ものづくりやってますかー?
今回は、WebRTCを用いたサービスの1つであるSkyWayを利用した、遠隔操作可能でカメラの映像も見れちゃうロボットの作り方を解説します。
また、実際のラジコンは、Maker Faire Tokyo 2019のSkyWayブースにてデモ展示されます。
少し難しいところもありますが、ぜひチャレンジしてみてください!
必要な部品
こちらのパーツ類をそれぞれ購入して揃えましょう。1〜4番はタミヤの製品です。5〜7番はホームセンター等で入手できます。右下の小さい部品は以下を参照してください。
8番の銅線の長さは、9番のラズパイ用カメラのフラットケーブルと同じくらいの長さでよいです。10番はWaveShareという会社の製品で、1500〜2000円前後で通販などでも入手できます。12番のセメント抵抗は、秋葉原のパーツ屋さんなどでないと入手しにくいかもしれません。13番のマイクロSDカードは4GB以上のものであれば何でもかまいません。
製作に必要な工具類がこちらです。はんだごてはあってもなくても作れますが、100円ショップでも手に入るのでできるだけあったほうがいいでしょう。
組み立て
車体本体
部品のうち、1〜3番は中に説明書が入っているため、まずそれを読みながらそれぞれ組み立てます。1番のボールキャスターは「高さ35mm」で作成、3番のツインモーターギヤボックスは「低速タイプ」で作成してください。ギヤボックスは、小さな輪っかのようなものが部品として余りますので、2つは捨てずに置いておいてください。後ほど「スペーサー」として利用します。
モーターを一度ギヤボックスから抜き、8番の銅線をそれぞれモーター端子に接続します。はんだごてがない場合は、多めに皮膜をむいてよく巻きつけるようにしましょう。
モーターをギヤボックスに戻し、タイヤをギヤボックスのシャフトに差し込みます。
4番のユニバーサルプレートセットを取り出し、一番大きな部材の短辺に近い一部分(上図参考、端から穴一つぶん空けて内側)をニッパで切り取って複数の穴を連結させます。これをスリットと呼びます。
先ほど切り取ったスリットの上あたりに、スリットを隠さないようにして、ユニバーサルプレートセット内にある「軸受け」を付属のネジとナットを使って上図のように固定してください。本来は、これはシャフトを通したりするのに使うパーツですが、今回はカメラを設置するためのパーツとして転用しています。
ユニバーサルプレートの軸受けをつけていない面に、タイヤをつけたギヤボックスとボールキャスターをネジとナットで固定します。ネジの位置は上図をよく見て同じ位置に留めてください。ボールキャスターはネジ穴が4つありますが、留めるのは2点だけで問題ありません。
電源とRaspberry Piの取り付け
5〜7番をまとめて1つにして、バッテリーボックスを作ります。
12番のセメント抵抗2本の脚部分を短めに切り、10番のMotor Driver HATの「MA1」端子と「MB1」端子にそれぞれ片方の脚ずつ挿入します(図はMA1のみ挿入しているところです)。マイナスドライバーを使って端子を締め込み、外れないよう固定します。
次に11番のRaspberry Pi 3 B+(以下ラズパイ)を手に持ち、マイクロSDカードスロットがある短辺をこちらに向けます。その状態で、両端にあるネジ穴にギヤボックスの余り部品であるネジと、あらかじめ確保しておいたスペーサーを図のように差し込みます。固い場合があるので、その際はドライバーで回しながら差し込んでください。
車体本体に、ネジ2つがついたラズパイを設置します。図を参考にして、ユニバーサルプレート先端部分が穴2つぶんのスペースが空くようにラズパイを置き、ネジをプレートの穴にはめ込んでください。
9番のラズパイ用カメラのケーブルを、ユニバーサルプレートの下からスリットに入れて上に通し、そのままラズパイ本体のカメラコネクタに接続します。
セメント抵抗をつけたMotor Driver HATを、ラズパイの上に設置します。GPIOピンがずれないようにうまくドッキングしてください。
左右のモーターからそれぞれ銅線を1本ずつ、ユニバーサルプレートの穴を通してオモテ側に2本引っ張って持ってきます。その2本をそれぞれ、Motor Driver HATの「MA2」端子と「MB2」端子に挿入し、マイナスドライバーでネジを締めて固定してください。なお、1つのモーターからは2本の銅線が出ていますが、ここではどちらを使ってもかまいません。左右各々から1本ずつ接続してください。
左右の各モーターの残りの銅線2本をユニバーサルプレート下から上に通し、今度はセメント抵抗の脚部分に接続します。
ここも、基本的にははんだづけしたほうがよいですが、しない場合は銅線をよく巻きつけてください。金属用ボンドなどをあとで上から塗り保護するのもよいです。
マイクロSDカードのセットアップ
OSインストール
まず、以下のURLからセットアップ済みのRaspberry Pi用OSイメージをダウンロードしてください。
およそ3GBありますので、ディスク容量と通信量にこ注意ください。
SkyWayRobot.iso
こちらのイメージは、ユーザー名が「pi」、パスワードが「raspverry」となっています。
SSH接続される際の参考にしてください。
ダウンロードができたら、以下のサイトを参考にしてマイクロSDカードにダウンロードしたOSイメージをインストールしてください。
Windowsの場合:最近のRaspberry Piイメージ(Raspbian)をインストールするメモ - 1ft-seabass.jp.MEMO の「SDカードのフォーマット」から「初期設定」直前まで
Macの場合:MacでRaspberryPi入門 - Qiita の「2.microSDカードに書き込み」の部分
OSをインストールしているあいだ、次のSkyWayセットアップを行なっておいてください。
SkyWayのセットアップ
次に、SkyWayにユーザー登録をして、APIキーを発行します。
新規登録 - SkyWay - Enterprise Cloud WebRTC Platform
上記のページの「Community Edition」にある「無料で新規登録」のボタンから、アカウントを新規に作成しましょう。
アカウントを作成したらログインして、上段の “Create new application” をクリックします。するとアプリケーション作成ページに飛びますので、以下のように入力します。
Application description: My WebRTC Robot(一例。任意の名前でよいです)
Available domains: localhost, 127.0.0.1, ukkz.github.io
“ukkz.github.io” は、後ほどWeb上のロボットコントローラーからアクセスする際に必要なので、最初は必ず入れておいてください。
入力完了したら緑色のCreateボタンをクリックして作成します。
作成後のページはこのように表示されているかと思います。
API Keyの欄に表示されている文字列をコピーしてどこかに控えておきましょう。
環境設定
OSのインストールが完了すると、「boot」という外付けディスクがPCに認識されていると思います。そのディスクを開くと色々なファイルが入っていますが、その中から「wifi_passwd_list.conf」と、「robot.json」があることを確認してください。
まず最初に「wifi_passwd_list.conf」を開き、自宅などのWiFiのSSIDとパスワードを入力します。こうすることでWiFiに自動で接続することができます。
次に「robot.json」を開きます。この中の"YOUR_SKYWAY_APIKEY"
となっている部分に、先ほど取得したご自身のAPIキーをペーストしてください。また、"robot-NEW"
となっているところはこのロボットを識別するための「ピアID」となります。ここは好きな名前をいれましょう。
今回は必要ありませんが、このラズパイと同じLAN内でもしSSH接続をする場合は、ssh pi@ピアID.local
とするとそのままアクセスすることができます。
また上述したとおり、パスワードは「raspverry」に設定しています。
この「robot.json」の他の項目として"reverse"
と書かれた部分があります。ここをfalse
からtrue
にすると、モーターの回転方向が逆転します。銅線の接続方法によっては最初から逆回転をするようになっている場合があるので、完成後にコントローラからロボットを操作した際に操作と逆方向に進んでしまったりする場合は、こちらのパラメータを変更してみてください。
以上まで終了したら、マイクロSDカードをPCから取り外します。
仕上げ
ペンチやピンセットなどを使って、マイクロSDカードをラズパイのスロットに挿入します。
カメラがだらんと垂れた状態になっているので、厚めの両面テープを使い、ユニバーサルプレート先端の「軸受けパーツ」に上図のように固定します。
電池ボックスをロボット後部の空いた部分に載せ、輪ゴムや髪留め用のゴムなどで落ちないよう簡単に固定します。最後に電池スナップから伸びる赤と黒の線を、それぞれ「VIN」端子と「GND」端子に接続すれば完成です!
試してみよう
電源スイッチを入れて、30秒ほど待ってみましょう。モーターが動き、ロボットが軽く前後に移動するような「シグナリング動作」を行うのが確認できたら、SkyWayへの接続が完了しています。何も起こらない場合は、環境設定のところで入力したWiFiの情報が間違っていないか、APIキーがちゃんと入力されているか確認しましょう。
SkyWayへの接続ができているようであれば、以下のURLをまずコピーして、お使いのブラウザのアドレスバーにペーストしてください。https://ukkz.github.io/skyway-robot/?apikey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ペーストできたら、ページを表示する前に、このアドレスの「?apikey=」に続く文字列をご自身で取得したAPIキーに書き換えてからこのURLにアクセスしてください。すると次のような画面が出ます。
この画面では、各ロボットごとに設定した「ピアID」の文字列のボタンが複数表示されています。このように、うまく接続できている場合は環境設定のところで書いたロボットの「ピアID」が画面上部に表示されます。同じAPIキーで複数台接続している場合は、その台数分だけボタンが出現します。この時点ではまだロボットとP2P接続していません。ボタンをクリックしてみると……
問題なく接続されていれば、このようにカメラからの画像がブラウザの画面に表示され、十字キーでロボットを操作することができます。他にもゲーミング用のWASDキーでの操作や、LeapMotionでの操作に加え、スマホなどからは画面をなぞることでバーチャルジョイスティックによる操作をすることもできます。
トラブルシューティング
ラズパイが起動しない
- ISOの書き込みがきちんとできているか確認
- 電池を満充電のものと交換してみる
- SDカードが壊れてしまっていないか
起動したようだが「シグナリング動作」が行われない
- WiFiのアクセスポイント名とパスワードの確認
- SkyWayのAPIキーの確認
- モーターとモータードライバの物理的な接触不良はないか
ブラウザでボタンを押しても接続後すぐに切れて「シグナリング動作」を繰り返す
- カメラモジュールの故障または接触不良
操作に大幅な遅延がある
- ロボットとコントローラを同一のLAN内で動かしてみる
ロボットがキー操作と逆の動作をする
- 前後逆になってしまう場合は、
/boot/robot.json
の中にあるreverseをtrueにする - 左右逆になってしまう場合は、
/boot/robot.json
の中にあるab_swapをtrueにする
最初からロボットとの接続が確立できず起動後すぐに暴走してしまう
- セメント抵抗の値を大きくしてみる
- どこかで端子がショートしていないか確認
接続後しばらくして操作に反応しなくなり暴走してしまう
- 電池を新品に交換する
- 電源用USB接続を併用する
その他、うまく動かない……
- Twitter @harmoniko 宛にDM、もしくは
メールで ukok(at_mark)dotstud.io までお気軽にご質問ください。
まとめ
いかがでしたでしょうか?
今回は、最初からプログラムを書くとやはり難易度が高くなってしまうので、ロボットをOSイメージとして配布してみました。もし余力のある方は、ホームフォルダにあるapp.js
がロボットの本体ですので、ぜひご自身で色々とさわってみてくださいね。