僕は発展途上技術者

Sphero を Scratch(スクラッチ)から動かせるようにしたのでこどもでもプログラミングできるよ

このエントリーは Sphero Advent Calendar 2013 の3日目のエントリーです。

【日本正規代理店品】 Orbotix Sphero 2.0 white S003AS(JP)
Orbotix (2013-09-26)
売り上げランキング: 1,089


» ロボティックボール Sphero 2.0 が楽しすぎる

で予告したように、Sphero を Scratch(スクラッチ)から動かす方法を紹介したいと思います。

スクラッチは MIT が開発した教育用プログラミング言語で、ブロックを並べることで、こどもやプログラミング経験がない大人でも楽しくプログラミングできます。こども用と侮るなかれ、マリオやテトリス、頑張ればドラクエライクなゲームだって作ることができます。

スクラッチの Remote Sensor Protocol という仕組みを使うことで TCP ポートを経由して外部との接続が可能なことを利用して、Sphero とつなげるプログラムを書いてみました。

ちょうど、前日の Sphero Advent Calendar の2日目のエントリー、

» Sphero gem で Sphero を操作してみる

で紹介されている Ruby の Sphero gem を使います。

動かした環境は MacOSX 10.8.5 です。スクラッチは 1.4 を使います。

まず hybridgroup-serialport gem と sphero gem をインストールします。


% gem install hybridgroup-serialport
% gem install sphero


あるいは


% sudo gem install hybridgroup-serialport
% sudo gem install sphero


次に、コンピューターと Sphero を Bluetooth で接続します。これは通常の Bluetooth ペアリング設定です。Bluetooth 設定アシスタントより Sphero に接続しましょう。

このあたりは、Sphero gem で Sphero を操作してみるのエントリーに詳しく載っています。

次にスクラッチと Sphero とをつなぐ

» scratch2sphero


をインストールします。


git clone git@github.com:champierre/scratch2sphero.git


インストールできたら、scratch2sphero を起動する前にスクラッチを起動しておきます。Scratch 1.4 をインストールしていない場合は、Scratch 1.4 のダウンロードページより MacOS X 版をダウンロードおよびインストールします。

スクラッチを起動したら、「調べる」カテゴリーを選び、「スライダーセンサーの値」ブロックの上で右クリックして、「遠隔センサー接続を有効にする」を選んで「遠隔センサ接続」を有効にしておきます。



いよいよ scratch2sphero を起動します。


% ruby scratch2sphero.rb


このとき


serialport.rb:22:in `create': Resource busy


というエラーが出るかもしれませんが、あきらめず何度かやり直してみます。

Sphero が点滅から青く光るようになれば接続成功です。

スクラッチの画面で、「制御」カテゴリーから『「◯◯」を送る』ブロックを選び、真ん中のスクリプトエリアにドラッグして置きます。



scratch2sphero と接続したことによって backward/forward/left/right のメッセージを送ることができるようになっているので、どれかを選び、ブロックをクリックしてメッセージを送ってみましょう。Sphero を動かすことができます。

このメッセージが TCP ポートの 42001 番を経由して Scratch2Sphero に渡され、Scratch2Sphero が sphero gem を使って Sphero を動かしています。

また、スクラッチで変数「speed」(0 から 255 まで)と「initial_heading」(0 から 359 まで)に値をセットすることで、それぞれ、Sphero のスピードと Sphero の forward を受け取った時に進むデフォルトの方向を変えることができます。各変数は「変数」カテゴリーで「新しい変数を作る」をクリックすることで作ることができます。

これらを組み合わせ、たとえば Sphero をジグザグに進ませるプログラムはこんな感じで書けます。



こどもでも Sphero をプログラミングできるようになる、ということが大げさでない証拠に、小6息子が Sphero を動かしている模様を動画で撮りました。



Sphero についてもっと知りたい場合は、こちらを参考に。

» ロボティックボール Sphero 2.0 が楽しすぎる

» ころころ可愛い♡なのに高性能!Orbotix Sphero 2.0 が面白い #sphero #gosphero

Sphero Advent Calendar 2013は明日以降まだ埋まっていないところをみると、日本ではまだあまり注目されていないんでしょうか?

以下の Amazon リンクから買えるので、ぜひ Sphero 2.0 を手に入れて Advent Calendar にブログ記事を書きましょう :-)

【日本正規代理店品】 Orbotix Sphero 2.0 white S003AS(JP)
Orbotix (2013-09-26)
売り上げランキング: 1,089

ロボティックボール Sphero 2.0 が楽しすぎる

PV を見て思わず Amazon で衝動買いしてしまったロボティックボール Sphero 2.0 が楽しすぎる。

【日本正規代理店品】 Orbotix Sphero 2.0 white S003AS(JP)
Orbotix (2013-09-26)
売り上げランキング: 1,089


こちらがその PV です↓



Amazon で購入したら翌日には届きました。

ブルーのカバーも合わせて購入↓


こういうガジェットにありがちな英語の説明書一枚にテキトーな包装でくることを予想していたら、思いのほかちゃんとした立派な箱でびっくりしました。しかもちゃんと日本語化されている。説明書もちゃんと数ヶ国語に翻訳されている。充電器のコンセントに差す部分も、だいたいどこの国にも対応できるよう4パターンくらい用意されたアダプタをつける方式で、すでにいろんな国で販売されている様子が伺える。

こどももいるし、結構荒っぽい使い方をしたいと思ったのであわせてブルーのカバーも買ったのだが、自由に変えられる本体の色がわかりにくいので、あとになって透明なカバーにすれば良かったと後悔。

bluetooth 経由で iPhone や Android 専用のアプリからコントロールできる。うちは iPhone だが、セットアップは難なくできて、すぐに動かせるようになりました。

さっそく自宅近くの公園で遊ばせていたら、ワラワラこどもたちが寄ってきて、「これどこで買ったの?」「いくらするの?」の質問責め。本体は頑丈なので心配ないのだが、コントローラーとなる僕の iPhone 5S をこどもたちに貸していたら、もう興奮し過ぎてこどもたち同士の取り合いになりそうだったのでヒヤヒヤ。Sphero のコントローラー用には、耐衝撃カバーがついた古い iPhone を使ったほうが良さそうだと思いました。

PV にあるように完全防水で水の上でも走るので、風呂でも遊ばせることができる。どこか公園の池などで遊んでみたいのだが、電池切れ or 故障で動かなくなったときに、最悪取りに行けるような池というとそうなくて、まだ手頃な池がみつかっていない。

付属のジャンプ台でジャンプさせるのが、これまた楽しくて、iPhone 5S のスローモーションカメラで撮影しながら、息子たちと延々遊んでいます。





さらに、開発者にとってうれしいのは、API が公開されているため、いろいろとハックできるところ。さっそく Scratch でコントロールできるようにしてみました。



簡単に Sphero の動きをプログラミングできるので、自動操縦が思いのまま。

コントローラーのプログラムのscratch2spheroをgithubに公開し、詳細はSphero Advent Calendar 2013に登録した次のエントリーで紹介する予定です。

いやあ、こどもも大人もこれだけ楽しめるおもちゃはなかなかないです。いい買い物をしました。

【日本正規代理店品】 Orbotix Sphero 2.0 white S003AS(JP)
Orbotix (2013-09-26)
売り上げランキング: 1,089

iOS7 に対応したマンホールマップ 1.0.3 をリリースしました

マンホーラー(マンホール好きな方々をそう呼ぶそうです)必携のアプリ、「iOS版マンホールマップ」を iOS7 に対応させました。




» マンホールマップ - iTunes - Apple

1.0.2 までのバージョンだと iOS7 では起動してすぐクラッシュしてしまうので、本日より AppStore でダウンロードできる 1.0.3 へのアップグレードをお願いします。

前のバージョンからすでにそうだったのですが、マンホールマップは今は、@s5ot さん(ブログ: s5ot.send(:blog))が開発してくださっています。

@s5ot さんはRubyMotion で作ったマンホールマップをメンテしてくれる方を募集しますという無茶な募集にすぐさま応募してくださり、募集した翌日にはお願いすることを決めました。

地図画面はサクサク動くようになり、住所を入力して検索すればその場所に移動できる「住所検索」もできるようになって使い勝手が格段に良くなりました。素晴らしいです。

また、1.0.2 よりアプリからもマンホール写真を投稿できるようになっているので、いままで閲覧専用で使っていた方も、お気に入りのマンホールを見つけたらその場で投稿するのにお使いください。

「勉強しかできないバカにならない方法」- フジテレビ「全力教室」の茂木健一郎氏の回をみての感想

フジテレビ「全力教室」の茂木健一郎氏の回を観た。


「勉強しかできないバカにならない方法」というテーマの元に、現役東大生たちを相手に授業を行う。授業前のインタビューで、「一発、やってやりたい。彼らが持っているプライドを申し訳ないけれど、ズタズタに壊したい!」


» 講師に、茂木健一郎が登場!現役東大生たちを相手に、熱血授業を展開!『全力教室』

テレビで久々に心動かされた内容でした。

僕自身、筑波大学附属駒場 -> 東大 という絵に描いたような偏差値教育を体験してきて、「勉強しかできないバカ」というのは非常によく分かるところ。

「勉強しかできないバカ」というのは、ペーパーテストで判定可能な決まりきった問題を解決する処理能力はめっぽう強いが、それに比してテストでは優劣を判定できない想像力だとか創造する力が著しく低い、ということを指していると思っている。

入社した会社はそこそこ大きく、新人研修は約一年間おこなわれ、たとえば英語研修ならばTOEICで評価される。「択一式の答えの正解の部分がボーッと光るように見える」などと冗談を言っていたくらい、ペーパーテストは得意中の得意。業務が始まっても、新人の頃というのは決まりきった仕事しかしないので、そつなくこなせていたと思う。

でも偏差値教育の効果が発揮されたのはここまで。

その後、アメリカに本社を持つソフトウェア会社の日本支社に転職、そのソフトウェアの会社のアメリカ本社に転籍、ITベンチャーに転職、独立、と僕の人生が進んでいき、解き方が決まっていない問題ばかりの世界になっていくと、自分なんてほんと大したことないなと、すごい奴なんてゴロゴロいる、という感覚を持つようになった。

自分が通ってきた道に反して、来年中学生になる長男には中学受験はさせず近くの公立中学校に通わせる。旅人算や時計算、ニュートン算なんかよりも、Scratch(MITが開発した教育用プログラミング言語) をやったり、合気道やサッカー、キャンプしたり、ボルダリングをやったりというほうが大事だと思っているからなのだが、これがなかなか勇気が必要だったりする。まわりのこどもたちは塾に通っていたり、あるいは僕の親からは心配される。

「こどもたちは将来ますます解き方がわからない問題ばかりに直面する。それゆえに中学受験から始まる偏差値教育には問題がある」という強い信念を持ち続ける必要があるのだが、まさにその部分を「全力教室」の茂木健一郎氏が力強く擁護してくれたように思う。

「Googleが日本のIT教育支援、5000台のRaspberry Piを提供へ」に対してもやっと感じていること

いま Raspberry Pi が熱い。


「これが、日本が変わる第一歩になる」(Google会長 Eric Schmidt氏)---Googleは2013年10月29日、日本のコンピューターサイエンス教育を支援するプロジェクト「コンピュータに親しもう」を開始すると発表した。ワンボードコンピュータ「Raspberry Pi」(関連ページ:ITproまとめ - Raspberry Pi)を5000台提供、NPO法人CANVASと協力し、1年で2万5000人以上の児童・生徒の参加を目指す。


» Googleが日本のIT教育支援、5000台のRaspberry Piを提供へ、Schmidt会長も“授業”より

これ自体はとてもいいニュースなんだが、何かこうもやっとしたものをずっと感じているのでそれを書いてみたい。

Raspberry Pi 標準の OS の Raspbian に始めから入っている Scratch とセットで語られているので、よくわかっていない人には「簡単に始められる」という印象を与えてしまいがち。しかし「簡単にできますよ」とはどこにも書かれていないし、実際簡単ではない。

Scratch は簡単(小学生低学年でもできるという意味での簡単ということです)というのはまあ一度でも触ったり、それを使いこなすこどもを見たことがあれば同意できると思う。でも Raspberry Pi は、しばらく実際に触ってみたが、僕でもてこずる。

なにせ購入してすぐ起動してみたが、ディスプレイに画面を映すことができず3ヶ月くらいは放置していたほど。

仮に熱心な親がこどものためにと思って Raspberry Pi を買ったとして、Scratch でもなんでもいいが起動できるところまで到達できるかは微妙。ただ、そこで親が投げ出したあと、「これ、好きにしなさい」とこどもに丸投げしたあとがチャンスといえばチャンス。

そこから自力で、環境を整え Raspberry Pi を自在に操ることができるようになったこどももきっと現れるはずで、その子はもうそのままスーパープログラマーへ一直線。Google でもどこでもやっていけるくらいになるだろう。

以下を読めばシュミット氏はそのあたりわかっていそう。100人に1人かあるいは1000人に1人かはわからないけれど、何人かはGoogleに入れる級のエンジニアに育てばいい、とも読める。


追記

その場にいた阿部先生からの指摘を受けました。シュミット氏もそんなに乖離していたわけではないとのことですが、この発言自体は日本法人の広報部長のものだそうです。なおシュミット氏の見解についてはこちらが参考になる -> https://plus.google.com/u/0/+EricSchmidt/posts/J4KT3Wy6gmy





じゃあそうでない人には意味がないかというと全くそういうわけじゃなくて、結局いつも最後はこういう結論になっちゃうんだけど、ちょっと楽しそうだなと興味を持ったらやったらいいんじゃないかと思う。実際楽しいし。

僕が小中学生のときには50万近くもしたから自分のパソコンなんて買おうとも思わなかった。でも Raspberry Pi は 30 ドルぽっちなんだから。

Mac OS X Mavericks にアップデートしたら bcrypt-ruby gem がインストールできなくなったときの対処法

brypt-ruby に限らずだと思うのだが、Mavericks にアップデートし、bundle install で


Installing bcrypt-ruby (3.1.1)

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.


というエラーがでたときの対処法。

» error: failed to build gem native extension when installing rails on mac mountian lion os

によれば gcc-4.2 が /usr/bin にないからだ、とのこと。


# brew update
# brew install apple-gcc42
# sudo ln -s /usr/local/bin/gcc-4.2 /usr/bin/gcc-4.2


をおこなってから再度 bundle install でうまくいった。

Mavericks は無料になったけれど、OS のアップデートをすると、たいがい2、3日はそれまで動いていたものの修復に追われるので、人件費考えると依然高い。



Raspberry Pi で自動でデスクトップを起動し、さらにスクラッチの特定のプロジェクトを開く方法

Raspberry Pi で

1. 自動でデスクトップを起動する
2. 自動でスクラッチを起動する
3. 自動でスクラッチの特定のプロジェクトを開く

の 1 あるいは 2 の方法は調べるといくつか方法がみつかるのだが、3 まで実現できる方法がなかなかみつからない。

いろいろ試行錯誤した結果、以下の方法が一番簡単で確実だと思う。


# sudo raspi-config


を実行し、 3. Enable Boot to Desktop/Scratch を選択、次の Chose(typo??) boot option のメニューで、2番目の Desktop Log in as user 'pi' at the graphical desktop を選ぶ。

これで一旦 raspi-config を抜ける。まだ設定すべきことがあるので、抜けるときは reboot をしないで抜けること。

これで 1. の「自動でデスクトップを起動する」はクリア。

残りを実現するには、


# sudo vi /etc/xdg/lxsession/LXDE/autostart


で autostart の中身を以下の通り編集する。


@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash
@scratch presentation /home/pi/myproject.sb <-- この部分を追加


/home/pi/myproject.sb は起動したいスクラッチのプロジェクトファイル。

これでデスクトップを起動した直後、スクラッチをプレゼンテーションモードで開き、特定のプロジェクトを開くことができる。

Raspberry Pi の Minecraft(Minecraft Pi)の画面のスクリーンショットを撮る方法

Raspberry Pi の Minecraft(Minecraft Pi)の画面は、ハードウェアアクセラレーションを使ってるとかで、通常の方法ではスクリーンショットを撮ることができない。

imagemagick の import コマンドを使ったり、フレームバッファからスクリーンショット画像を取得する fbgrab などを試してみたのだがうまくいかない。Minecraft の画面だけ真っ黒になってしまうのです。

で、たどりついたのが、

raspi2png

この raspi2png を使ってみたところ Minecraft の画面も含め、ちゃんとキャプチャすることができました。



インストールの手順は以下のとおり。


# cd [any folder]
# wget https://github.com/AndrewFromMelbourne/raspi2png/archive/master.zip
# unzip master.zip
# cd raspi2png-master
# sudo apt-get install libpng12-dev
# make





# ./raspi2png


を実行すると、snapshot.png というファイルに全画面のキャプチャが保存される。

raspi2png のオプションについては、https://github.com/AndrewFromMelbourne/raspi2png の README を参照してください。

この話題は Raspberry Pi のフォーラムにもあがっていたので、リプライを残しておきました。

» Minecraft & Raspberry Pi

OS X Mavericks にアップデートしたら Vagrant が起動しなくなった場合の対処方法

OS X Mavericks にアップデートしたところ、Vagrant が起動しなくなった。


% vagrant up

(途中略)

[default] Clearing any previously set network interfaces...
There was an error executing the following command with VBoxManage:

["hostonlyif", "create"]

For more information on the failure, enable detailed logging by setting
the environment variable VAGRANT_LOG to DEBUG.


» Fixing Vagrant after an OSX Mavericks update

を参考に


% sudo /Library/StartupItems/VirtualBox/VirtualBox restart


で解決。

Scratch で Minecraft を動かす(その2) - Scrath と Minecraft をつなげよう

Scratch で Minecraft を動かす方法を何回かに分けて解説していきます。

前回のエントリーは、

» Scratch で Minecraft を動かす(その1) - Raspberry Pi なしで Minecraft API を使ってプログラミング

です。

[2016/2/21 追記] 現在 CraftBukkit はメンテナンスされなくなっており、下記リンク先からはダウンロードはできないのですが、アーカイブなどを保存しているサイトが他にあります。あくまで自己責任でこれらからダウンロードして利用する方法を含め、他の手順についても詳しく次の YouTube 動画で紹介されていますので良かったら参考にしてください。 → 6歳からのプログラミング #1 〜minecraft×scratch〜 CraftBukkitとRaspberryJuice

scratch2minecraft をダウンロード



Scratch と Minecraft をつなぐブリッジプログラム scratch2minecraft を書いたので、それをダウンロードします。

作業フォルダ(~/python)以下で


git clone git@github.com:champierre/scratch2minecraft.git


と実行してソースコードをダウンロードしてください。

git が使えない方は https://github.com/champierre/scratch2minecraft の右下の Download ZIP ボタンを押してダウンロードできる scratch2minecraft-master.zip を解凍してください。

なお scratch2minecraft はまだ絶賛開発中です。いまのところマインクラフト内のプレイヤーを任意の位置に移動させるのと、任意の位置にブロックを作ったり消したりしかできないですが、順次できることを増やしていくつもりです。

minecraft api のフォルダ mcpi をコピーする



前回のエントリーで用意した mcpi フォルダを scratch2minecraft フォルダ以下にコピーします。

mcpi は ~/python/minecraft 以下にあると思うので、ターミナルより


cp -r ~/python/minecraft/mcpi ~/python/scratch2minecraft/


と実行することで、コピーできます。

Scratch から Minecraft へ Hello World



いよいよ Scratch と Minecraft とをつなげてみます。

起動していなかったら、CraftBukkit サーバーを起動し、Minecraft を CraftBukkit に接続します。(前回のエントリー参照)

Scratch を起動し、遠隔センサー接続を有効にします。



scratch2minecraft のフォルダに移動し、


python main.py


を実行して、 scratch2minecraft を起動します。

このとき、Scratra -> Connected と表示されれば Scratch との接続成功ですが、Scratch で遠隔センサー接続を有効にし忘れたり、あるいは Scratch を起動する前に scratch2minecraft の方を先に起動してしまったりすると接続に失敗して無反応となってしまいます。

その場合は Ctrl + Z で suspend させてから、


ps auwx | grep main.py


で main.py のプロセス番号を調べて、そのプロセス番号を kill してからやり直してください。

接続が成功していれば、Scratch から Minecraft にメッセージを送ることができます。

Scratch で「hi を送る」ブロックを作り、クリックしてみましょう。



Minecraft のチャットウィンドウに hi minecraft と表示されれば成功です。



Scratch からの命令でブロックを積み上げる



次に Scratch からの命令でブロックを一つ置いてみます。

「setBlock を送る」ブロックを作り、クリックしてみましょう。



すると、プレーヤーが立っていた場所にブロックが一つ置かれます。

今度は、塔の形になるようブロックを縦に積み上げてみましょう。

その前に Minecraft の世界の座標系について簡単に説明しておきます。Minecraft の世界では平面上の位置はx軸とz軸との座標で表され、高さはy軸の値で表されます。たとえば、x=0 y=0 z=0 の位置にブロックが置いてあったとして、そのすぐ上にブロックを置きたければ x=0 y=1 z=0 の位置にブロックを置きます。そのすぐ真上に置きたれば x=0 y=2 z=0 という具合です。

つまり、縦にブロックを積み上げたければ、y の値をどんどん大きくしていきながらブロックを置き続ければいいのです。

さきほど Scratch からブロックを置くときには、「setBlock を送る」をおこなっただけでしたが、その前に Scratch の変数の x、y、z に値をいれれば、指定された値の座標にブロックを置くことができます。

座標を指定しながらブロックを積み上げるとして、まずはプレーヤーが今いる場所の座標を知っておく必要があります。

「getPos を送る」とプレーヤーの現在位置の座標がチャットウィンドウに表示されます。





x=24 y=8 z=13 ということなので、その場所にブロック100個分の高さの塔をつくるには、以下の通り Scratch でプログラムを組みます。

ここで少し注意が必要なのですが、「setBlock を送る」の後に少しの時間待つようにしないとうまく命令を送ることができません。ここでは「0.1秒待つ」のブロックを置いています。



実行してみましょう。

一瞬のうちに塔が。。



あまりに高いので少し遠くから眺めます。



手作業で積み上げるよりもずっと楽です。

ここまでの一連の作業を動画で記録しました。



次のエントリーではもう少し複雑なプログラムを作ってみます。

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Raspberry Piではじめる どきどきプログラミングを書きました。

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Twitter @jishiha

最近のエントリー

アーカイブ