Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SDLアプリの開発手法紹介/ABC2019S-SDL-Session2

 SDLアプリの開発手法紹介/ABC2019S-SDL-Session2

ABC2019Spring クルマとスマホが繋がる「SDLアプリ」はこんなふうに開発する
の登壇資料(2/2)

machadev

June 18, 2019
Tweet

More Decks by machadev

Other Decks in Technology

Transcript

  1. 2019年5月26日(日) 株式会社オルトア 市川雅明 Android Bazaar & Conference 2019 Spring SDLアプリの開発手法紹介

  2. 自己紹介 氏名 市川 雅明(まーくん@macha1972) 会社 株式会社オルトア 開発 組み込み/Windows/Androidアプリ開発 C/C++, Java,

    PHP, Kotlinなど 所属 日本Androidの会 浜松支部 支部長 特技 スベること(自称:氷上のプログラマ)
  3. 今日の発表内容 • SDLアプリ開発概要 • アプリ開発で苦労したこと • アプリコンテストへ応募したアプリ紹介 • 追加してほしいAPI

  4. SDLとは? • SDLとは、四輪・二輪とスマートフォンを連携させる オープンソースの国際標準規格。 • 具体的には、iPhone・Androidアプリを「SDL対応の カーナビ」といった車載機を通じて、運転中でも安全に 使えるようにするというもの。 • 通常モード(テンプレート画面作成)と

    プロジェクションモード(画面をミラーリング)がある。 [出展] http://ascii.jp/elem/000/001/738/1738321/
  5. 取得可能な情報 GPS 速度 回転数 燃料量 燃料量状況 燃料量レンジ 燃費 外部温度 車両識別番号

    ギア タイヤ圧 走行距離 ベルトス状況 ボディ状況 デバイス状況 ブレーキ ワイパー状況 ライト状況 エンジントルク エンジンオイル 状況 アクセルペダル 状況 ハンドル舵角 緊急通報情報 エアバッグ状況 緊急イベント 電源状況 緊急通報状況 シグナル状況 電子パーキング 状況
  6. Manticoreエミュレータ

  7. • メリット 計測値のシミュレーションができる。 コマンドログが参照できる。 • デメリット 複数起動ができない。 再起動のたびにポート番号が変わる。 ※入力画面を用意することで回避した。

  8. Ubuntuエミュレータ

  9. • メリット 仮想環境(VirtualBoxなど)で複数起動できる。 ローカルエリアでデバッグできる。 • デメリット 計測値のシミュレーションができない。

  10. • エミュレータ起動毎にポート番号が変わるため、 デバッグ用に接続選択画面を作りました。

  11. SDLアプリ開発で苦労したこと • 左側に画像、右側にテキストとボタンを表示する 画面を作成しようとしました。 SetDisplayLayout.setDisplayLayout()に 下記のパラメータ設定で表示できると考えた。 GRAPHIC_WITH_TEXT_AND_SOFTBUTTONS

  12. • 実装したい画面 しかし、テキストとボタンの両立ができなかった。 理想の配置

  13. • それならテキストをボタンで代用しようと考えた。 試行錯誤した結果、ボタン3つが最適でした。

  14. • ボタンのテキストを変更するAPIなし • ボタンStateを複数用意し、State切り替えで実現 [ボタンState登録] // ボタンステート1 SoftButtonState btn01State1 =

    new SoftButtonState(“btn01State01”, "テキスト1", null); // ボタンステート2 SoftButtonState btn01State2 = new SoftButtonState(“btn01State02”, "テキスト2", null); // ボタンステート3 SoftButtonState btn01State3 = new SoftButtonState(“btn01State03”, "テキスト3", null); // ボタンステータスList List<SoftButtonState> btn01States = Arrays.asList(btn01State1, btn01State2, btn01State3); [ボタンState切替] List<SoftButtonObject> list = sdlManager.getScreenManager().getSoftButtonObjects(); // State名を指定して切替 list.get(0).transitionToStateByName(“btn01State01”);
  15. • ソフトボタン1つの場合

  16. • ソフトボタン2つの場合

  17. • ソフトボタン3つの場合

  18. • ソフトボタン4つの場合 高さが低くなると思ったがタイル状になった。

  19. • エラー発生 以下の場合、リソース設定でのエラー発生が多い。 エラー発生?

  20. • エラー時のLog • エラー時のチェック箇所 • setDisplayLayout()とリソース追加が不整合。 GRAPHIC_WITH_TEXTでボタン追加など。 • 画像・テキスト設定後にcommit()していない。 SdlManager.getScreenManager().commit()

    • ServiceがSDLと接続しているため スマホの画面に表示するにはActivityとの通信が必要
  21. コンテストへ応募したアプリ • 逆走車を発見したとき、発見場所などの情報を 自動通報し、さらに後続の車・バイクへ逆走車の 情報を共有する「逆走DASH」というアプリを 開発しました。

  22. (1)作品の概要 ▪はじめに 大事故につながる高速道路などの逆走車... • 高速道路での逆走発生回数2日に1回以上! • 逆走による死亡事故は通常事故の約40倍! https://www.driveplaza.com/safetydrive/happening/reverse.html 逆走にご注意を―無くそう逆走―

  23. 逆走車を発見したら、 ・110番など通報をしてください。 ・必ず同乗者の方が通報してください。 とあるがパニック状態で発見場所などを 正確に伝えるのは困難です。 そこで、このアプリが解決をサポートします。

  24. • 逆走車の発見時に“逆走”とVoice入力し、 発見情報(時間・発見場所など)を収集します。 • 自動音声再生で警察署や道路交通センターへ 通報します。 • 同方向の後続車へ逆走車の発見情報を共有し、 警告画面を表示することで注意を促します。 ▪アプリ概要

  25. (2)機能およびSDL利用による説明 ▪SDL利用機能 • Voiceコマンド 通報トリガー、はい/いいえの選択 • GPS 緯度/経度、進行方向を利用 • TurnSignal

    ハザードスイッチON検知(BOTH状態)
  26. ▪通報シーケンス 逆走車 発見車 ①Voiceコマンド  ”逆走” ②情報収集・保存 運転手 SDL対応機器 スマートフォン ④通報指示

    警察署 ⑤通報・音声再生 後続車 ③情報共有
  27. • Firebase Cloud Firestore リアルタイムに同期可能なデータベース 逆走車の発見情報を記録 後続車と発見情報を共有 • Twillio ネットワーク経由で音声通話する技術

    Text to Speechにより発見情報を音声再生 ▪技術仕様
  28. • Twillioは下記の発信制限があります。 a)1から始まる特番(110など) b)#4桁の短縮ダイヤル(#9910 道路緊急ダイヤル) • 発信制限の回避策(案)です。 a)緯度/経度から最寄りの警察署の番号を検索 市外局番-xxx-0110 b)最寄りのNEXCOお客様センターの番号を検索

    NEXCO中日本:052-223-0333 ▪制限事項
  29. (3)アピールポイント • 逆走車の発見情報(時間・発見場所など)を 自動音声再生により、正確に通報できます。 • 後続車に逆走車の発見情報を共有できます。 • ハザードスイッチのONで通報できます。 後続車へ情報伝達(渋滞など)で使用され、 スイッチが搭載(後付可)されたバイクがあり、

    車・バイクで共通のUIを利用できます。
  30. (4)知的財産権の有無 • Firebase Google Inc. の登録商標です。 https://firebase.google.com/?hl=ja • Twilio Twilio,

    Inc.の登録商標あるいは商標です。 https://twilio.kddi-web.com/ • かわいいフリー素材集 いらすとや 使用点数7点(商用利用は20点まで無料) https://www.irasutoya.com/
  31. デモ動画の動作内容 片側2車線で逆走車あり 発見車・後続車はSDL搭載 進行方向 逆走車 発見車 後続車

  32. ▪逆走車の発見前 Voiceコマンドで“逆走”と入力 発見車

  33. ▪逆走車の発見時 位置情報などを収集してクラウドへ送信 通報の選択肢を表示 発見車

  34. ▪後続車 クラウドから受信して警告表示 後続車

  35. ▪通報する場合 ハザードスイッチONで通報を開始 音声入力(はい)でも可能 発見車

  36. ▪通報中 スマートフォンから自動音声再生で 時間・発見住所・進行方向などを通報 発見車 2019年1月3日午後1時3分ごろ 浜松市北区三方原町◯◯付近で 逆走車を発見しました。 進行方向は南南西です。

  37. ▪通報完了 自動で電話を切断して通報完了 発見車

  38. デモ動画 https://drive.google.com/file/d/1VcamHdbDQ0_8-SRbFvhN_DQs64jDqITT/view 補足: デモ動画はエミュレータを使用しています。 GPSなど一部のデータは固定値で動作しているものがあります。 後続車の位置と進行方向は判定していません。

  39. 追加してほしいAPI • ドライブレコーダーとの連携API 動画保存トリガー、動画取得操作など • メーカー各社の独自センサーの取得API 例:日産自動車の雨量感知センサー • (車・バイクの制御系API) (安全面で無理だと思うが...)

  40. ご清聴ありがとうございました。

  41. None