サブサンプション・エンジンを作る(その1)
花岡ちゃんのウィークエンド:サブサンプション・エンジン
真ん中の3つのボックスは上から「周囲を探検する」「うろうろする」「障害物を避ける」という行動を表しています。この実装で最終的に実現したいのは「周囲を探検する」という行動です。つまり、それがこのロボットの目的になります。
ボックスは、それぞれ独立のプログラムで、左側の「センサー情報」ボックスからの情報に基づいて行動を生成します。この結果、それぞれのボックスから、走行モーターを(右側のボックス)コントロールする信号が発生します。これが行動ボックスから出ている→です。
→をよく見ると、上の→が下の→を押さえ込む用に描かれていますが、これが重要です。これは「包摂」関係を表していて、例えば「障害物を避ける」という行動は「うろうろする」という行動に「包摂」されています。つまり、「障害物を避ける」行動は「うろうろする」行動の一部となっているのです。
これは簡単に思考実験できると思います。
例えば「障害物を避ける」行動とは障害物を発見すると、そこから離れるようにモーターへ信号を送ります。同様に「うろうろする」は一定時間前進し、ランダムに方向を変える信号をモーターに送ります。このような構造にすると、方向を変えて動き回りながら、障害物を回避する行動をプログラムすることが出来ます。
「包摂」関係を成り立たせるためには、「障害物を避ける」からの信号が、「うろうろする」信号を抑圧する、つまり、「障害物を避ける」からの信号が優先してモーターへ送られるようになっていればよい訳です。こうすれば「うろうろする」プログラムに従って行動中に、障害物を発見すると、回避行動の方が優先されるので、たとえそのとき「うろうろする」プログラムが、前進の信号をモーターに送っていたとしても、無事に障害物を回避できるのです。
ただし!上の説明はブルックスの有名な論文(下記)とはちょっと違っています。ブルックスの論文では、行動の優先順位はあくまで上になっているブロックにあるように見えます。つまり、上の説明とは逆です。それだとロボットはうっかりすると障害物にぶつかってしまいそうなものですが、ブルックスの仮想ロボットのブロック図を見ると確かにそうなっています。
ブルックスの仮想ロボットはかなり複雑で、さまざまなモジュールが相互に影響を及ぼすようになっています。また、優先信号には時間制限があり、これがどう影響するのかはよくわかりません。あるモジュールの信号と上位からの信号が交互にモーターに送られるということも考えられます。こうなると完全に下位のビヘィビアをブロックするのではなく、「効きを鈍くする」作用もでてくるでしょう。
ただ、ブルックスの「ビヘィビアを組み合わせて目的の行動を作る」という考え方からすると、上のような解釈が比較的合理性が高いのではないかと思います。もちろん、これは解釈の問題で、サブサンプションアーキテクチャの本質に関わるハナシではありません。この投稿のシリーズでは、この考え方で行こうと思います。
このようなアーキテクチャを使ったロボットは、シェーキーのような「正統派」の知能ロボットに比べ、単純なコンピュータで実現でき、また、反応速度が早くなります。実用的な作業ロボットを実現するには有効ということで、roombaの制御にも応用されています。もっとも、iRobotのスタートアップの一人がブルックスでしたが。
サブサンプション・アーキテクチャは昆虫の行動原理に似ています。たいしたことはできそうないという考え方もありますが、85年の有名なブルックスの論文には、結構複雑な行動をとるモデルへのアプローチもあり、研究しがいがありそうな技術です。
次回は、バンダイのロボットシリーズに使われている「サブサンプション・エンジン」について説明します。
« 何となくフリダシに戻る | トップページ | サブサンプション・エンジンを作る(その2) »
「花岡ちゃんのウィークエンド」カテゴリの記事
- レーザー距離センサVL53L0Xを複数使うには(2022.05.01)
- 【訂正!】PIC24Fでレーザー距離センサVL53L0Xを使う(2022.04.13)
- PIC24Fでレーザー距離センサVL53L0Xを使う(おしまい)(2022.04.14)
- PIC24Fでレーザー距離センサVL53L0Xを使う(その3)(2022.04.13)
- PIC24Fでレーザー距離センサVL53L0Xを使う(その2)(2022.04.12)
コメント