2013年10月10日木曜日

enchantMOONで三輪オムニロボットを操作してみた

はじめに

enchantMOONで三輪オムニロボットを操作してみました。
動画はこちら。




経緯など

以前、「Firefox OSとRaspberry Piで三輪オムニホイールロボットを操作してみた」というエントリで、JavaScriptの勉強のために、Firefox OSで三輪ロボットを操作するという実験を行いました。

三輪ロボット側のRaspberry Piでnode.jsを動かし、websocket.ioを用いてFirefox OSと通信を行う、というものでした。

Firefox OS+JavaScriptという組み合わせで操作できるなら、enchantMOON+JavaScriptでもいけるのでは?というのが今回の着想です。

しかし、それほど簡単ではなかったので、以下に注意点をまとめます。

注意点

公式のsocket.io.jsでは通信ができませんでした。また、サーバーであるロボット側は前回はwebsocket.ioを用いましたが、enchantMOONに合わせてサーバー側もsocket.io.jsを用いるように変更しました(こちらは公式のものでOK)。
  • enchantMOONのバージョンはver.2.6.0 (r1880)以上を用いる
これより前のバージョンでは、つながったりつながらなかったりと、通信が不安定でしたが、ver.2.6.0では安定しています。その理由は「enchantMOONのXHRでresponseTextの末尾にゴミデータがつく」問題が、version 2.6.0で改善されたからだそうです。esmasuiさん、ありがとうございます。

ソースの構成など

enchantMOON側のソースの構成は下記のようにしました。

hack.js
main.js
lib/MOON.js
lib/socket.io.js  : esmasuiさんのもの
lib/enchant.js

タッチイベントを使いたかったので、parachesさんの『enchantMOONで「簡易版とことんぷよぷよ」を遊べるようにしてみた』を参考にenchant.jsを使ってみました。

hack.jsの内容
importJS(['lib/MOON.js', 'lib/enchant.js', "lib/socket.io.js"], function() {

    var sticker = Sticker.create();
    sticker.ontap = function() {
        var script=document.createElement('script');
        script.src="main.js";
        script.type='text/javascript';
        script.language='javascript';
        document.body.appendChild(script);
    };
    sticker.register();
});

main.jsの内容の一部
enchant();

var URL = 'http://192.168.1.5:8888'; // サーバーのアドレス
var width = 240
var height = 320
var socket;
var game = new Game(width,height);

game.onload = function () {
    socket = io.connect(URL, {'transports': ["xhr-polling"]});

    var touchPanel = new Sprite(width,height);
    touchPanel.x = 0;
    touchPanel.y = 0;
    touchPanel.addEventListener('touchstart', function(e) {
        moonTouched(e.x, e.y);
    });
    touchPanel.addEventListener('touchmove', function(e) {
        moonTouched(e.x, e.y);
    });
    touchPanel.addEventListener('touchend', function(e) {
        stopMotors();
    });

    game.rootScene.addChild(touchPanel);
}
game.start();

function moonTouched(keyx, keyy) {
    //ここにタッチエリアに応じた処理を書く。
    //上の動画では、4つのモーターにデータを送りたいので、
    //コンマ区切りの数値を送っている。

    //例えば以下のように
    //socket.send('90,0,0,0');
}
function stopMotors() {
    //例えば以下のようにモーターを停止させている
    //socket.send('90,0,0,0');
}

コントロール画面はこんな感じです。やっつけで書きました。絵心がある人だったら、面白いコントロール画面を描けると思います。


2013年10月8日火曜日

Xperia arc/rayとGalaxy S2/S3向けFirefox OS 1.1のビルド法を更新し、ビルド済みファイルを公開した話

はじめに

10/20(日)に東京電機大学で開催されるAndroid Bazaar and Coneference 2013 Autumnで展示するために、
安定して動作するFirefox OS端末が必要になったので、これまでビルド法を公開してきたGalaxy S2/S3、Xperia arc/ray へのビルドを試してみました。
ビルド法を公開した当時とは色々と状況が変わっているので、変更点などをメモ。
ついでにビルド済みファイルを公開。

これまでの経緯

2013年の6月に、下記の通りGalaxys S2/S3、Xperia arc/ray へのFirefox OSのビルド法を公開しました。

このビルド法は、下記の構成でソースを取得してビルドするようになっていました。
  • gaia:masterブランチの最新
  • gecko:gecko-18ブランチの最新
  • gonk:android 4.0 または cyanogenmod 9

しかし、7月以降、高解像度端末では上のままでは正しい解像度でのビルドができなくなっていました。


正しい解像度(6月頃) 正しくない解像度(7月以降)


このあたりのコミットとかこのあたりのコメントを追っていくと情報が得られますが、
gaiaでの簡易的な高解像度端末への対応を削除して、
gecko(masterとv1.1.0hdブランチ)の高解像度端末への対応度を高めていくということのようです。

Xperia arcとGalaxy S2への対応

ということで、まず、Xperia arcとGalaxy S2はビルド法を下記の構成に変更しました。
  • gaia:v1.1.0hdブランチの最新
  • gecko:v1.1.0hdブランチの最新(gecko 18.1)
  • gonk:android 4.0 または cyanogenmod 9

この2つは素直な端末なのか、トラブルは少ないです。Firefox OSのバージョンでいうと1.1ですね。

gaiaをmasterにしなかったのは、変更が頻繁すぎるため、
geckoをmasterにしなかったのは、gonkをcyanogenmod 9のままにしておきたかったからです。
(cyanogenmod 9のままgeckoをmasterにすると、WifiやSIMが使えなくなったりと、残念な感じになります)

Boot 2 JCROMの方は下記のようにしています。
  • gaia:master-jcブランチの最新
  • gecko:v1.1.0hdブランチの最新
  • gonk:android 4.0 または cyanogenmod 9

基本的には上記の方法でビルドするのですが、下記のように、端末ごとにいくつか例外があります。

Xperia rayへの対応

まず、Xperia rayではgecko v1.1.0hdでの解像度の取り扱いがうまくいっていないようなので、
geckoをgecko-18、gaiaを6月末の時点のものに固定していくつか修正を加えます。
  • gaia:masterブランチの6月末+いくつかの修正(ココ)
  • gecko:gecko-18ブランチの最新
  • gonk:android 4.0 または cyanogenmod 9

Boot 2 JCROMは下記の通りです。
  • gaia:master-jcブランチの6月末+いくつかの修正(ココ)
  • gecko:gecko-18ブランチの最新
  • gonk:android 4.0 または cyanogenmod 9

Galaxy S3への対応

この中では一番解像度が高い端末なのですが、Xperia ray同様、
gecko  v1.1.0hdでの解像度の取扱いがうまくいっておらず、さらに
gecko-18でも8月以降、起動が途中で止まってしまうコードが入っているようで、
gecko-18の7月末頃のコードを利用します。
  • gaia:masterブランチの6月末+いくつかの修正(ココ)
  • gecko:gecko-18ブランチの7月末頃
  • gonk:android 4.0 または cyanogenmod 9

Boot 2 JCROMも同様です。
  • gaia:master-jcブランチの6月末+いくつかの修正(ココ)
  • gecko:gecko-18ブランチの7月末頃
  • gonk:android 4.0 または cyanogenmod 9

ビルド済みパッケージ公開について

せっかくなので今日の時点でのビルド済みファイルをダウンロード可能にしました。
下記の各端末のページでダウンロード可能です。

なお、アップデートは無効にしてあるので、OTAアップデートは飛んできません。

これは、海外から「OTAアップデートしたらカメラが使えた!」というコメントが多くて困ったためです。
OTAアップデートすると解像度が狂ったり、こちらで修正した問題点が復活したりするのでOTAアップデートすべきではないです。
そもそも非公式端末にOTAアップデートが降ってきて適用できること自体問題だと思います。

おわりに

非公式端末へのインストールなので仕方ないのですが、特にXperia rayとGalaxy S3で
ビルド時のトラブルが多いです。

Galaxy S3の場合はgaiaとgeckoを両方masterにしてFirefox OS 1.2ベースにすると
状況は改善するようなのですが、gonkをJelly Beanベースにしなければいけないので、
作業に手を付けるのはいつになるか、わかりません。

Xperia rayについては、Firefox OS 1.2にするのは難しそうだし、このあたりが限界かも?
という気がしてきました。

というわけで、おしまい。

2013年9月28日土曜日

ガンダムAGE風に改造したドロイド君の写真をまとめてみた

はじめに


twitterやGoogle+のアイコンを自分独自のドロイド君にしたい、ということで作り始めたガンダムAGE風ドロイド君。チョコチョコ作っているうちに数が増えてきて、写真もtwitterに貼ったりGoogle+に貼ったりしてたらどこに何があるのかわからなくなってきたので、一か所にまとめてみることにしました。

技術ネタ以外を書くのは初ですが、まあたまにはいいよね、ということで。

集合写真


初めて作ったタイタスドロイド。左はfigmaバッファローベルにHG ガンダムAGE1タイタスの手足をつけたもの。無改造でこの違和感のなさ。
ドロイドタイタスが気に入ったので、一気にたくさん作ったもの。一時期この写真をGoogle+のトップ画像にしていた。
Android Bazaar and Conference 2013 Spring(東京立川・明星大学)の展示にて。i'm watchというスマートウォッチでプラレールを動かしているのですが、色々持ち込んで何の展示だかわからなくしてしまうのがいつもの癖。
ガンダムAGE1フルグランサと共に、フルグランサドロイド君。これとダークハウンド、FXバーストは2つ以上のプラモデルをミックスして作っている。
最近作ったFXバーストドロイド君。周りを取り巻いているのはHG ガンダムAGE-FXバーストの付属パーツのCファンネルだけど、これが思いのほかカッコいい。今これをGoogle+のトップ画像にしてる
HG ガンダムAGE-FXバーストとFXバーストドロイド君。

個別写真とその構成


AGE1ドロイド

android mini collectibles series 02 ICEBERG
BB戦士 ガンダムAGE1
タイタスドロイド

android mini collectibles series 01 Android
BB戦士 ガンダムAGE1
タイタスドロイド(赤)

android mini collectibles series 03 Red
BB戦士 ガンダムAGE1
スパロードロイド

android mini collectibles series 02 Bluebot
BB戦士 ガンダムAGE1
フォートレスドロイド

android mini collectibles series 01 Android
BB戦士 ガンダムAGE3
FXドロイド

android mini collectibles series 02 Greeneon
BB戦士 ガンダムAGE-FX
レギルスドロイド

android mini collectibles series 01 Android
BB戦士 ガンダムレギルス
ダークハウンドドロイド

android mini collectibles series 03 Nexus
BB戦士 ガンダムAGE2
HG ガンダムAGE2ダークハウンド

このあたりからBB戦士のキットにないものを作り始めた
フルグランサドロイド

android mini collectibles series 02 Greeneon
BB戦士 ガンダムAGE1
HG ガンダムAGE1フルグランサ
HG ガンダムAGE1(短いビームサーベルのみ)

今のところ背負いものを持っているのはこれだけ
FXバーストドロイド

android mini collectibles series 02 ICEBERG
BB戦士 ガンダムAGE-FX
HG ガンダムAGE-FX バースト
アクションベース2グレー


作り方

作り方は簡単。ドロイド君の腕を切り取り、デザインナイフなどで5mm角くらいの穴を開けます。そこにBB戦士のポリキャップCを加工してはめ込み、瞬間接着剤で固めます。

頭は取り外しが容易になるよう、出っぱりをデザインナイフで削っておくと、作業が効率的に行えます。クリアタイプのドロイド君は頭が簡単に外せるのですけどね。

なお、android mini collectiblesはebayで買ってます。




おしまい


並べてみるとわかるのですが、これ結構カネかかってるよね…、ということでおしまい。

こちらもどうぞ