ネイン開発メンバーブログ

サヨナラ、スクリーン。ヒアラブルサービスを開発している株式会社ネインの、開発ブログです

SLAM(自己位置推定)の各種技術まとめ

先月ネインに入社したJと申します。3D-CADでハード系の開発を担当しています。

前々回、スガがOPEN-VSLAMの動作テストについて紹介しました。その続きの話になります。

今回のテーマ
●なぜネインでSLAMを探っているのか
●各種SLAMの特徴
●アップルのARKITについて


なぜネインでSLAMを探っているのか

ネインではXR(AR/MR/VRの総称)で「空気を読む」世界を作ろうとしています。
https://www.pc-webzine.com/entry/2019/06/post-308.html

ARのテクノロジーは主に2つから成り立っています。
 ①カメラ画像の平面や物体を認識し、3次元空間を作成する。
 ②撮影している位置が、3次元空間内のどこにいるのかを把握する。

これを実現する方法の一つとして、SLAMに注目をしています。


各種SLAMの特徴

SLAMは画像で行う「vSLAM(Visual SLAM)」と、光センサで行う「LiDAR SLAM」があり、
vSLAMはスマホやドローンなど小さなハードウェアに利用されています。
(LiDAR SLAMは大きく高価なものが多いので、自動車等の大きなハードウェアに利用)

vSLAMはさらにいくつかの方式(PTAM、DTAM、LSD-SLAM、ORB-SLAMなど)があり、
ORB-SLAMの動画でリアルタイムに地図作成と自己位置推定を行っている様子を知ることができます。
https://www.youtube.com/watch?v=JyG1EeqCmHY

SLAMは主に①トラッキング(追跡) → ②デプス推定 → ③マップ生成を行います。
特に後期に開発されたSLAMでは同じ位置を検出したときに「ループ検出」を行い、
補正することで地図精度を高めています。
(動画では50秒付近で"LOOP CLOSED"と表示され、瞬時に地図を修正しています)

f:id:nain-team:20191101213024p:plain

SLAMの歴史と特徴をまとめました。

f:id:nain-team:20191101213139p:plain


APPLE ARkit、Google ARCoreの特徴、SLAMとの比較

AppleからARKit、GoogleからARCoreといったAR開発プラットフォームがリリースされ、
数多くのARアプリが開発されています。

f:id:nain-team:20191101213221p:plain

ARKitやARCoreは図2のVO(Visual Odometry)の進化版、VIO(Visual Inertial Odometry)を使っていて、
カメラ画像+加速度センサ+ジャイロセンサで自己位置推定を行なっています。

VIOは局所的な狭い範囲でのARに焦点を置いているため、計算コストが低い利点があります。
SLAMは広範囲に焦点を置いているため、精度が高い利点があります。

今後open-VSLAM以外も動かして、それぞれのSLAMを比べたいと思っています。

特に参考にさせていただいたWEBサイト
https://qiita.com/k-boy/items/1de8e9ed1260834d02af
https://noshumi.blogspot.com/2017/05/visual-slam-1visual-slam.html

Flutterもくもく会 #3 - 開催レポ!


先日、ネイン渋谷オフィスにて「Flutterもくもく会」を開催しました!

月1ペースで開催し、かれこれ3回目の開催になります。
今回はリピーターの参加者さんもいて盛況に開催することができました。

 

f:id:nain-team:20191018064340j:plain

Flutterもくもく会を開催したきっかけ

ネインではiOS/Androidのネイティブアプリ開発にFlutterを用いています。


Flutterは新しい技術でトレンドも目まぐるしく変化します。

一方で勉強会などは少ない印象だったので、情報交換の場になればと思ってもくもく会形式で勉強会をはじめました!

 

ネイン社員も参加しており、普段Flutterを触っていないエンジニアも勉強のために参加したりしています♪

 

第3回 Flutterもくもく会の開催レポ

1. 自己紹介&きょうやることの発表

まずは簡単な自己紹介と、その日に取り組むことを発表します。

テーマは様々です。

・環境構築をしてみる
・公式チュートリアルを進めてみる
といった入門編から


・自作アプリに新機能を追加する
という経験者


・実務の開発
と中にはやっぱり仕事が忙しい方もいますね(笑)

 

2. もくもくタイム

自己紹介が終わったら、あとはもくもくと開発します。

 

とはいえ、無言で開発する必要はなく、わからない点などを聞きながら開発してもOKです。
今回は皆さん集中してたのか、黙々と開発していました。

 

80分程のもくもくタイムですが、いざ取り組んでみるとあっという間に終わります。

 

3. 成果発表

さて、もくもくのあとは簡単な成果発表をします。
いちおう任意で発表ですが、みなさん発表されていました。


トラブル発生して思うように進捗がなかった人、時間ギリギリで目標達成した人、様々です。

 

私自身、今回はFlutterとfirebaseを連携する、というテーマで開発したのですが、なんとかfirebaseでユーザー認証するところまでやりきることができました!

さすが両方ともGoogle製サービスとだけあって、ドキュメントが丁寧ですすめやすい印象でした。

 

4. 懇親会

最後に簡単な懇親会をしました。
今回は軽食として、お酒とピザを用意しました。

 

ピザの発注を忘れてて慌てて頼んだピザ屋のピザが絶品だった、、というハプニング付きです(笑)

 

・なぜFlutterを採用しようとしたのか?

・Flutterで実際にアプリを出してみてどうだった?

というFlutterネタから

 

airPodsのすごい所

深センの工場でおばちゃんがイヤホン組み立ててる話

などネインならではのネタで盛り上がりました。 

 

次回は11/6に開催!

11月も開催します!

今回もそうでしたが、入門者から経験者まで幅広く参加されていますので、みなさんお気軽にお越し下さい♪

nain.connpass.com

 

 

 

OPEN-VSLAMでSLAM(自己位置推定)を試してみた

エンジニアのスガです。

SLAMという技術を試す機会がありましたので今回はそちらを紹介します。

 

SLAMというのは、Simultaneous Localization And Mappingの略で、日本語だと自己位置推定と地図作成を同時に行うことを言います。
カメラやセンサーを使って取得した情報から地図を作成し、また自分がその地図のどこにいるかを推定する技術となります。

 

身近なところではお掃除ロボットなどに活用されているそうです。

 

f:id:nain-team:20191010121905p:plain

OPEN-VSLAMの実行画面

 

SLAMには位置推定の方法や使うセンサなどによっていろいろな手法が考案されています。
またその手法の実装方法も多く公開されているのですが、多くがLinux環境によるものでした。
私の環境がWindowsでしたので、WSLという機能を利用してLinuxのUbuntu16.04の環境を構築することにしました。

 

WSLというのは、Windows Subsystem for Linuxというwindowsの機能の1つです。
ざっくりいうとwindowsでアプリケーションとしてLinuxを使うようなイメージかと思います。
通常WSLは有効になっていないため、有効化、インストールが必要になりますので下記を参考に進めました。
https://qiita.com/Aruneko/items/c79810b0b015bebf30bb

 

今回SLAMのWSLでの動作が公式で公開されていたOPEN-VSLAMという手法を試してみましたのでそちらを紹介いたします。
公式ページは下記になります。
https://github.com/xdspacelab/openvslam

 

ここでWSLという機能は、コンソールのみとなっており操作はほとんどコマンドによるものになります。
いわゆる画面表示であるGUIがないため、操作には多少慣れが必要かもしれません。
また、GUIがないと、この後の操作でカメラや地図の画像を表示することができなくなってしまうため
画像を表示するときはWindowsの画面を使うように設定が必要です。
今回は下記のリンクを参考にVcXsrvをインストールしました。
https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html

 

これでUbuntu16.04の準備ができましたので早速OPEN-VSLAMの準備を進めます。

 

インストール手順
https://openvslam.readthedocs.io/en/master/installation.html

基本的には公式の手順通りに進めていけばいいのですが、
インストールする際にrootユーザにしていない場合適宜sudoを頭につける必要がありました。

また表示するViewerがPangolinViewerとSocketViewerの2種類から選ぶようになっているのでどちらかを選択する必要があります。
私はPangolinViewerを選択したのでそちらの手順で進めました。

選んだViewerによって最後のBuildの引数が違うので注意が必要です。

 

Buildができて最後の手順でヘルプが表示することができたら次のチュートリアルに移ります。

 

チュートリアル
https://openvslam.readthedocs.io/en/master/simple_tutorial.html
チュートリアルもインストールと同様に順にコマンドを打っていけばOKです。

 

video_slamコマンドを実行するとカメラの画像とマッピングの様子が表示されます。
マッピングが終わったら、マッピングしていた画面の[Terminate]のボタンを押すと終了します。
video_slamコマンドで地図データが生成されたので最後にrun_video_localizationコマンドを実行するとローカライズ(位置推定)が行われます。
生成されたマップの上をカメラ動画に合わせて動いていることが確認できると思います。

 

この手順で使った動画以外にもサンプルとして使える動画ファイルが同じページで公開されているのでそちらも試すことができると思います。

 

今後は自分で撮影した映像を使って地図作成ができるか試してみたり、ほかの手法も調査していく予定です。

 

 

自己紹介:スガ@ファームウェア開発

はじめましてスガといいます。


6月に入社したばかりなのですが、今回は私の仕事についてご紹介と自己紹介ができたらと思います。

 

私はファームウェアの開発部門に所属しています。
イヤホンのファームウェアはなにをしているか簡単に説明しますと、イヤホンのボタンを押したとき、音楽再生命令をスマートフォンに送ったり、電池が少なくなるとLEDの点滅や音でお知らせしたりなどの機能の制御を行っています。
また弊社のZeenyは通知を音声でお知らせするのですが、そのためにスマートフォンのアプリと通信を行っていたりしています。

f:id:nain-team:20190906180428j:plain

 

そんなイヤホンの中には信号処理をするDSPが内蔵しており、今はその調整が私の主な仕事です。
調整内容としては、音を聞き取りやすくするようにイコライザーをかけたり,マイクの音量を調整したりなどです。
入社したばかりでまだまだわからないことが多いですが、いいものを作れるように頑張っていきたいです。

最後に私の自己紹介をさせていただきますと、前職では音響設備のエンジニアをしていました。会議室やホールの音響設備で建築現場の職人さんにまざりながら機器の設定や制御システムの構築などを行っていました。ただ、設備ではなく音を扱う「もの」を作りたいという思いからネインに入社し今に至ります。

個人的な趣味ですが音楽が好きで、休日となるとCDショップを端から端まで歩き回って新しい音楽を探したり、ライブを見に行ったりしています。

よろしくお願いします。

メンバー紹介:エリ@iOSエンジニア

初めまして、開発メンバーのエリです。

 

今回は自己紹介と会社の雰囲気についてお話ししたいと思います。

 

私は高校生の頃からダンスをしており、ダンスの仕事のために上京しました。

ずっとダンスの仕事を続けていましたが、ふと自分の将来について考え始めた時に

もっと違う分野でも自分の可能性を広げたいと思いました。

実は大学時代にがっつり理系女子だった私は、簡単な数値計算をするプログラミングは勉強しており、

当時とても楽しかったことを思い出し、何か勉強していたことが何かにつながらないかと思い

色々仕事を探していたところネインに出会いました。

ただ、アプリ開発に関しては完全なる素人だったので

先輩方におんぶに抱っこ状態で笑、たくさん勉強させていただき

今では、いちプログラマーとして仕事を任せていただけるようになりました。

まだまだこれから勉強していかなくてはいけないことだらけですが

より良いものを提供できるよう頑張ります!!!

 

仕事では、たっくさん頭を使うので、社内にはいつもチョコレートなどのお菓子が常備されています。

お菓子好きの私としては、とても嬉しいことです笑

また、会社が渋谷ということもあり、おしゃれで美味しいご飯屋さんも流行りのタピオカ屋さんも

たくさんあるので、時間がある時に近辺を散策するのもとても楽しいです。

また、近くのカフェに入るとパソコンを持った方々がミーティングをしている場面に出会うことも多く

自分も負けてられないなと勝手に闘志燃やしています💪

 

週に一回お昼はみんなで必ず一緒にご飯を食べます。

小さな会社なので、全員でのコミュニケーションはとても大事です。

何を食べようかみんなで考えたり、最近どこへ遊びにいったなど

仕事のことを一旦抜きにして、他愛もない話をしている時間がとても楽しいです。

個性派メンバーばかりなので、いろんな話が聞けてとても面白いです!!

 

ここまで読んでくださった方は察したかと思いますが、私は食べることが大好きです笑

今後は、オススメのご飯屋さんなどのお話も交えつつ、更新していけたらなと思っています!

読んでいて楽しくなるようなブログを目指します!!🤗

React Native使いがFlutter入門してみた結果

Nainで開発のお手伝いをしている @takahi5 です。

さてNainではアプリ開発にFlutterを導入しています。
僕自身はReact Nativeを普段は使っていますが、同じくクロスプラットフォーム対応のFlutterは気になる技術でした。

先日Nainにて開催されたFlutterもくもく会をきっかけに、環境構築〜チュートリアルまでをやってみたので、その感想を書きたいと思います。
(2時間ほどチュートリアルを触っただけなので間違っていたらごめんなさい汗)

f:id:wasan:20190815083246p:plain

Hot Reloadが爆速

Hot Reloadとは、コードを編集したらその改修が即座にアプリ(シミュレーターなど)に反映される機能です。
通常のiOS/Android開発だと、、コードを変更して→コンパイルして→アプリで確認、、のような流れだと思うのですが、 コードを変更した瞬間にコンパイルとか無しで反映されるので、開発の効率がグンとアップします。

さてこのHot Reload的なもの、React Nativeでも存在するのですが、Flutterのほうが速い印象でした。

また、特筆すべきは「Hot Reload」と「Hot Restart」という概念があり、

Hot Reload:いまの画面で更新が反映される。更新が少ないとき。大体これでいける。
Hot Restart:アプリ再起動して更新が反映される。更新が多いとき。

という2種類があるらしく、React Nativeで体験していたのは「Hot Restart」のほうでした。 「Hot Reload」はアプリ再起動せずに更新されるので爆速です。
遷移の奥底のUIを調整するときなど便利そうです。

標準のUIライブラリが充実

標準のUIライブラリがマテリアルデザイン対応していて、完成度が高い印象です。
標準のコンポーネント(ウィジェットっていうのかな?)を組み合わせていくだけでも、それっぽいUIになります。
さすがGoogle

React Nativeの場合、標準のコンポーネントのままだとイケてないデザインになります。
とはいえNativeBaseやReact Native ElementsなどサードパーティのUIライブラリ群が充実してるので、それらを使えば同等のメリットは得られるかと思います。

なんとなくReact Nativeと通ずる概念がある

ReactはComponentを組み合わせてUIを作っていきますが、Flutterの場合Widgetというものを組み合わせていきます。
チュートリアルをこなした限りでは、ほぼ同じ概念なのかな、と感じました。

Widgetの状態はStateで表現し、Stateを持つWidgetをStateful Widget、Stateを持たないのをStateless Widgetと呼ぶなど、この辺もReactのStateless Componentなどを彷彿させる概念です。

Widgetは必ずbuild関数を持っています。
このbuild関数でUIの見た目を定義しているのですが、これはReactのrender関数に相当するものかと思います。

と言った感じで、Reactと対応付けながら把握していくと意外とスッと概念が入ってきそうな印象でした。

Dartを恐れることはない

Flutterを始めようと思ったときのネックの一つとして、FlutterがDartで書かれていることがあるのではないでしょうか。

おそらく大抵の人はDartを触った経験は少ないだろうし、また新しい言語を覚えるのか..と。

が、触ってみた感じでは意外とスッと入ってきそうな印象でした。

もくもく会の参加者の方も、Dartを特に勉強したわけではなく、Flutterアプリを作りながら覚えたとのことでした。
Java, C#, JavaScriptなどの言語を経験していれば、思ったより学習コストは高くなさそうです。

Flutterもくもく会

NainではFlutterに関する情報交換の場として、もくもく会を開催しています。
次回は9/11(水)に開催予定です。
普段Flutterを活用している方から、まずはチュートリアルから入門してみようという方で幅広く参加いただいています。
お気軽にお越しください♪

connpass.com

自己紹介😱

こんにちは。
株式会社ネインで主にAndroidアプリの開発を行っているKです。


ネインとの出会い


元々ガジェットが好きて新しいものを色々試すということがとても好きだった私はまだ将来に悩む大学生でした。
当時Bluetoothイヤフォンというのは今ほど普及しておらずまだまだ発展途上でやっと完全ワイヤレスがクラウドファンディングで数点出てきたぐらいだったかと思います。
そんな中、私はすでに数十本のBluetoothイヤフォンを試していたので当然普通の機能だけでは満足できず、面白い製品を探しながらKickstarterを始めとするクラウドファンディングサイトを見ていました。
そんな折、偶然MakuakeでAPlayという製品を見つけて出資したのが、ネインとの出会いでした。

Aplayはスマートフォンに届いたメッセージを声で読み上げ、更に声で返信できるという画期的なイヤフォンでした。
自分はPebbleを始めとするスマートウォッチをすでに身につけていて通知をすぐに確認するということの便利さを知っていましたし、スマートウォッチは画面を見るまで何が来たか分からない、時計を見ると「こいつ時間を気にしているな」と思われるなど不便な面も多く声で読み上げてくれるということに惹かれ、その後、ツイッターにてネインのメンバーと連絡を取るようになりました。
最近一部界隈で話題のツイッター就職をかなり早い段階で経験したということになります。

 

ネインで何をしてきたか


大学卒業後、ネインにプログラマーとしてジョインしました。
プログラマーと言っても大した技術があるわけでもなく、OJTを受けながら少しずつわかるようになってきました。

色々な製品を試した経験からAndroidアプリをより良くするために開発をしながら、ハードウェアもより良くするため、AplayやZeeny、ZeenyTWSを製造している工場に出向き、製造の調節などを行っていました。

前回山本がOpen BCIの脳波計測の装置の写真を投稿していましたが、組み立てたのは私です。
これが成形精度が悪いのか組み立てが難しくこちらをつければこちらが取れるという具合に大変な苦労をした記憶があります。
かぶったら最後、外すのにも一苦労でゆっくり外さないと組み立てた箇所が外れるという具合でした。

 

Zeeny製品について

 

最近、ZeenyのAndroidアプリとiOSのアプリ、イヤフォン自体のリーダーとカスタマーサポートを担当しており、日々奔走しております。


特にAndroidアプリは問題が多く、修正を行っております。
できるかぎり早くリリースしたい一方、不具合などが残っているとAndroidアプリのみならず、ZeenyTWSのファームウェアも含めて巻き込んでしまうため慎重にすすめています。
一方でMakuakeで出資していただいた方にまだ出来ていないことがあるのも把握しております。


Zeeny Androidアプリはファームウェアアップデートに対応した次のバージョンを社内でテストを続けております。

 

iPhoneの方は一足先にZeeny for iOSアプリの設定→デバイスからファームウェアのアップデートが出来ます。もし、新しいファームウェアにしても不具合等ありましたらアプリのフィードバックからお知らせいただきますと幸いです!

余談ですが、やはりメールでのやり取りですとユーザーとの距離が遠く感じることが多々あり、Discordなどでコミュニティを作ろうかと考えたりしております。


ちなみにPebbleは最強のスマートウォッチでした。あれを超えるスマートウォッチにはまだ出会えていません。
ぜひ知っている方が居たら教えて下さい!
次は中国深センの出張記を書く予定ですので良ければお楽しみに。

 

ではではまた〜