Genuino 101がやって来た

またボード増えたのかよ


Switch Scienceで購入.

Curieを触るために5000円を払ってみたが,所詮 Arduinoプラットフォーム上からしか触れないのだ… そう考えると,高い高い高い買い物である. IMUとか RTCとかが入っている,というのは便利は便利だが,このボード形態である限りサイズの制約からは逃れられない.

ウリは BLEですよね.


いろいろあったので最初に書いておく.

iOSの BTは残念仕様だ.

Advertiseする Serviceを切り替えたり,Characteristicを追加・変更したりしたらキャッシュ的なモノをクリアするために BTを一度 Off/Onすることをオススメする.コレをやらないと

  • Serviceを登録してもスニファに出てこない.
  • Characteristicが特定のモノに固定されてしまう

といった不思議現象にぶち当たることになるので注意.

[BLEの参考リンク]

iOSアプリは取りあえずコレで.


github.com

CurieBLEのサンプルにあるハートレートモニタで紹介されていたアプリだが,元々は nRF用のアプリである.コレの iOS側ソースを読み,CurieBLE側に期待される実装を推測する,というお勉強を行った.取りあえず PROXIMITYが満足に動くようになった.

Raspberry Pi 3がやって来た

イギリスの NewITから直輸入. 技適は R205-160251で取得済みだった.

http://www.soumu.go.jp/main_content/000401769.pdf

SwitchScienceが

残る問題は、製品に工事設計認証のマークが表示されているかどうか、です。 認証を取得していたとしても、マークが表示されていなければ、使うことはできません。 法律違反になる可能性があります。

と書いているが,「製品に」の定義が曖昧.

最新の端末機器の技術基準適合認定等に関する規則 (最終改正:平成二七年二月二七日総務省令第九号) によると

第十条  法 (脚注:電気通信事業法) 第五十三条第二項 の規定により表示を付するときは、次に掲げる方法のいずれかによるものとする。

一  様式第七号による表示を技術基準適合認定を受けた端末機器の見やすい箇所に付す方法

(当該表示を付す面積が確保できない端末機器にあっては、当該端末機器に付属する取扱説明書及び包装又は容器の見やすい箇所に付す方法)

とあり,設計認証は同封の説明書 (日本語の項目もある) にちゃんと記述されている.

が,箱 に は 無 い.

慌てず騒がず,会社の電波暗室でテストすることにした.

RasPi2用の MicroSDをそのまま挿しても Bootできない.これは新SOCのBCM2710に対応したファームが無いからのようだ.慌てず騒がず

sudo apt-get update

sudo apt-get upgrade

で raspberrypi-bootloader_1.20160225-1_armhf.deb が bcm2710-rpi-3-b.dtbを入れてくれる.

が,以下現時点の最新 2016-02-26-raspbian-jessie.imgを新規で焼いた時のお話.

ちなみに BCM2710は 64bitコアだが,現状のイメージで起動すると RasPi2と同じ CPU (ARM7)に見える.

WiFiの設定


よく見たら GUI右上に WiFiアイコンがあり,クライアントモードならソコから設定できた. 以下 CUIで設定する場合の話.


起動するだけで普通に wlan0が見え,

# wpa_passphrase myid mypass > /etc/wpa_supplicant/wpa_supplicant.conf

などとして SSIDとパスワードを入れてあげて,WPA2-PSKの設定として

key_mgmt=WPA-PSK

proto=RSN

pairwise=TKIP

group=TKIP

を追加して

ifconfig wlan0 down && ifconfig wlan0 up

で接続完了. 素晴らしすぎる.


勿論 HostAPにも対応する.その際一点注意しておきたいのが,/etc/network/interfacesで

allow-hotplug wlan0

コメントアウトを外しておくこと.

Bluetoothは?


まず

sudo apt-get install pi-bluetooth

しろ,というのが見つかるが,インストール済みのようだ.

hciconfig で見ても既に UP RUNNINGになっており,

sudo hcitool scan

をしたら普通に MBPが見つかった.他にテキトーなデバイスが無いのだが,DualShock3でもつなぐか.

UARTが…


デフォルトだと今までの /dev/ttyAMA0は UART0として BTに接続され,代わりにできた /dev/ttyS0が UART1として GPIOヘッダに出てくるらしい.が,そもそも miniuartが CPUクロックに依存してしまうため使い物にならないらしい.ということで Workaroundが開発されているようだ.

www.briandorey.com

上記ページから pi3-miniuart-bt-overlay.zipを取得,解凍してできる pi3-miniuart-bt-overlay.dtbを /bootと /boot/overlayに配置. /boot/config.txtに

dtoverlay=pi3-miniuart-bt-overlay

force_turbo=1

を足して reboot.起動完了後は /dev/ttyAMA0を 115200bpsで使うことができるようになる.

GoPro Hero4 Black Edition (v03.00) の 4K@30pを出先で (とりあえず)シェアする方法@iOS (9.2)

4Kもなんとかしたい


先日 GoProのハイビットレートフォーマットを出先で共有する方法について書いた.

gt1000.hatenablog.com

上記は iMovieを使う方法で,無料でできるのだが 4Kフォーマットには対応していない.GoPro Appを使うと,撮影時に同時に生成される低解像度の Proxyファイルを見ることはできる.が,やはりシェアをすることはできない.

ちなみに Proxyファイルは 4Kの場合は撮影時に同時に作成されるが,1080@120pとかだと Appで開く際に App内で作成される.

動画変換 for iPhone


そこで,今回有料アプリを使って解決してみた.「動画変換 for iPhone」という 2016/01/30時点で 250円,★ 2つのアプリである.もっと適したモノがあるのかもしれないが,「コレで実現できた」ということで記録しておく.

ちなみに★2つである理由のメインは「変換後にアプリのデータをカメラロールに転送できない」ことによるものらしいが,自分は (設定により自動的に) 送ることができるので何が問題なのかイマイチ分からない.別の理由として挙げられている「上手く変換できない」というのは自分も出くわした.なんと,iPhone6sで取った動画 (1080@60p)の変換が完了せずエラーになるのだ.こりゃダメだ,が,自分には関係ない.

気を取り直して話を続ける.タイトルに (とりあえず) と書いたのは 4Kそのものではなくなるからだ.とはいえ,現時点ではネイティブ 4Kのスマホ/タブレットが存在しないワケで,たいした問題ではないだろう.変換後の解像度としては 1080p/720p/576p/480p/360p/240pが選べ,自動的に 720pになってしまう iMovieに比べると自由度が高い.また,fpsは維持される,ということも特筆すべき点だろう.自動的に 30pになってしまう iMov (ry 逆に「fpsの変更ができない」というのは再生環境を選ぶ可能性がある.実際 120pの動画を Nexus7(2013)に転送すると,ビットレート的には問題ないハズなのだが微妙に引っかかって再生される.iPhone6sでは問題はなく,スロー再生も可能.

一点気になるのは,解像度に関わらずサイズがほとんど変わらない点だ.コレはビットレートを優先する仕様になっているからと思われる.最高ビットレートは「ビデオクォリティ」という設定項目で最高品質と思われる「カスタム設定 98%」を選んですらジャスト 5Mbps (これ以外の設定は試していない),iMovieよりちょい低い.正直「んー」というレベルだが,まぁ出先のシェア目的に文句を言っても仕方がないしスロー再生がしたいなら選択肢は無い.

変換速度


さて,iPhone6sの 1080@60pは喰えない (吐ききれない)が GoProのフォーマットは問題ないようだ.そして出力フォーマットは前述の通り.とりあえず 1080@30pで吐いておけばよいだろう.変換後のデータはカメラロールに吐き出されつつ,アプリ内にも保存されるので時折削除することをオススメする.

で,変換速度のベンチマークだが,取りあえず前回のファイル (1080@120p)で取ってみた.

入力ファイル 1080@120p (7分48秒 3.52GB,7.7MB/sec,61.6Mbps)
変換時間   13分02秒 (4.6MB/sec) 
出力ファイル 1080@120p (7分48秒 289.9MB,0.62MB/sec,4.96Mbps)

変換終了予測時間がリアルタイムに出るので画面とにらめっこし続ける必要は無かったが,iMovie (8分30秒)の約1.5倍と結構時間がかかった.ただ,iMovieでの変換に比べて (自動的にカメラロールにはき出される分) 手間が一つ減るのはちょっと嬉しい,のか.

RealSense R200,Mac OSXで動作確認

f:id:gt1000:20160111040544p:plain

忘れていた.


入手自体は 1stロットで手に入れていたのだが,すっかり忘れていた.

が,F200に関して質問が来ていたのを機に取り組んでみた.

やったこと


一言で言えば,前回の改変.

gt1000.hatenablog.com

F200に対応した,と言っているが上手く動いていない libuvcを持ってきて,改変して F200を動かしたのだが,コレに R200の制御を盛り込んだ.

手順


1.Product IDのチェック

オプションキーを押しながらメニューバー左端のリンゴマークをクリックして一番上のシステム情報を選択.USB3.0に R200が繋がっていることを確認し,製品 IDの項目を調べる.R200は 0x0a80.ちなみに F200は 0x0a66.

2.フォーマットのチェック

VendorID (Intelは 0x8086)と ProductID (R200は 0x0a80) で uvc_find_deviceして見つけたデバイスを uvc_open2して手に入れたハンドラで uvc_print_diagを呼んでフォーマットを調べる.uvc_open2の最後の引数 camera_numberは 0:IR 1:Depth 2:RGBの模様.GUID (フォーマットID),size (解像度),interval (fps)くらい把握すれば OK.ちなみに uvc_open2はググっても出てこないので,コレがカスタム libuvcのキモの一つと考えられる.

3.うまいとこ組み込む.

上記で調べたフォーマットの情報を,既にあるフォーマット情報の羅列に並列して記述する.

4.呼び出す.

Depthは camera_number 1で,GUIDは Z16 (というアスキーデータで始まるバイナリ列).名前の通り 16bit値のようだが,ダイナミックレンジは調べていない,というかどうも小さいので生値を 32倍させたのがサムネイルに使ったスクショ.ただし 32倍は少々やり過ぎのようで,遠距離がサチっている.

IR画像は camera_number 0,二つあるうちセンター寄り側の IRカメラの画像.この IR画像モードではレーザープロジェクタは焚かれない.また camera_number 1の Depthとの同時動作はできない (=Depthと IRは排他).GUIDは Y12I,Y16,Y8I,Y8で,おそらく「輝度のみの1ch,ビット数,インターレースか否か」ということだろう,90fpsがある,というのが特記事項か.

RGB画像は camera_number 2で,GUIDは普通の YUY2と,おそらくセンサ生データの RW10 (ただし 8bit表示される.詳細未検討.設定は唯一 2400x1081@30fpsのみ)の二つ.YUY2で 60fpsが使える解像度は 640x480と 320x240のみ,とか画質が低い,とか率直に言って良いところがない.

既知の問題


F200は RGBと Depthの同時呼び出しが問題なく動いたのだが,R200は今のところどちらか片方しか呼ぶことができない.具体的には RGBをスタートさせたあとに Depthをスタートさせてもコールバックが呼ばれない.どうも Depth側がガッツリ刺さっているようで,終了処理自体は普通に抜けているが上手く処理できていない.この状態になると抜き差ししないと再度使用することはできない.

とりあえず動いたので,以上. F200に引き続き,OSXのネイティブで R200を動かした (ことを公表した)のは世界初じゃね?

GoPro Hero4 Black Edition (v03.00) のハイビットレートなフォーマットを出先でシェアする方法@iOS (9.2)

動機


自宅の動画編集マシンにかけて処理する前提の場合,撮影時にフォーマットを気にする必要は無い.しかし出先ではハイビットレートなフォーマットはハンドリング性が悪く,GoProアプリ内でなら確認はできるのだが,シェアは一筋縄ではいかない.だからといって低ビットレート撮影では事後の編集に支障をきたす.ということでハイビットレートフォーマットを出先でシェアする方法をまとめておく.

なお,本記事におけるフォーマットは 4K@30p 1080@120p 720@240pに限定する.それ以外のフォーマットには「そもそも一般的では無いケース」と「iOS側でネイティブで対応しているので問題ないケース」があるが,ともに情報の価値は低いと考え省略した.

使用した iOS機器は iPhone6s.

いきなりまとめ


確認のみなら GoProアプリで OK,シェアしたかったら lightning USBカメラアダプタ経由 (など)で取り込んで iMovieで変換すれば 1280x720@30pになる.4K@30pのシェアはアキラメロン.

データの取り込み


・GoProアプリ経由

ファイルを選択するとサポートしていないフォーマットである旨が出た後,再生できるようにフォーマット変換をしてくれる.勿論元データはそのまま.しかし,この変換後のデータはドコに存在するのか不明 (おそらくアプリ内でテンポラリに持たれる),かつ iOS機本体でハンドリング (Clip/Share/Download)をすることはできず,GoProアプリ内での再生のみで行き止まりになる.従って GoProアプリではファイル内容の簡単な確認のみ行うことになる.

・lightning USBカメラアダプタ経由

「読み込む」でデータのダウンロード (本体へのコピー)は可能 (写真アプリにビデオとして取り込まれる).サムネイルは出る.しかし写真アプリで再生しようとしても,ぐるぐるが出続けるだけで進展しない.

iMovieによるダウンコンバート


ここからは lightning USBカメラアダプタ経由で取り込んだ後の話となる.iMovieを利用すると,1080@120pと 720@240pは 1280x720@30pに落とすことができ,ファイルサイズも 1/10程度に減らすことができる.iMovieのビデオメニューで目的のファイルを選択し,シェアアイコンをタップして iMovie Theaterというアイコンを探す.コレを選択するとビデオの名前の入力を求められた後,変換がかかる.変換後のデータは Theaterメニュー内に現れる.コレを選択し,さらにシェアアイコンをタップして「ビデオを保存」を選択することにより,写真アプリに戻すことができる.

4K@30pも同様の操作を行うことはできるが,できあがる動画ファイルは無音の黒画である.

参考値


入力ファイル 1080@120p (7分48秒 3.52GB,7.7MB/sec,61.6Mbps)
コピー時間  3分39秒 (16.4MB/sec) (from SanDisk Ultra 64GB to iPhone6s)
変換時間   8分30秒 (7.0MB/sec) 
出力ファイル 720@30p (7分48秒 311.1MB,0.66MB/sec,5.45Mbps)

ざっくりとしたオーダーで,撮影時間の半分くらいの転送時間が必要で,撮影時間くらいの変換時間が必要,といった感覚になるようだ. 単純に圧縮率のせいだが,実際のところ画質はかなり厳しい.

おわりに


データサイズは劇的に小さくなるが,変換にはそれなりに時間がかかる.勿論解像度もフレームレートも落ちている.ただ友人とその場でシェアしたい,という場合に備えて iMovieが使えることを覚えておくと良いかも.

Font-Awesome on Hatena

これはイイ.


マークダウン記法について調べていたら,ステキなページを見つけた.

Font-Awesomeというステキなアイコンを利用する方法.

qiita.com

本家 (提供元) はこちら.

fortawesome.github.io

Hatenaで使うにはどうするかなー,と思ったら簡単だった.

初期設定


デザイン -> カスタマイズ -> ヘッダ -> タイトル下 に HTMLが記述できるので,Font-Awesomeの CSSをココで引っ張ってこさせる.

別にココでなくても良いかもしれないが,記事毎に設定しないで済むように共通フォーマットの箇所に埋め込んでおくことが重要.

<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet" />

使い方は簡単


なら <i class="fa fa-thumbs-o-up" style="font-size:1em;"></i>と記述するだけ.

font-sizeでサイズ調整も可能.

フォントの種類に関しては本家ページ参照のこと.

OSXでの ddによる書き出し

あらかじめやっておくこと


diskutil list で書き出し先ディスクを確認する.

MBP:/ user$ diskutil list
 (略)
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.7 GB    disk3
   1:             Windows_FAT_32 boot                    62.9 MB    disk3s1
   2:                      Linux                         3.9 GB     disk3s2

外付け SDカードリーダーを使用しているが,disk3になっていた.パーティション構成から想像が付く方もいるかもしれないが,Raspberry Piである.

接続した際に自動的にマウントされるが,このまま ddを走らせてもエラーになるのでアンマウントする必要がある.

単一のパーティションを umountする diskutil unmountでも ディスクそのものを認識させなくする diskutil ejectでもなく, diskutil unmountDiskを用いること.

MBP:/ user$ diskutil unmountDisk /dev/disk3
Unmount of all volumes on disk3 was successful

ddについて


ディスク名の先頭に rを付けることにより Unbuffered Modeになる.

また bs=1m などでブロックサイズを 1m程度で設定すること.

この二つを設定しないと,とてつもなく遅くなる.

MBP:/ user$ sudo dd if=some_image_file.img of=/dev/rdisk3 bs=1m

dd中の進行状況の確認方法.

別コンソールを用意するなどして killallでシグナル INFOを送ると dd側のプロセスでログを吐く.

OSX以外では USR1らしい.

MBP:/ user$ sudo killall -INFO dd

73+0 records in
72+0 records out
75497472 bytes transferred in 11.541480 secs (6541403 bytes/sec)

もしくは Ctrl-T.別コンソールが要らないのでこっちの方がお手軽か.

書き込み完了後


マウント可能な場合は自動的にマウントされ,OSX独自の隠しファイルが作成されてしまう.

念のため消した上で,今度は diskutil ejectする.

MBP:/ user$ rm -rf /Volumes/DISK_NAME/.*
rm: "." and ".." may not be removed
MBP:/ user$ diskutil eject /dev/disk3
Disk /dev/disk3 ejected

以上.