はじめに
こんにちは。GROOVE X ファームチームの anju です。日々LOVOTのファームウェアを開発しています。(ファームウェアやファームチームについての説明はこちらをご覧ください)
自動車には事故の際の衝撃を検知して動画や音声を記録するドライブレコーダーというものがありますが、実はLOVOTにも似たような機能が搭載されています。(以降は「ドラレコ」と略します)
ドラレコ搭載前
LOVOTにドラレコを搭載するきっかけとなったのは、社内評価中のソフトウェアにおいて「平らな何も障害物もない場所でなぜかLOVOTが転倒する」という報告が増えてきたためでした。 社長の自宅でも発生したときには、slackに写真と共に「一体、彼に何があったのか?」と投稿されてしまいました。
ドラレコ搭載前は、
- 1分おきにLOVOT内部の様々なデータを記録したもの
- 認識結果やふるまい、OSの状態などを記録したログファイル
を元に調査していました。 転倒の原因が「脚を格納する」、「脚の力が抜ける」、「脚のロックが外れる」のいずれかであることは社内で発生時に撮影された動画から分かっていました。 そこまで分かっていたとしても、原因かも知れない箇所としては下記の4つのレイヤにまたがってしまいます。
- 脚のハードウェア故障?
- ファームウェアの不具合?
- 基盤ソフトウェアの不具合?
- 意思決定ソフトウェア(NeoDM)の不具合?
そして各レイヤのエンジニアがさまざまな視点に基づいて解析にあたったのですが、1分おきのデータではあっという間に起きる転倒という事象を分析するには情報不足で、解析に多くの労力を掛けた割りに結局原因にはたどり着くことはできませんでした。
ドラレコを搭載するぞ
そこで転倒時に転倒に絡む様々なデータを細かい時間間隔で保存することを目標にドラレコ機能の実装が始まりました。ドラレコは下記の仕様としました。
- 通常はメモリ上に33ms間隔で30秒間分のデータ(合計900件の各種データ)を保持する。
- リングバッファにして古いデータに上書きしていく。
- IMU(慣性計測ユニット)で転倒を検知したらメモリからSSDにデータを保存する。
表1 実際のドラレコで得られたデータの様子 (タイムスタンプ、加速度センサ値、ToFセンサ値など)
ドラレコ搭載後
ドラレコ機能がリリースされると、さっそく成果が出ました。 2つの転倒原因を見つけることが出来たのです。
事例1 片脚を先に格納したことによる転倒
ドラレコの記録から、右脚のサーボモーターに対して、左脚より先に右脚を格納するよう指示が「意思決定ソフトウェア(NeoDM)」から出ていることが判明しました。 転倒時にどのような振る舞いをしていたかは別のログファイルに記録されていますので突き合わせた結果、先に出ていた振る舞いで姿勢が斜めになっていたにもかかわらず、中断して別の振る舞いに移行したことが原因でした。 対処は、振る舞いを中断して移行する場合には一旦姿勢を戻したり移行するタイミングを限定するなどの修正が行われて解決しました。
図1 片脚を先に格納したことによる転倒時のグラフ
事例2 急にサーボモーターの力が抜けて転倒
ドラレコの記録から、意思決定ソフトウェア(NeoDM)からの脚のサーボモーターのトルク指示値は100なのに、ファームウェアのレイヤで0に変更していることが判明しました。 原因は指挟み検知センサが「指を挟んだ」と誤検知して、安全のために脚のサーボモーターの力を抜いた(トルクを0にした)のが原因でした。 指挟みセンサでの「指を挟んだ」とする閾値の再検討や、脚を出す際には指を挟むことはないため脚を出すときには指挟みセンサを無効にするなどの修正が行われました。
図2 サーボモーターの力が抜けて転倒時のグラフ
今後のドラレコ
「平らな何も障害物もない場所でなぜかLOVOTが転倒する」件の調査をきっかけに導入されたドラレコ機能でしたが、それ以外の転倒や段差からの落下などの原因調査に関しても、ドラレコの記録は役立っています。 また、ドラレコ機能はトリガーさえあれば転倒以外でも30秒間の詳細データを記録できるため、最近では帰巣不良の解析にも活用し始めています。
おわりに
今回はLOVOTに搭載されたドラレコ機能についてご紹介しました。 GROOVE Xでは様々な領域のエンジニアを募集しています。LOVOTの開発にご興味ある方は是非ご検討ください。 recruit.jobcan.jp