遺伝的アルゴリズム(GA)シミュレーション 遺伝的アルゴリズム(Genetic Algorithm)による多足歩行型ロボットの歩行シミュレーション 図1 Gazeboによる歩行シミュレーション 動画 GAシミュレーションによって得られた静歩行パターンの例 干潟での移動を想定した多足歩行型ロボットの移動システムの開発を行うため、Gazeboという物理シミュレータを用いた平地でのトライポッド歩行シミュレーションを行った。 干潟とは、以下の図のように陸域と水域を含んだ特殊な環境となっている。また、想定している多足歩行型ロボットは6脚6節を有し、陸域ではアリなどの昆虫が行っているトライポッド歩行で、水域では脚部をフィン型の振動翼として推進する。 図2 多足歩行ロボットの移動手段 Gazebo上ではROSを用いて6脚6節の多足歩行型ロボットモデルを作成し、各関節に速度制御のコントローラーを実装した。また、このモデルでトライポッド歩行を行うために、接地脚と仮定する角度:θ[deg]を設定し、接地脚時の回転速度をω1 [rad/s]、遊脚時の回転速度をω2=k・ω1 [rad/s]として、接地脚と遊脚で回転速度を変える速度制御を行う歩行プログラムを作成した。なお、脚を基準脚3本と位相差delayを持つ3本に分け、これを交互に動かすことでトライポッド歩行となる。 図3 歩行パラメータ 以下の図は、Gazeboでのトライポッド歩行時のノードグラフである。歩行プログラムであるtripodノードからhexbugノード(それぞれの関節のコントローラー)に関節の回転速度を送り、hexbugノードはgazeboノードに値を送ることでモデルを動かしている。また、gazeboノードからは現在のモデルのlink情報を、hexbugノードからは関節情報をtripodノードは受け取り、出力する回転速度を算出している。 図4 ROSによる多足歩行ロボットのノードグラフ 本シミュレーションではOctaveを用いて、トライポッド歩行に必要となる歩行パラメータ(θ, k, ω1および対となる脚に与える位相遅れ(待ち時間):dt[s]) をそれぞれ8bitの遺伝子に見立て、合計32bitの遺伝子を遺伝的アルゴリズム(Genetic Algorithm 以下GA)によって求める。また、各歩行パラメータは初期値として以下のような値域を設定している。 θ=45[deg], ω1=1.0[rad/s], k=4.0[-], dt=1.17[s]のパラメータを与えると、以下の動画1のように正しくトライポッド歩行を行っていることが確認できる。 動画1 トライポッド歩行の例 しかし、これらの値はあくまで静歩行を行うように設計したパラメータであって、このロボットが平地でトライポッド歩行を行うのに適したパラメータであるかはわからない。そこで、本研究では遺伝的アルゴリズム(Genetic Algorithm 以下GA)を用いて、評価の高い歩行パラメータをシミュレーションにより設計する。 本シミュレーションでは、Gazeboでの歩行シミュレーションとOctaveのGAプログラムを、csvファイルを通して以下のように連携させている。 図5 GAを使った歩行シミュレーション また、GAプログラムの処理手順は以下のようになっている。 図6 GAのフローチャート 遺伝子の環境に対する適応度の計算には以下の(1)式を用いた。 ここで、(1)式の変数を以下に示す。 図7 地面からモデル中心までの距離 個体数10, 世代数10, 生存率80%, 突然変異発生率0.05%に設定してシミュレーションを数回実行したところ、(1)式では正しくトライポッド歩行を行う‘静歩行’モデルに進化せず、全く動かない‘不動’モデルか、腹部を地面に擦りながら移動する‘腹ばい’モデルに進化してしまうことが分かった。この時のシミュレーション結果を表1に、腹ばいモデルの歩行シミュレーションを動画2にそれぞれ示す。 表1 (1)式を用いたシミュレーション結果 ここで、表1の変数を以下に示す。 動画2 GAにより生成された腹ばい歩行 表1より、各モデルの適応度は全く動かなかった不動モデルが一番高くなり、続いて腹部を擦りながら移動する腹ばいモデル、静歩行を行うパラメータを用いた静歩行モデルの順となっている。これは、(1)式では、ロボットモデルの胴体z方向の移動量が少ないほど適応度が高くなるためである。 そこで、不動型モデルへの進化を抑制するために、適応度の計算式である(1)式を胴体部のz方向の値が大きいほど評価が高くなるように、以下の(2)式のように変更する。さらに、(2)式の右辺第四項にはx方向へ一定距離進まなければペナルティが発生するように、新たに項目を追加した。また、腹ばい型モデルへの進化を妨げるために右辺各項の重みも以下のように変更した。 ここで、 a:xに対する重み(10) b:yに対する重み(0.01) c:zに対する重み(0.1) d:pに対する重み(1000) この(2)式を用いて表1のシミュレーション結果を再計算した結果を以下の表2に示す。 表2 (2)式での表1の再計算結果 表2から、(2)式を用いることによって、静歩行を行うように設計されたパラメータの適応度が一番高くなり、不動モデルおよび腹ばいモデルは適応度が十分に低くなっていることが確認できる。そのため、(2)式で遺伝子の適応度を算出すれば、遺伝子は静歩行を行うもののみに進化すると考えられる。 (2)式を用いて、個体数100, 世代数50, 生存率80%, 突然変異発生率0.05%に設定してシミュレーションを行ったところ、遺伝子は主に2つのタイプへ進化していた。1つは以下の動画3のように、想定していた通りの静歩行を行うモデルへと進化していた。 動画3 (2)式により生成された静歩行を行うモデル(48世代目の遺伝子) もう一つは、以下の動画4のように腹部の四隅を地面につけながら歩行する、言わば尻もちをつきながら歩行するモデルへと進化していた。また、この時のシミュレーション結果を表3に示す。 動画4 (2)式により生成された尻もちをつきながら歩行するモデル(12世代目の遺伝子) 表3 (2)式を用いたシミュレーション結果 表3より、今回のシミュレーション結果である尻もちモデル(12世代目)と静歩行モデル(48世代目) の適応度を比較すると、値にほとんど差がなかった。この結果は、ペナルティがモデル胴体中心部のz座標が一定値を超えたときのみ発生するように設定してあり、尻もちモデルの胴体中心部のz座標は一定値に届かなかったからだと思われる。そのため、尻もちモデルにペナルティが発生せず、静歩行モデルとほぼ同じ適応度となった。したがって、(2)式で遺伝子の評価を行っても静歩行を行うモデルのみに進化しないということが言える。 遺伝子が尻もちモデルへと進化することを防ぐため、以下の図8のようにモデル腹部の四隅にセンサー代わりの仮設リンクを設置し、このリンクのz方向の移動量もペナルティとして考慮する。そこで、遺伝子の評価式も(2)式から以下の(3)式に変更した。 図8 モデルにセンサー代わりの仮設リンクを追加 また、仮設リンクを追加したことによりモデル胴体中心部の座標がずれるため、ペナルティの条件式を以下のように変更した。 図9 ペナルティ条件式の変更 (3)式を用いて、個体数100, 世代数50, 生存率80%, 突然変異発生率0.05%でシミュレーションを行った結果、遺伝子は静歩行を行うモデルのみに進化していることが確認できた。以下の動画5, 6は、このシミュレーション中における1世代目の遺伝子の歩行と、最も適応度の高かった12世代目の適応度最大となる遺伝子の歩行である。 動画5 1世代目のでたらめな歩行 動画6 12世代目の適応度最大となる遺伝子の歩行 動画5および6から、遺伝子が最初はでたらめな歩行を行っており、世代が進むことで静歩行を行うモデルに進化したということがわかる。また、このシミュレーション結果を図10および表4,5にそれぞれ示す。 図10 各世代の適応度平均値および最大値 表4 (3)式を用いたシミュレーション結果 表5 各世代の適応度最大時の遺伝子が静歩行を行っているかの確認 図10のグラフは、横軸に世代数を、縦軸に各世代の適応度平均値をとったものを青いグラフで、各世代の適応度最大値をとったものを緑のグラフでそれぞれ示している。平均値のグラフ(青いグラフ)から本シミュレーションでは、約8世代目で適応度の増加が止まり、遺伝子の進化が終了していることがわかる。また、表5は各世代の適応度最大時の遺伝子が静歩行を行っているか確認した結果である。表5より、本シミュレーションでは2世代目から静歩行を行う遺伝子に進化していることが確認でき、早い段階で進化の方向性が確立したと考えられる。 表4では、このシミュレーション結果である12世代目の適応度最大となる遺伝子と、静歩行を行うように設計されたパラメータとの適応度をそれぞれ示したものである。両者の適応度を比較すると、本シミュレーション結果の適応度は静歩行を行うように設計されたパラメータよりも、僅かに値が小さいことがわかる。そのため、本シミュレーションからは、静歩行を行うように設計されたパラメータが一番評価の高いものであると言える。 また、表4の値から12世代目の適応度最大となる遺伝子の時速を算出すると約0.8[km/h]である。人の歩行速度が約4.0[km/h]であることを考えると、初期条件として設定した歩行パラメータの値域を大きくしても良いと思われる。 今後は、障害物などを設置し、実際の干潟に近い不整地を想定したシミュレーションを行い、評価の高い歩行パラメータを設計していく。