僕は発展途上技術者

ラズベリーパイ(Raspberry Pi) + ScratchX を使って micro:bit に天気情報を表示する

micro:bit に天気情報を表示する方法は検索するといくつか見つかるのだが、ラズベリーパイ(RSコンポーネンツのページなどから購入できる)、さらに ScratchX を使った方法はみつからなかったので調べてみた。

※補足:RSコンポーネンツは、Raspberry Piの国内総代理店です。電子工作にも使われる加速度センサなどの部品等を50万点超取り扱っており、世界32ヵ国へオンライン販売をしています。

ラズベリーパイ上の ScratchX と micro:bit をつなげるには、

» micro:bit を Scratch から操作できる s2m が日本語に対応しました

で紹介した s2m などがあるが、今回は、ワイヤレスで接続することができる jaafreitas/scratch-microbit-extension: BBC micro:bit Scratch extension を使う。

ラズベリーパイでは Raspbian OS を使っているものとし、ターミナルを立ち上げ、

$ sudo apt install nodejs npm

を実行して、Node.js と npm をインストールする。

次に、scratch-microbit-extension のソースをダウンロードし、解凍する。

$ wget https://github.com/jaafreitas/scratch-microbit-extension/archive/master.zip
$ unzip master.zip

以下の通り実行して、extension を起動するまでの準備をおこなっておく。

$ cd scratch-microbit-extension-master
$ npm install

scratch-microbit-extension と micro:bit とが通信できるように、micro:bit 側には専用の hex ファイルをインストールする。

micro:bit に USB ケーブルをつなげ、ケーブルをラズベリーパイの USB ポートに挿す。micro:bit は /media/pi/MICROBIT にマウントされるので、以下のコマンドを実行して、firmware フォルダ以下の makecode-microbit-scratch-extension.hex ファイルを micro:bit にコピーする。

cp firmware/makecode-microbit-scratch-extension.hex /media/pi/MICROBIT/

コピーしたあと、micro:bit のリセットボタンを一度押しておくと、extension と接続しやすくなるようだ。

次に、ラズベリーパイ上で Chronium Web Browser を起動し、アドレス欄に

http://scratchx.org/?url=https://jaafreitas.github.io/scratch-microbit-extension/scratch_microbit.js&lang=en

を貼り付けて、ScratchX の extension を読み込む。

Extension を読み込んでよいのか許可を求めるダイアログが表示されるので、緑のボタンを押して許可すると、More Blocks カテゴリに、BBC micro:bit 用のブロックが追加される。

BBC micro:bit の横に赤丸が表示されており、まだ micro:bit との接続が確立されていないことを示している。

ターミナルに戻り、

$ sudo node index.js

を実行する。以下のキャプチャのように、ターミナル上に connected true と表示され、ScratchX 上では先ほどの BBC micro:bit の横の赤丸が緑色に変われば、接続がうまくいったことを示している。

接続がうまくいかないときには micro:bit のリセットボタンを押すとうまくいくことが多い。

ScratchX 上の「clear display」ブロックをクリックすると micro:bit の LED がまっさらになり、「display ?」のブロックをクリックすれば ? と LED 上に表示されることを確かめる。

micro:bit を USB ケーブルの代わりに電池ボックスなどで給電すれば、ScratchX 上から micro:bit をワイヤレスで操作できるようになった。

次に天気情報を取得するために、天気情報APIに接続する ScratchX エクステンションを読み込む。

» ScratchXを使って天気を取得するブロックを作成

で紹介されていた OpenWeatherMap API から天気情報を取得する ScratchX エクステンションを使わせてもらう。

上記スクリプトを ScratchX から読み込めるように Web サーバーに置く必要があるのだが、ローカルの Web サーバーでもよいので、Node.js の http-server を使う。

scratch-microbit-extension を起動しているターミナルとは別のターミナルを開き、

$ sudo npm install -g http-server

で http-server をインストールする。

適当な場所に myscript.js というファイルを用意し、先述したスクリプトの内容を貼り付ける。ファイルが置かれているディレクトリで、

$ http-server

を実行すれば、localhost:8080/myscript.js で天気情報取得エクステンションにアクセスできる。

ScratchX 上の More Blocks カテゴリを選び、Load Experimental Extension ボタンをクリックして、localhost:8080/myscript.js を Extension URL として入力すれば、以下のように天気情報を取得できるブロックが追加される。

「[ ]の天気を取得」ブロックの [ ] にアルファベットで地名を入力し、クリックすれば、その場所の天気の情報を取得できる。

以下のようなスクリプトを用意すれば、micro:bit の A ボタンを押せば、好きな場所の天気の情報が micro:bit の LED に表示される。

本日の調布の天気は雨、Rain と表示されるようになりました。

たとえば予報を取得するようにエクステンションを改造して、常に表示するようにした micro:bit を傘立ての近くに置いておけば役に立ちそうだ。(ScratchX とそのエクステンションの作り方については、スクラッチャーのためのScratchX入門 - その1 ScratchXとは?で解説している)

ScratchX のエクステンションはいくつも読み込むことができるので、組み合わせればいろいろなことができるし、ラズベリーパイならばどこにでも置いておくことができるので、様々な応用が考えられそうです。

Apple イベントで紹介された、バスケットボールのシュートを自動でトラッキングしてくれるアプリ Homecourt (ホームコート)に衝撃を受けた

先日の Apple イベントでは、iPhone XS や Apple Watch Series 4 の発表がおこなわれました。今回は上位機種へのアップグレードということで小さな進化という印象でしたが、これとは別に特に興味をひいたのは、iPhone XS のカメラの性能をデモするために紹介された Homecourt というアプリでした。

» Homecourt

このアプリ、バスケットボールのシュートを全自動でトラッキングしてくれて、シュートした各位置やその位置ごとの成功率を表示してくれるというもので、すでに公開されており App Store からダウンロードできます。カメラの性能がより良い XS で使うのが良いのかもしれませんが、iPhone X でも使うことができ、近所の公園で試したところ、あまりの素晴らしさにかなりの衝撃を受けたので、その様子を紹介しようと思います。

シュートのトラッキングを行うには、バスケットゴールとシュートを打つ人、そしてコート上ならば3ポイントシュートのラインが全部映る場所に iPhone のカメラを設置する必要があります。理想的には、ゴールの真ん前が良いようですが、試したのは近所の公園で他に遊んでいる人もいるので、僕は、ゴールのななめ前方、コートの外側に三脚を立てて、iPhone を三脚に取り付け立てました。

続いて、アプリ下側のタブバーから、Record を選び、Workout を選択します。

すると、ゴールとボードを含め、四角の枠の中に収めてくれ、という画面が出てくるので、指示通りカメラの向きを調整します。

次に、バスケットボールのコート上でなら、3ポイントシュートやフリースロー用のラインを検知するのかもしれませんが、公園のゴール前にはラインが引かれていなかったので、画面上に表示される仮想的な3ポイントシュートやフリースロー用のラインを指でドラッグし傾きや位置を適当に調整します。

事前の設定に必要なのはこれだけ。三脚さえあれば、iPhone の他には何の機器も必要ありません。

あとは存分にシュート練習をすれば良いだけです。

どこからシュートを打ったか、そしてもちろんゴールしたかどうかを自動でトラッキングしてくれて、シュート成功率などの分析結果をこのような形で表示してくれます。

こちらが詳細な分析結果です。

圧巻なのは、全シュートを自動的にシュート毎に区切ってくれて表示してくれる Shot-by-Shot の画面。

ゴールしたかどうかの結果(赤色のMakeがゴール、青色のMissがミス)とともにシュートごとのシーンを後から再生することができます。ちなみに、筆者はバスケットボールは全くの初心者です。おかしなフォームだとは思いますがご容赦ください。

2本目のショットはゴールをかすめており、パッと見「あれ入ったんじゃ?」と見間違えそうなのですが、ちゃんと機械学習による判定は Miss と判定しており、なかなかの精度だと思います。(これはカメラの性能によるのかもしれません)

Shot-by-Shot の画面では、スローモーションにできたり、プレーヤーにズームしてフォームをチェックできたりと、反省とこれからの改善に役立てることができるんじゃないかと思いました。

他にも今日のハイライトということで、連続してポイントできたシーンなどを自動的に切り取って表示してくれたりします。

さらに面白いのは、タブメニューから Feed を選ぶと、他の上手なプレーヤーの練習の様子も閲覧することができるところです。

こちら3ポイントシュートがかなりの確率で入っているおかたです。

Shot-by-Shot 画面で各シュートの様子も見ることができるので、上手な選手のフォームをチェックして参考にすることもできるのだと思います。

他にも Teams という機能では、仲間と一緒にチームを作ることができ、各々撮影した練習風景をチェックしたり、分析結果を共有して切磋琢磨することができるようです。

毎月300ショットまでは無料で利用でき、それ以上無制限で使いたければ月額の料金が発生するようです。(2018/9/18時点では月額880円)

バスケットボール超初心者の僕でもかなりワクワクするアプリなので、バスケットボールをやっている方にはとてもおすすめなんじゃないかと思いました。

» ‎HomeCourt - The Basketball App on the App Store

学習するデータが増えていけば精度はどんどん上がっていくのかもしれませんし、そのうちフォームなども、ここの部分をもう少し上げていい、といったように自動でアドバイスしてくれるようになるのかもしれません。

機械学習をとても上手く活用しているお手本のようなアプリだと思います。スポーツと機械学習はとても相性が良さそうで、大きな可能性を感じました。

学生時代にアーチェリーをやっていたのですが、当時、矢が当たった場所は自分でスコアカードに手書きで記録していました。そうした記録もこのようにカメラと機械学習をうまく活用すれば、自動で記録できるようになるのかもしれません。(作ってみたい :) )

機械学習を使ってどのようにコート、ゴール、プレイヤーを認識しているかなどの少し詳しい技術的な側面や、このアプリを開発した動機などを紹介している TED の動画があったので最後に紹介しておきます。

サイモン シン・エツァート エルンスト「代替医療解剖」

お金と健康は人生においてかなり大切な2つの要素だと思うのですが、その2つに関して誤った選択・判断をしないためにもこの本は必読だと思います。

代替医療解剖 (新潮文庫)
サイモン シン エツァート エルンスト
新潮社 (2013-08-28)
売り上げランキング: 9,562

エセ科学を徹底的に批判する「カール・セーガン 科学と悪霊を語る」とあわせて、これからまだ長い人生を送る若い人には特に、あるいはお子さんがいる方にもぜひ読んでおいて欲しい。

僕はノストラダムスの予言を高校生くらいまで信じていたし、昔の嘘だらけのテレビで流れていたネッシーや雪男、UFO、宇宙人をなかば信じていたけれど、今はオカルト、占い、血液型といった類のものは一切受け付けないし、無宗教という立場だ。では、何を信じているかと問われれば、「科学」と答える。

そんな僕でも、昨年はじめに首を痛めて、それがなかなか良くならないので、いろいろなことを試してみたのだが、その中で何の抵抗もなし鍼を試してみたのだ。じっさい、鍼をやってもらったあと、何となく良くなった気分になったのだが、本書ではそれ(鍼)がまったく科学的には効き目がなく、プラセボ効果(簡単に言ってしまうと気のせいで良くなる効果)しか期待できないことを暴いている。

詳しくはぜひ、本書を読んでもらいたいのだが、忙しくて読めないよ、という人のために、本書に書かれている知っておいた方が良いことをここに書き留めておく。

  • 瀉血という血を抜く行為が、病気に効くと信じられていて、近代までずっと行われていた。このように一昔前までの医療行為のほとんどは科学的に間違ったものであった。
  • ではなぜ、昔の医者という職業が成り立っていたかという、お医者さんの格好をして(白衣を着るなどほかの人と違う格好をする)これこれこういう治療法があなたには効きますよ、と言われて科学的には何の効果もない行為をおこなってもらったり、あるいは効果のない薬を飲むだけでも、プラセボ効果、つまり気のせいだけで悪いところが回復したり、痛みがうすれる効果が実は人体にあって、その効果が意外とあるからだった。
  • 現代になってようやく科学的な方法で医療行為が効果があるか、あるいは薬が効果があるかがわかるようになった。その科学的方法の代表例が臨床試験であり、薬とニセ薬をAとB2つのグループに与え、有意な差がでれば、その薬は効果があったということ、そうでなければ効果がないと判定できるようになった。このときプラセボ効果を排除するため、患者の方は自分が本物か偽物のどちらをもらっているのかわからないようにしなければいけないし、薬あるいは治療行為を与える方の医者も自分が本物を与えているのかそうでないのかがわからないようにしなければ正確に判定はできない。
  • 鍼は、患者も行為者も自分が本物か偽物のどちらのグループなのかをわからないようにすることが難しかったため、かなり最近までプラセボ効果を排除した臨床試験が難しかったが、技術的に偽鍼(うってるように見せかけて実は刺さらない鍼)を作れるようになってきて近年正確に効果を測れるようになってきており、その結果どうやらプラセボ効果しかないようだ。
  • 本書は、このように丁寧に臨床試験の結果などを比較したり、科学的な検証をおこなっており、その結果、鍼、ホメオパシー(なぜこんなものが欧米では信じられているか謎なくらいトンデモな代替医療だが)、カイロプラクティック、そしてほとんどのハーブに科学的な効果がないことを暴いている。
  • カイロプラクティックまでも批判されているのは驚きではあるが、腰痛に限っては効果はあるのだが、その効果は通常医療と同程度であり、通常医療のほうが安価であるし、また危険性で言えば、通常医療のほうが安全であるということを知っておく必要がある。
  • プラセボ効果があるのなら、鍼などの代替医療でも構わないじゃないかという考えもあるかもしれないのだが、それよりも効果がある通常医療があるにも関わらず、通常はそれよりも高価で、リスクもある代替医療を選ぶという選択は問題であるし、何よりも、それよりも効果のある通常医療があるにもかかわらずそれを排除して代替医療を選んでしまうというのは大問題と断じている。代替医療を信じるあまり、科学的に効果があるワクチンを打つことをこどもに認めない親がこれにあたる。

カイロプラクティックも鍼も何の疑いもなく行っていたのが個人的にはショック。「臨床試験」をキーワードにして、これからは賢明に判断していきたい。

プロフィール

アーカイブ ↑トップに戻る

最近のエントリー ↑トップに戻る