概要
自動運転を始めた車のように、家電もここ数年で自動化を行っているものが多くあります。
「与えられた役割をこなす」自動化の先に「自発的に行動を行う」という世界観があるとしたら、そこに人格や生命感を感じ、癒しや満足感といった新たな価値があるのではと考えました。
その表現としてまずはロボット掃除機を対象とし、直線的で味気ない動きではなく、まるで自らの意思を持っているような動きを行うものを目指しました。
ハード構成
全体像は下図の通りです。
センシングデバイス
人検出用に RaspPi Camera V2と、障害物との距離検出用にソナー(HC-SR04)×2個を配置しています。
シャーシ
タミヤのユニバーサルボードを切り貼りしました。
2段構造としており、下段にLiPoバッテリ(ドローン用)、上段に基板(Raspberry Pi 3B+Raspi Robot Board V3)を設置できる形状です。
アクチュエータ
身体起こし用にサーボモータ(MG90)×1、走行用にモータ×2 + タミヤ製ギアボックス という構成です。
タミヤ製パーツをベースとしたせいか漂うミニ四駆感。
2輪+ボールキャスター(タミヤ製)により全方向へ自由に移動可です。
生命的な動き
ブライテンベルグのビークル
障害物を回避しつつ生きているような振る舞いを行うために、ブライテンベルグのビークル(1984年 Vehicles: Experiments in Synthetic Psychology)の原理を採用しました。
きわめて単純な脳であっても、外部の観察者からは非常に洗練した振る舞いとして映るような出力が可能である。
とのことで、角度を付けたL/Rソナーで距離を常時計測し、障害物が近づいたセンサ(L)と逆のモーター(R)にブレーキをかけることで障害物を避けるような旋回の連続により障害物の中を自在に動き回ることができます。ブレーキ力の強さをパラメータ化することで、パラメータを変えるだけでかなり振る舞いに変化が出ます。
こちらはパラメータチューニング後。なかなかにカオティックな動きです。
パラメータチューニング後。距離センサー2個のみで自律走行がスムーズに実現できました。
ランダムにStop&Goを入れることで、少し思案しているような、生命っぽさを加えています。
人とのインタラクション
「好き」「嫌い」の表現
目の前の人が好きか嫌いかを判定し、好きな人を見つけると身体を縦に振り駆け寄ってきます。
嫌いな人には身体を横に振り逃げていきます。
さらに好きな場合は地面にハートマークを描く…
(これは妻のアイデアでしたが若干恥ずかしいw)
AIによる顔検出と顔判別
上記の「好き」「嫌い」の判断軸を学習させることで畳み込みニューラルネットワークを生成し、そのモデルを使用して、カメラによる取得画像から検出した顔部分より「好き」「嫌い」の感情を与えます。
全体の処理の流れは下図になります。
学習フェーズも含めて全てRaspberry Pi上で行いました。教師データは初期は画像検索で拾った画像を使いましたが、背景や露光、顔に当たる光の角度が判定結果に影響してしまうため、途中からはロボットから取得した顔認識画像を手動でタグ付けして行いました。
環境構築や基本的な流れはKaraageさんのブログを大いに参考にさせて頂きました。この作品が私の初めての個人制作と言うこともあり、色々とハマってしまい環境構築だけで4週間とかかかっています…。今だったらGoogle Colaboratoryとか使えばいいと思います。
画像取得はブレを抑えるため、ロボットの動作静止時にのみ行っています。
ここで課題として見えてきたのは顔検出の推論時間でした。
Raspberry Pi 3Bの使用においては顔検出に6秒間程度(カスケード分類器のパラメータ調整で最終的に2~3秒程度)かかってしまい、インタラクションとしては少しリアルタイム性に欠ける結果になってしまいました。
ここら辺を解決するにはラズパイGPUを使っている限りは限界があり(Ideinさんの様に下層から最適化するなら別ですが)、サイズとの兼ね合いになりますがJetson NanoやAI処理に特化した外部アクセラレーター(Intel MovidiousやGoogle Coral Edge-TPU)を外付けするの対応が現状では有力そうです。
手に乗るサイズ感
キャラクターを出す上で手乗りサイズであることは重要だったので、内容物(主に大きいのはラズパイ3基板や12cmのLiPoバッテリ)を納めつつも小サイズ化を図りました。
この頃まだFusion360に手を出していなかったため、3DモデリングはWindows付属の3D Builderで行いました。操作が非常に簡単です。
また出力はDMM.makeへ発注しました。
自宅や共有ガレージの3Dプリンタでもよかったのですが、積層痕を避けたかったため(DMMは光造形による出力)。
素材は見積もりの中で一番安いナイロンを選定しました。
モコモコの素材でも試してみたものの、縫製スキルが足りず断念…。
作成してみて
個人的には人前に初めて出した作品がこちらということもあり右往左往しながらでしたが、自分で機能を企画し試して具現化していく過程がとても楽しかったです。GUGENやMaker Faire Kyotoに出展したのですが、特に人の顔に応じた反応を返すことに、大人も含めてハマってしまう人がちらほら。
一方で初出展のトラブルとして、ノンブランドのキット付属DCモーターが出展初日で3個焼き切れ、ほぼHAKKOさんのはんだ付けブースに篭りきりという事態もおきました。あわてて近くのおもちゃ屋さんに駆け込み(昔懐かし)マブチモータを買い込んだのですが、それ以降1個も壊れることはありませんでした。(タミヤさまさまでした。。)
「機械なのに生命感」みたいなテーマ、自分としては大変面白かったし、たまーに似たようなツボの方が熱い反応を返してくれたりして、出展時は励みになりました。このテーマを他の対象(電気スタンドやベビーカーなど)へ拡張していきたいです。続く。
参考文献
作って動かすALife ―実装を通した人工生命モデル理論入門
Raspberry Pi上でTensorFlowで簡単にディープラーニングを試せるツール「tensorflow-pi」でロボホンの幻の顔認識機能に挑戦してみた
投稿者の人気記事
-
TKD
さんが
2021/01/31
に
編集
をしました。
(メッセージ: 初版)
-
TKD
さんが
2021/01/31
に
編集
をしました。
-
TKD
さんが
2021/02/01
に
編集
をしました。
Opening
3duilab
2021/02/02
TKD
2021/02/04
ログインしてコメントを投稿するユニークで面白いテーマ、応用方法も多いので続けてほしい、もっと見たいです
ありがとうございます!応援いただけて励みになります〜また他の作品も投稿します