satofumi のすべての投稿

Moai SDK でゲームを作ろう(Linux 上でサンプルを動作させる)

Moai SDK はホスト環境でも動くようなので、まずは Linux(Ubuntu) で動作させようと思う。

下記のリンクに手順が書いてあるけど、要は普通にビルドすれば良いらしい。
http://franciscotufro.com/2013/01/compiling-moai-on-linux/

私の場合、以下のコマンドでビルドできた。

apt-get install libxmu-dev
git clone git://github.com/moai/moai-dev.git
cd moai-dev/
git checkout linux
cd cmake
cmake .
make

そして、動作確認としてサンプルの anim-basic を動作させた。

cd moai-dev/samples/anim/anim-basic
../../../cmake/moai/moai main.lua

moai_2013_1231_anim-basic

サンプルの実行方法は、実行したいサンプルのディレクトリに移動して、moai の実行バイナリに main.lua を渡せばよい。

次は Android の実機でサンプルが動作するのを目指したい。

Moai SDK でゲームを作ろう (調査してみてわかったこと)

Android 向けのゲームを作るにあたり、いろいろ調べた結果 Moai SDK っていうのが良さそうに思った。

  • Android, iOS, Chrome 用の 2D ゲーム向けのフレームワーク
  • C++ でクラス作って Lua で操作するような作りになっている
  • オープンソース(ライセンスはゆるめの CPAL)

で、Kindle で Moai SDK の書籍(英語)も買って読んで「いいなー♪」とか思っていたが…、もう少し調べたいたところ大変なことがわかった。

「Moai SDK っていうプロジェクトは、もう息してない…」

下記のリンク先が詳しい内容だけど、要約するとメインの開発者が「もうええわ!」って感じで更新しない宣言をしたらしい。確かに github 上のソースも数ヶ月くらい更新ないし…。

http://getmoai.com/forums/thoughts-on-the-future-of-moai-sdk-t2012/

ただ、使うにあたっては起動ロゴに2秒以上 Moai SDK のロゴを表示するか、クレジットに表示するか、っていう要求のゆるさが気に入っているし、何より自分でフレームワークを作るよりは良いだろう、という判断のもとに Moai SDK を使ってゲームを作ってみようと思う。

次回は、実際に Moai SDK をセットアップして Linux 上や Android 上で画像でも表示するプログラムを作ってみたい。めげずに頑張る!

記録済みデータのフォーマットを Ruby で変更する

あるツールを使ってデータを記録したが、ツールに手を加えたためにデータの互換性がなくなってしまったのを「互換性がないなら、スクリプトで変更すればいいじゃない」という作業の流れを書きだしたものが、この記事です。

どういう仕組みで何を記録したのか

LMS511 という平面の距離を計測できるセンサがあるのですが、そのセンサとの通信内容を全て記録しました。通信データの記録は LMS11 から距離データを取得するために C++ で実装した Lms_driver というクラスで行なっています。

この Lms_driver クラスは Connection インターフェースを継承させていて、Connection インターフェースはセンサに対する open, read, write を提供します。そのため、Connection インターフェースの中身を差し替えることで、センサからのデータ取得、センサからデータを取得しつつログを記録、ログからデータを読み出して再生、ということが実現できます。

lms_driver_usage_2013_1228

ただ、この仕組みでデータの記録と再生を実現しようとすると Lms_driver でセンサとの通信に使っているコマンドの順番を変えると記録済みのデータが再生できなくなる、という欠点があります。今回は、いろいろ機能を追加すべく Lms_driver を変更した結果、過去に記録したデータが再生できなくなってしまいました。

行う必要があること

過去の実装から変更した点は、センサに発行するコマンドを追加した程度なので、そのセンサからの応答を過去のデータに追加してしまえば O.K. です。

実際に行ったこと

LMS511 との通信は STX, ETX が付加された以外は普通の ASCII 文字列で行われるため、Ruby スクリプトを用いて必要な箇所を置換していくことにします。

具体的に行う処理は

  • 追加したコマンドぶんの応答を追加
  • データ取得コマンドの変更による、データ先頭のコマンド文字列の置換

くらいかな。
改めて書きだしてみると、大したことはないですね。作成するスクリプトの方針としては、引数で与えたファイルの内容を読み込んで、置換でどうにかすることにします。

まず、引数で与えたファイル名を読み出すあたりまでの実装は、こんな感じでしょうか?

# -*- coding: utf-8 -*-
# LMS のログデータを変換するスクリプト

# 引数で渡されたファイルを順に処理する
ARGV.each { |log_file|
  original = File.open(log_file).read

  # コマンドの応答を追加する
  # !!!

  # 必要な置換を行う
  # !!!
}

次に、置換まわりのコードを追加します。(コードの一部の通信データを省略しています)

# -*- coding: utf-8 -*-
# LMS のログデータを変換するスクリプト

# 引数で渡されたファイルを順に処理する
ARGV.each { |log_file|
  converted = File.open(log_file).read

  # 最初のコマンド応答の部分を切り取る
  converted.sub!(/.+?/, "")

  # 必要な置換を行う
  converted.gsub!(/sRA/, "sSN")

  # 最初のコマンド応答を追加する
  converted = "sRA (省略) sEA LMDscandata 1" + converted

  # ファイル名を変更して出力する
  output_file = "converted_" + log_file
  File.open(output_file, "w").write(converted)
}

いつものことですが、実際に手を動かしてみると簡単です。
個人的には、面倒くさがらずに簡単ならもう少し早く取りかかれるようになりたいのですが「怠惰」はプログラマにとって美徳なので悩ましいところです。

まとめ

これからは怠惰な気持ちで楽することを考えつつも、実際には怠惰にならないようにする。

東北ずん子の痛 Suica を作ってみよう (完結編)

前回までのあらすじ

痛 Suica を作ろうとして会社のプリンタを買い直した。

というわけで、プリンターが届いたので作業を再開する。

new_printer_2013_1227

というか届いたプリンターを見て「最近のプリンターは安いのに色々と機能が付いててスゲー」と思ったり「こんなに安くて大丈夫か?」とか思ったりした。

で、セットアップを終えてから前回に作った痛 Suica のシートを印刷してみる。

suica_printed_2013_1227

いい感じです。
ちなみに同時刻の同僚はプリンターで回路パターンを印刷し、さっそく感光基板を作ってました…。うーん、ここでゲーテの表現を借りるなら

「感光基板を作る社員のとなりで 痛 Suica を作る社員がいてもいい。それが自由というものだ」

とか思ったりしました。
まぁ、作業を進めます。あとは、このシート(A-one 品番: 29281) を Suica に貼り付けてラミネートフィルムを貼り付けたらおしまいです。このあたりの手順は下記ページを参考に行いました。

痛Suicaの作り方
http://itaicard.com/%E7%97%9Bsuica%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/

で、できたものがコレ。(実は微妙に気泡が入ってしまっています)

zunko_suica_2013_1227

前回からの作業も含めると色々と試行錯誤しましたが、それっぽく出来上がりました。今回の作業で得られた教訓としては

  • 簡単だと思っていることでも、実際に試しておいたほうが良い。
  • 新しいことをやると知識が増える。
  • フリー素材は人を動かしうる。

などでしょうか。
この知見は以降の業務でも生かしていきたいと思います。

東北ずん子の痛 Suica を作ってみよう (挫折編)

この記事では「せっかくだから 痛 Suica でも作ってみるか!」と思って作り始めた結果、色々と試行錯誤することになった様子を紹介できれば、と思います。

まず、テーマを探しました。せっかくなので「東北ずん子」で。
探すと、幾つかの候補が見つかります。

画像をダウンロードしたら、まずは印刷したときの大きさが Suica と一致するかを確認するために、印刷してみます。

suica_too_large_2013_1225

はい。大きすぎますね。
確認したところ「画像をフレームに合わせる」にチェックが入っていたのが原因でした。orz
気を取り直して、チェックを外して印刷してみます。

suica_too_small_2013_1225

うん。今度は小さすぎるかな!
何か原因があるように思うのですが、よくわかっていません。なので画像を拡大して対応しました。あと、Suica の絵を印刷する A4 のシートに1枚しか印刷しないのはもったいないので、いくつかの画像を配置して印刷してみます。

suica_gray_all_2013_1225

なんか、いい感じ。
(画像を複数ならべるのは Excel に画像を貼り付けることで実現しています)

ただ、プリントした画像を定規で測った結果、実物よりも少し小さかったので、印刷する画像を拡大して対処したりしました。プリンタの設定を変更してサイズ調整するのが良いのだと思いますが、 あきらめました。(設定方法がわからなかった!)

で、実際に Suica に貼るためのシートに印刷するために、カラーで印刷してみたところ、こんな感じに。

suica_color_2013_1225

ぱっと見よさそう。
と思ったものの、よく見ると…

suica_color_clip_12013_1225

単色のはずの緑の面が、かすれてる…。

この問題はプリンタ側の問題のようです。プリンタのヘッドクリーニングをしても改善されないので、同僚と相談した結果プリンタを新規に購入する方針になりました。印刷したパターンを感光させて回路基板を作るときにも困るしな。以下、プリンタを注文する前の社長から許可をもらったときの会話。(社員は全員で 10 人くらい、だっけ?)

私「あ、(社長) さん。プリンターなんですけどー、インクの出が悪くてエッチングで回路基板をつくるときとかに不都合があるんで、新しいの買ってもいいですか?」
社長「おう、いいよ。必要なら遠慮なく買って」

というわけで、社長に了承を取ったので遠慮なく注文した。
プリンターが届いたら作成の続きをしようと思う。

簡単だと思っていたことでも、実際にやってみると色々ある。ということが理解できただけでも有意義だった。

SDL で Android ゲームの開発 (画像が表示できた)

下記サイトを参考にした結果、Android タブレットに画像を表示させることができた。
http://www.dinomage.com/2013/01/howto-sdl-on-android/

このサイトと SDL リポジトリの SDL/README-android.txt に、ここまでの手順が書いてある。でプログラムを実行して Android タブレット(Nexus 7) で表示したところ、

Screenshot_2013-12-22-22-53-59

色が変だ…。
悩みつつ調べてみた結果、Gimp で png を bmp に変換するときに 24 bit を指定することで適切な色になった。

Screenshot_2013-12-23-01-48-20

gimp_bmp_setting_2013_1223

色についての詳しいことは、後でいいので調べて理解したい。

ここまでのソースコードは、下記プロジェクトで管理中。
https://bitbucket.org/satofumi/zunda_farm/src/67b09f285031/example/draw_image/?at=default

「赤城さんのお風呂タイマー」用のテーマを作ってみよう!

「赤城さんのお風呂タイマー」のテーマとは

「赤城さんのお風呂タイマー」用のテーマの作成方法の紹介です。テーマとはツールにキャラクター等の画像を配置する仕組みで、このツール専用の「伺か」のようなものです。

zunko_setup_screenshot

 

テーマを作ってみる

  1. まず、これがテーマを作るために今回用意したサンプルファイルです: sample_theme
  2. このファイルを展開したフォルダを bath_timer-0.1.6\theme\ に配置します。
  3. bath_timer-0.1.6\theme\sample_theme\build.bat を実行します。
  4. bath_timer-0.1.6\theme\sample_theme.dat ができていれば成功です。
  5. ツールを起動し直すとテーマ一覧に Sample Theme が追加されます。

sample_theme_list

テーマを構成するファイルと役割

ここまででテーマが作成できました。 次は、このテーマを変更できるようにするために、構成するファイルの内容を説明します。

?README.txt
「テーマについて」 の前半に表示されるメッセージです。

COPYING.txt
「テーマについて」 の後半に表示されるメッセージです。

logo.pngテーマ一覧に表示される画像です。

resource.yaml
アニメーションなどの定義を行っている YAML ファイルです。
Image: Background … テーマの最も後ろに表示される画像のファイル名です。
Image: Parts … 表示する画像のファイル名と表示位置を定義しています。Cell: … アニメーションのセルに相当します。重ねて表示する画像を定義します。
Pattern: … セルと表示ミリ秒の組み合わせでアニメーションを定義します。

events.lua
ツールが操作されたときに呼び出される関数が記述された Lua スクリプトです。
例えば、ツールがクリックされたときの処理は
function single_clicked(theme)
theme:set_pattern(“normal”)
end
となっており、normal のアニメーションの開始を指示しています。

最後に

ちゃんとしたテーマエディタを作ろうとしたのですが、紹介だけになってしまいました…。
わからないことや希望があればコメントを下さい。なんとかします。

SICK LMS5xx 用の C++ ドライバの作成 (マルチエコーを扱えるようにした)

LMS511 用に開発している C++ ドライバの Lms_driver で、マルチエコー情報を扱うあたりを実装した。

lms_viewer_2013_1217
2エコー目の距離が水色で表示されている

とりあえずは利用できるようになったので、ここまでの実装を hrk_lidar という名前のライブラリとして公開した。URG や LMS センサ用の C++ ドライバで Windows, Linux, Mac で動作する。

hrk_lidar, Lidar_viewer パッケージのダウンロードページ
https://bitbucket.org/satofumi/hobby_robot_sdk/downloads

ドライバの細かな修正は、使いながら行っていきたい。
あとは、このドライバで利用している Viewer も Lidar_viewer という名前のパッケージにして公開した。(Windows 版 binary は Lidar_viewer_win? という名前)

今後は、前回の実験で取得したデータを解析するあたりを行いたい。

Android 開発環境の構築 (Linux)

Android 環境を Linux に構築した。構築方法は本家サイトを見れば十分だった。

Android NDK の hello-jni をサンプルが無事に動作した。

Screenshot_2013-12-14-20-22-36
Nexus 7 で動作させたときのスクリーンショット

開発環境が構築できたので、次は Android デバイスに画像を表示するあたりのサンプルを作ろうと思う。

「ひびきカレー」だよ

毎週金曜日のお昼は、会社のメンバーで作ってきたカレーを食べることにしていて、今週は私がカレー担当だった。

今週は、海上自衛隊レシピページより「ひびきカレー」を作ることにした。

今回のカレー作成プロジェクトは、

  1. 金曜日のお昼に食べるので、一晩寝かせるために 12 日夜に完成させる。
  2. 牛肉をワインに漬けて1晩寝かせるために 12日の夕方までに牛肉を準備する。

といった感じで進めた。
夕刻に

私「あ、買い物に行ってきます」

と言って夕刻に会社を出て牛肉や他の食材を購入。会社は調理禁止らしいので、自宅に帰って下ごしらえをした。

P1000534
赤ワインに漬け込んだ牛肉
P1000535
水にさらされまくってるジャガイモ
P1000536
厚めのいちょう切りにしたニンジン
P1000532
生姜とニンニクのみじん切りと、玉ねぎを切ったもの
P1000537
牛肉と玉ねぎを痛めている様子

で、フライパンから材料を鍋に移してしばらく煮込んでいたわけだが、この「ひびきカレー」は隠し味の1つとして白桃のみじん切りを混ぜるらしい。
カレーに白桃とか入れたことなかったので、少しビビりながらも刻んで入れる。

P1000541
白桃 Before
P1000542
白桃 After

そして 13 日(金) の朝、ぶっちゃけ深夜にカレー作ってて眠かったので、以下のようなやりとりをチャットで行ってから出勤した。

curry_chat_2013_1215

「2度寝って、恐ろしいですね!」

ともあれ、昼にお客さんも交えて食べたカレーはおおむね好評だった。
ただ、8皿ぶん作ったのに4人で完食したのは想定外だった。作る量に関しては再度検討が必要かもしれない。

最後になったが、海上自衛隊のみなさん、ありがとう!