頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


ARKitの画像トラッキングにおける画像平面の初期姿勢

ARKitの画像トラッキング(ARImageTrackingConfigurationを使うやつね)で対象の画像を見つけた場合に得られるARAnchorオブジェクト。それをanchorとするとanchor.transformでその位置・姿勢を得ることができる。

これをつかってごにょごにょ(※1)する時なんかにあれ?と思ったのはこのtransformがmatrix_identity_float4x4の状態にはこの平面はx-z平面にある、ということ。
x-y平面にあるものと思ってコード書いててなんかうまくいかねえ?となり気付いたんだが。
ちなみにMDLMeshのnewPlane(withDimensions:segments:geometryType:allocator:)で作成する平面はx-y平面に作成される。うー、なんかややこしいのう。


※1 ↓こういうのをやってたのです。
スポンサーサイト






エアコンの汎用リモコンを買ってみた

少し感動したので書いておこう。

ここ1、2年かな、ウチのエアコンがリモコンでは操作できてるように見えるのだがその通りに動かない、という状態になってた。
こういう場合、リモコンを買い換えれば直るのか、それとも本体に問題があるのか判断できない、ってことでごまかしつつ使ってきてた。

今年暑くなってきていざエアコンで冷房しようとしたがリモコンが新しい電池でもまともに表示されない。この状態なのでリモコンを買い換えよう!という気になった。

ところが同じものはメーカーのサイトではすでに販売してない。代替品は税込6,480円。
Amazonで購入しようとすると同メーカーの代替品が6,320円。案外高いのね、、、


購入から10年経過してるとはいえ実際まだ冷風温風は出るし、エアコンの寿命は14年程度らしいからまだいけるだろうと思うと買い替えはない。

そんなわけでどうしたものかと思ってたら世の中には各メーカーのエアコンの操作をできるリモコンなんてのが売ってるんだな、知らんかった。


↑6千円ちょいからすると相当安い。じゃあ試してみるかということで注文してみた。

エアコンの汎用リモコン

↑届いたリモコン。
エアコンの近くで数字を変えていき、1つずつ電源が入るか確かめていくんだが、、、
あるところでピッとエアコン本体の電源が入った!凄いやん!ちゃんと冷たい風が出てきたやん!
ウチのエアコンはPanasonicのCS-28RKX(室内機)って機種なんだが、見事671で動いた。

まだ使い込んではいないけど、今まででも凝ったことしてないからこれで事足りるような気がする。
不具合あったらまた書く。


VRゴーグルに穴をあけたARゴーグルで世界を見る実験

iPhoneのバックカメラを使ったARアプリの検討ということである実験をしてみた。

VRゴーグル

↑だいぶ前に購入したVRゴーグルに、、、

VRゴーグル(穴あけ状態)

↑えいやと穴をあけてiPhoneを設置。そのカメラで得た画像(動画)を

カメラ画像を2つ並べたスクショ

↑このようにならべて見てみるとどんな感じだろうか?というものだ。

通常VRアプリは少し異なる画像を左右それぞれの目で見るわけだが、これが同じ映像だとどうなるのかピンとこなかった。
使ったのはiPhone XS Max。
画面いっぱいはもちろん、Safe Areaを左右半分にして画像を写しても大きすぎるのかVRゴーグルの仕様のせいかともかく焦点が合わないのでSafe Areaの9割を使っている(後述)。


【結果】
現時点で最新機種のiPhone XS Maxとは言え、カメラの映像はリアルより遅延があってそのせいか、酔った。おえーっ。
当然立体感はない。
通常の目で見る感覚より何もかも大きく見えるのですぐ近くのコップを掴むのもたどたどしい。歩くのも危ない。
捉える物体にピントが合うのに時間がかかる、、、これはコードがぬるいせいかもしれない。何かその辺りの設定できたんだっけ、、、


【感想】
そもそもは自作の’ARゴーグル’を使って現実世界に何か情報を表示する、という方向での技術的な蓄積、つまり‘iGlass’的なデバイスが登場した時の準備、なんて考えてたんだけどかなりやる気が失せた。

むしろ、iOS 13(現在beta 3らしい)のARKitで人物や自分の手を捉えるというデモ動画を見たので、それと合わせてVRアプリで操作するのに自分の手を使う、という方向を模索した方が面白いかも。

VR CROSS ROAD スクショ4
↑だいぶ前に作成したVRアプリ。みんなVRに興味あるのか今でもダウンロードされてる。
VR CROSS ROAD
このアプリでは音声を使って自機を動かすんだけど、カメラを使ってジェスチャーで操作なんてこともできるかもしれない。



【おまけ1】
DIYで使う木工用ドリルを使って、VRゴーグルに穴を開けたんだが6mmのドリルじゃ穴も小さいしそもそも位置もよくなかった、、、ということで、

VRゴーグル(さらに穴あけた状態)

↑試行錯誤しつつ穴を広げて行ってたところ、、、

部品が外れたVRゴーグル

↑パカっと部品が取れた、、、?
お、お前、取れるんか!
最初から穴なんて開けなくてもよかったやん!!!


【おまけ2】
コードについて。

storyboardでのviewの設定

↑storyboardでUIViewオブジェクトを作成。自分の場合はSafe Areaの横幅x0.9となるようにconstraintを設定。
中央の棒(UIViewオブジェクト)はただの中心の位置決め用(ゴーグルにセットする時に欲しい)。

使ったコードは一部だけど以下のような感じ。CAReplicatorLayerを使えば複数の画面を並べるだけなら簡単にできる。
class ViewController: UIViewController {
var cameraPosition : AVCaptureDevice.Position!
var captureSession : AVCaptureSession!

func setupBasic() {
cameraPosition = AVCaptureDevice.Position.back
captureSession = AVCaptureSession()
}

//↓画面タップでコールされる
func openCameraSession() {

do {
let videoCaptureDevice = AVCaptureDevice.default(for: AVMediaType.video)
let captureDeviceInput = try AVCaptureDeviceInput(device: videoCaptureDevice!)

captureSession.addInput(captureDeviceInput)

captureSession.beginConfiguration()
captureSession.sessionPreset = AVCaptureSession.Preset.hd1280x720
captureSession.commitConfiguration()

let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
previewLayer.connection?.videoOrientation =
AVCaptureVideoOrientation.landscapeRight
previewLayer.frame = CGRect(x:0, y:0,
width:mainView!.bounds.size.width/2,
height:mainView!.bounds.size.height)

let replicatorLayer = CAReplicatorLayer()
replicatorLayer.frame = CGRect(x:0, y:0,
width:mainView!.bounds.size.width/2,
height:mainView!.bounds.size.height)
replicatorLayer.instanceCount = 2
replicatorLayer.instanceTransform = CATransform3DMakeTranslation(
mainView!.bounds.size.width / 2,0.0, 0.0);

replicatorLayer.addSublayer(previewLayer)
mainView!.layer.addSublayer(replicatorLayer)

captureSession.startRunning()

} catch {
print(error);
}
}
}


// in AppDelegate.swift
func applicationDidBecomeActive(_ application: UIApplication) {
application.isIdleTimerDisabled = true
}
↑あと、ゴーグルにセットして時間が経つとスリープしないようにする設定。
applicationWillResignActive(_:) でfalseに戻す。

※iOS12.3.1 , Swift 5.1


iOSアプリ「旗当番表メーカー」をリリースしました(現在無料)

小学生の子供がいると旗持ち当番(旗振り当番とも言うようです)をしなければいけないところもあるでしょう。
そして場合によっては自分がその当番表を作成することになるかもしれません。
そんな時にお手伝いするアプリです。

メンバーを入れて、期間や曜日を設定し、文言を設定すれば、、、

作成した旗当番表

↑このようなPDFファイルを作成してくれます(このブログではPDFファイルのアップロードができないので編集時の画像を表示しています)。

現在無料です。今のうちにダウンロードを!
App Storeはこちら↓

旗当番表メーカーのアイコン
旗当番表メーカー


  TopPage  



Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.