### プロジェクト概要
社の主力製品である生産機械について、顧客先での故障を未然に検知・通知するサービスを開発しました。
具体的には、生産機械に設置した組み込み PC で収集・転送したデータを用いて定期的な診断を行い、異常が見られた場合は機械の管理者に通知するものです。定期的な診断は、事前に学習させた機械学習エンジンで行いました。
### した工夫
常にプロジェクト全体について考え、都度必要な事に取り組みました。
プロジェクト参画当初は、機械学習エンジンの開発やインストーラ作成の自動化が進められていましたが、まず最低限のシステムを完成させ、必要事項を炙り出した上で開発を進めるべきだと考え、自社工場での実地テストを行いました。結果として、組み込み PC でのデータ収集・安定稼働の実現が大きな課題である事を早期に発見し、優先的に取り組む事が出来ました。またプロジェクト内外の方と積極的に関わり、都度必要な情報・協力を得てプロジェクトを円滑に進めました。結果として、自社工場での実地テストを完了し、顧客先でのPoC開始に結びつける事が出来ました。
### 技術概要
機械からのデータ収集・転送を行う組み込みPCの開発と、到着データを元に診断を実行して結果をメール返送するシステムの構築を行いました。
使用した技術は、AWS IoT, AWS S3, AWS Lambda, AWS SQS, AWS ECS, AWS DDB, FFT, カルマンフィルタ, PCA, オートエンコーダです。コードは全て Python で書きました。診断の手法としては、事前に収集した大量のデータから「正常領域」という領域を定義し、ここからのデータの外れ具合を異常度として表示しました。(滅多に故障が発生しない機械に対する異常検知を実現するために、正常データのみでモデルの作成が可能なこの手法を選択しました。)組み込み PC からシステムへのデータの転送には、AWS IoTを用いました。MQTT 通信で一時的なトークンを取得する事で、セキュアなデータ転送を実現しました。また、デバイスの管理は AWS IoT を用いて行いました。AWS IoT 上でデバイスをグルーピングした事により、組み込み PC のソフトウェアアップデートのグループごとの実行を実現しました。これにより、自社工場でのテスト → パートナー企業の工場でのテスト → 本番環境へのデプロイ というデプロイフローの容易かつ安全な実行を実現しました。
### 技術的に解決した課題
#### 組み込み PC の安定稼働の実現
組み込み PC について、工場の劣悪な環境での安定動作を実現しました。
アース揺動によるバッテリーの故障、電波が悪い時のみ発生するメモリリーク等、課題が多くありましたが、問題発生ごとに詳細に条件を比較・検討して原因を特定・解決し、安定稼働を実現しました。
#### 組み込み PC セットアップの自動化による開発速度向上
組み込み PC セットアップの自動化による、開発速度の向上を実現しました。
組み込み PC の管理は AWS IoT を使用して行っていましたが、AWS IoT への登録作業と、組み込み PC のインストーラ作成、実行に非常に時間がかかるという問題がありました。(インストーラには組み込み PC ごとの認証情報を組み込む必要があり、毎回作成する必要がありました)この AWS IoT への登録及びインストーラの作成を行う Lambda 関数を作成した事で、組み込み PC のセットアップを大幅に自動化しました。これにより、故障が頻発する組み込み PC の開発速度を向上させ、組み込み PC の安定稼働を実現しました。
#### サービスの最適化
ユーザーにとって最も価値が高くなるようなサービスの最適化を実現しました。
本システムには、誤検知が少なく、かつ確実に異常を検知出来る事が求められます。これはトレードオフですが、最も妥当に診断を行うシステムを実現しました。具体的には、正常領域を作成するために使用するデータの範囲を調整しました。特定の機械 A を診断する為の正常領域を作成する際に用いるデータの候補としては、
1. 同じシリーズの機械のデータ
2. 同じ種類の機械のデータ
3. 同じ種類かつ、構成タイプという区分が同一の機械のデータ
4. 特定の機械 A のデータ
などがあります。
1.だと、データの収集は楽な反面、正常領域が不当に広がり、異常の見逃しが発生します。4. だと、機械ごとにデータ収集を行う必要がある為に煩雑であり、またデータが不十分である為に正常領域が小さく、誤検知が発生します。
これらを両立する、3. を特定し、サービスの最適化を実現しました。
最終的には、このスコープは機種ごとに異なる事が判明した為、機種ごとに使用するデータのスコープを変えて正常領域の作成を行いました。